TPA hooks
=========

TPAは、ユーザーの介入なしで完全に機能するクラスターをセットアップでき、カスタムリポジトリとパッケージ、カスタムPostgres構成（
pg_hba.confとpostgresql.confの両方）など、さまざまな :ref:`settings to control your cluster 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ファイルであると想定されます（playのリストを含むPlaybookではありません）。以下で特に記載がない限り、フックは展開内のすべてのホストに対して無条件に実行されます。

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

事前展開
^^^^^^^^

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

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

ポストレポ
^^^^^^^^^^

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

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

TPAは、 ``hooks/pre-initdb.yml`` を呼び出してから、
 :ref:`run initdb to create PGDATA <Running initdb>` が存在しない場合にそれを行うかどうかを決定します。通常、このフックを使用する必要はありません（ただし、これを使用して自分で\ ``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コマンドを実行できます。たとえば、カスタム拡張機能の構成を実行したり、データベースオブジェクトを作成したりできます。

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

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

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

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

デプロイ後
^^^^^^^^^^

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
Witnessレプリケーションセットを調整して、一般的に新しいテーブルを自動的に追加し、
DDLフィルターを作成できます。

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

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

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

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

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

EDBは、必要に応じて、TPAに新しいフックを追加します。あなたのユースケースが既存のフックでカバーされていない場合は、お問い合わせください。
