TPA hooks
=========

TPAは、ユーザーの介入なしで完全な機能のクラスターをセットアップでき、カスタムリポジトリとパッケージ、カスタムPostgres構成pg_hba.confとpostgresql.confの両方を含むさまざまな :ref:`Instance configuration <Instance configuration>` を既に提供しています。

フックスクリプトを作成して、使用可能な構成設定では満たされない特定のニーズに対応できます。フックを使用すると、展開中に任意のAnsibleタスクを実行できます。

フックはTPAの究極の拡張メカニズムであり、それらを使用してできることに制限はありません。それらは注意して使用し、追加のメンテナンス負担が発生することに注意してください。
TPA開発者はフックコードについての洞察がなく、予想される段階でフックを呼び出すことを超えて、リリース間の互換性を保証できません。

概要
----

クラスターディレクトリの\ ``hooks``
サブディレクトリの下に特定の名前のファイルを作成すると、TPAは以下で説明するように、展開プロセスのさまざまな段階でそれらを呼び出します。

.. code:: bash

   $ mkdir ~/clusters/speedy/hooks
   $ cat > ~/clusters/speedy/hooks/pre-deploy.yml
   - --

   -  debug: msg="hello world!"

フックスクリプトは\ ``include_tasks``
で呼び出されるため、Ansibleタスクのリストを含むYAMLファイルであることが想定されますプレイのリストを含むプレイブックではありません。以下に特に記載されていない限り、フックは展開内のすべてのホストに対して無条件に実行されます。

汎用フック
----------

展開前
^^^^^^

TPAは、Pythonをブートストラップした後すぐに\ ``hooks/pre-deploy.yml``
を呼び出しますが、リポジトリの構成やパッケージのインストールなど、他のことを行う前に。これは、独自のコードを実行できる最初の段階です。

このフックを使用して、
:ref:`Configuring APT repositories <Configuring APT repositories>` または :ref:`Configuring YUM repositories <Configuring YUM repositories>` でできることを超えて、カスタムリポジトリー構成をセットアップできます。

ポストリポジトリ
^^^^^^^^^^^^^^^^

TPAは、パッケージリポジトリの構成後に\ ``hooks/post-repo.yml``
を呼び出します。これを使用して、パッケージのインストールを開始する前にリポジトリー構成を修正できます。

pre-initdb
^^^^^^^^^^

TPAは、
:ref:`Running initdb <Running initdb>` が存在しない場合、 :ref:`Running initdb <Running initdb>` を決定する前に\ ``hooks/pre-initdb.yml``
を呼び出します。通常、このフックを使用する必要はありませんが、これを使用して\ ``PGDATA``
を自分自身で作成すると、TPAは\ ``initdb`` をスキップします。

postgres-config
^^^^^^^^^^^^^^^

TPAは、
pg_hba.confおよびconf.dのファイルを含むPostgres構成ファイルを生成した後、サーバーが起動する前に\ ``hooks/postgres-config.yml``
を呼び出します。

このフックを使用して、たとえば、 ``conf.d``
の下に追加の構成ファイルを作成できます。

postgres-config-final
^^^^^^^^^^^^^^^^^^^^^

TPAは、
Postgresを起動し、ユーザー、データベース、および拡張機能を作成した後、\ ``hooks/postgres-config-final.yml``
を呼び出します。このフックを使用して、
SQLコマンドを実行できます。たとえば、カスタム拡張機能の構成を実行したり、データベースオブジェクトを作成したりできます。

barman-pre-config
^^^^^^^^^^^^^^^^^

TPAは、 BarmanをインストールしてBarmanユーザーを設定した後、
Barman構成を生成する前に ``hooks/barman-pre-config.yml``
を呼び出します。

このフックを使用して、たとえば、
Barman証明書ファイルまたはマウントポイントに関連するタスクを実行できます。

efm-pre-config
^^^^^^^^^^^^^^

TPAは、efmのインストール、構成ディレクトリの作成、およびefmユーザーのセットアップの後、efm構成を生成する前に\ ``hooks/efm-pre-config.yml``
を呼び出します。

このフックの使用例は、efmヘルパースクリプトをインストールすることです。

harp-config
^^^^^^^^^^^

TPAは、 HARP構成ファイルを生成した後、
HARPサービスが開始される前に\ ``hooks/harp-config.yml`` を呼び出します。

このフックを使用して、たとえば、TPAのビルトインインターフェイスによって提供されないHARPプロキシのカスタマイズを実行できます。

このフックは、PGDノードを含むHARPパッケージをインストールするノードで実行されることに注意してください。

pgd-proxy-config
^^^^^^^^^^^^^^^^

TPAは、 PGD PROXY構成ファイルを生成した後、 PGD
PROXYサービスが開始される前に、 ``hooks/pgd-proxy-config.yml``
を呼び出します。

このフックを使用して、TPAのビルトインインターフェイスでは提供されていないPGDプロキシのカスタマイズを実行できます。

このフックは、PGD
PROXYパッケージをインストールするノードで実行されることに注意してください。

展開後
^^^^^^

TPAは、展開の最後に\ ``hooks/post-deploy.yml`` を呼び出します。

この段階の後は、好きなことを続けることができます。

このフックを使用して、TPA展開中に生成または変更された構成ファイルを変更すると、次の\ ``tpaexec deploy``
が変更を上書きするリスクがありますTPAはフックが何をしたのかを知りません。

PGDフック
---------

これらのフックは、PGD展開に固有です。

bdr-pre-node-creation
^^^^^^^^^^^^^^^^^^^^^

TPAは、インスタンスに初めてPGDノードを作成する前に、すべてのインスタンスで\ ``hooks/bdr-pre-node-creation.yml``
を呼び出します。必要なすべてのPGDノードが既に存在する場合、フックは呼び出されません。

bdr-post-group-creation
^^^^^^^^^^^^^^^^^^^^^^^

TPAは、 ``first_bdr_primary``
インスタンスでPGDノードグループを作成した後、すべてのインスタンスで\ ``hooks/bdr-post-group-creation.yml``
を呼び出します。必要なPGDグループが既に存在する場合、フックは呼び出されません。

bdr-pre-group-join
^^^^^^^^^^^^^^^^^^

TPAは、レプリケーションセットを作成、変更、または削除し、必要なサブスクリプションを構成した後、ノードに参加する前に、すべてのインスタンスで\ ``hooks/bdr-pre-group-join.yml``
を呼び出します。

このフックを使用して、
SQLコマンドを実行し、ノード参加が開始する前に必要になるレプリケーションセットの構成とサブスクリプションに対してその他の調整を実行できます。

たとえば、PGD監視レプリケーションセットを調整して、新しいテーブルを自動的に追加し、一般的にDDLフィルタを作成できます。

その他のフック
--------------

postgres-pre-update、postgres-post-update
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

:ref:`Upgrading your cluster <Upgrading your cluster>` コマンドは、パッケージをインストールする前に特定のインスタンスで\ ``hooks/postgres-pre-update.yml``
を呼び出し、パッケージのインストールが完了した後に\ ``hooks/postgres-post-update.yml``
を呼び出します。どちらのフックも、更新されるインスタンスでのみ呼び出されます。

これらのフックを使用して、環境に合わせて更新プロセスをカスタマイズできますたとえば、他のパッケージをインストールし、TPAが管理しないサービスを停止および再起動します。

新しいフック
------------

EDBは、必要に応じてTPAに新しいフックを追加します。ユースケースが既存のフックでカバーされていない場合は、私たちに連絡して問題について話し合ってください。
