tpaexec provision
=================

プロビジョニングは、クラスターに必要なインスタンスとその他のリソースを作成します。

このプロセスの正確な詳細は、クラスターの構成中に選択したアーキテクチャたとえば
:ref:`M1 <M1>`  とプラットフォームたとえば :ref:`awscliを使用してボリューム属性を変更する <awscliを使用してボリューム属性を変更する>` 
の両方に依存します。

プロビジョニングステージの最後に、基本的なオペレーティングシステムがインストールされた必要な数のインスタンスができます。TPAは、ssh経由でアクセスできますルートにsudoを使用します。

前提条件
--------

クラスターをプロビジョニングする前に、 :ref:`クラスター構成 <クラスター構成>` を使用してクラスター構成を生成する必要があります

そして、必要に応じてconfig.ymlを編集して構成を微調整します。

プラットフォーム依存の追加の手順が必要になる場合があります。たとえば、AWS
APIアクセスキーペアを取得してEC2インスタンスをプロビジョニングするか、LXDまたはDockerをセットアップしてコンテナをプロビジョニングする必要があります。詳細については、プラットフォームのドキュメントを参照してください。

クイックスタート
----------------

.. code:: shell

   tpaexec provision ~/clusters/speedy

.. code:: output

   PLAY [Provision cluster]  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  **** **
   ...

   TASK [Set up EC2 instances]  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  *** 
   changed: [localhost] => (item=us-east-1:uproar)
   changed: [localhost] => (item=us-east-1:unravel)
   changed: [localhost] => (item=us-east-1:kinsman)
   ...

   TASK [Generate ssh_config file for the cluster]  ****  ****  ****  ****  ****  ****  ****  ****  *** 
   changed: [localhost]

   PLAY RECAP  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  **** 
   localhost                  : ok=163  changed=35   unreachable=0    failed=0    skipped=44   rescued=0    ignored=2

   real    4m42.726s
   user    0m39.101s
   sys     0m15.687s

このコマンドは、大量の出力を生成しますさらに詳細な出力が必要な場合は、コマンドに\ ``-v``
、\ ``-vv``
などを追加します。出力は、クラスターディレクトリの\ ``ansible.log``
にも記録されます。これは、環境変数\ ``ANSIBLE_LOG_PATH``
を目的のログファイルのパスと名前に設定することによりオーバーライドできます。

エラーなしで完了した場合は、 :ref:`tpaexec deploy <tpaexec deploy>` の実行に進んでソフトウェアのインストールと構成を行うことができます。

オプション
----------

クラウドインスタンスをプロビジョニングするときは、インスタンスが、それらを担当する人間まで直接追跡可能であることを確認することが特に重要です。デフォルトでは、TPAは\ ``tpaexec provision``
を実行しているユーザーのログイン名が所有するものとしてEC2インスタンスにタグ付けします。

名前を変更するには\ ``--owner <name>``
を指定しますたとえば、ユーザー名がpostgresやec2-userのような汎用的なものである場合。イニシャル、「名、姓」、またはその他を一意に識別するために使用できます。

指定した他のオプションはAnsibleに渡されます。

インスタンスへのアクセス
------------------------

プロビジョニングが完了すると、インスタンスにSSH接続できるようになります。インスタンスが起動してSSHホストキーをインストールできるようにするために少し遅延した後。上記の出力に示されているように、tpaexecは使用できるssh_configファイルを生成します。

.. code:: shell

   cd ~/clusters/speedy
   cat ssh_config

.. code:: output

   Host *
       Port 22
       IdentitiesOnly yes
       IdentityFile "id_speedy"
       UserKnownHostsFile known_hosts tpa_known_hosts
       ServerAliveInterval 60

   Host uproar
       User admin
       HostName 3.88.255.205
   Host unravel
       User admin
       HostName 54.80.99.142
   Host kinsman
       User admin
       HostName 54.165.229.179

ホストにログインするには、コマンド ``ssh -F ssh_config``
の後にホスト名を使用します。例 ``ssh -F ssh_config uproar``

ジャンプホストを介してインスタンスに接続する必要がある場合は、
``config_yml`` の\ ``jumphost``
トップレベルセクションでその詳細を指定します。

.. code:: output

   jumphost:
       name: myjumphost
       user: my_username
       identity_file: ~/.ssh/id_ed25519

TPAは、ジャンプホスト用に生成されたssh構成に\ ``Host``
セクションを作成し、各ホストに\ ``ProxyJump`` 指示子を追加します。

プロビジョニングの直後に :ref:`tpaexec deploy <tpaexec deploy>` を実行できます。インスタンスが起動するまで、必要なだけ待機します。インスタンスが起動するのを待ったり、展開を開始する前にssh接続したりする必要はありません。

生成されたファイル
------------------

プロビジョニングプロセス中に、多数の新しいファイルがクラスターディレクトリに作成されます。

.. code:: shell

   ls ~/clusters/speedy

.. code:: output

   total 240
   - rw-r--r-- 1 ams ams 193098 Aug  4 17:59 ansible.log
   drwxr-xr-x 2 ams ams   4096 Aug  4 17:38 commands
   - rw-r--r-- 1 ams ams   1442 Aug  4 17:54 config.yml
   lrwxrwxrwx 1 ams ams     51 Aug  4 17:38 deploy.yml ->
                                /opt/EDB/TPA/architectures/M1/deploy.yml
   drwxr-xr-x 2 ams ams   4096 Aug  4 17:38 hostkeys
   - rw------- 1 ams ams   1675 Aug  4 17:38 id_speedy
   - rw------- 1 ams ams   1438 Aug  4 17:38 id_speedy.ppk
   - rw-r--r-- 1 ams ams    393 Aug  4 17:38 id_speedy.pub
   drwxr-xr-x 4 ams ams   4096 Aug  4 17:50 inventory
   - rw-r--r-- 1 ams ams   2928 Aug  4 17:50 tpa_known_hosts
   - rw-r--r-- 1 ams ams    410 Aug  4 17:50 ssh_config
   - rw-r--r-- 1 ams ams   3395 Aug  4 17:59 vars.json
   drwxr-xr-x 2 ams ams   4096 Aug  4 17:38 vault

私たちはすでにssh *configファイルを研究しました。これは、 \`id*
\*\ ``filesクラスター用に生成されたSSHキーペアと``\ tpa_known_hosts\ ``インスタンスにインストールされた``\ hostkeys/\`
の署名を参照します。

``vars.json`` ファイルは、\ ``--cached``
の後続の呼び出しで\ ``tpaexec provision``
によって使用される場合があります。

``inventory/``
ディレクトリには、静的および動的インベントリーファイルと、config.ymlのグループおよびホスト変数定義が含まれています。

.. code:: shell

   cat inventory/00-speedy

.. code:: output

   [tag_Cluster_speedy]
   uproar ansible_host=3.88.255.205 node=1 platform=aws
   unravel ansible_host=54.80.99.142 node=2 platform=aws
   kinsman ansible_host=54.165.229.179 node=3 platform=aws

.. code:: shell

   cat inventory/group_vars/tag_Cluster_speedy/01-speedy.yml

.. code:: output

   cluster_name: speedy
   cluster_tag: tag_Cluster_speedy
   edb_repositories: []
   failover_manager: repmgr
   keyring_backend: system
   postgres_flavour: postgresql
   postgres_version: 14
   preferred_python_version: python3
   ssh_key_file: id_speedy
   tpa_version: v23.33-24-g4c0909d1

.. code:: shell

   cat inventory/host_vars/kinsman/01-instance_vars.yml

.. code:: output

   ansible_user: admin
   location: main
   region: us-east-1
   role:

   - barman

   - log-server

   - witness
   upstream: uproar
   volumes:

   - device: /dev/xvda

   - device: /dev/sdf
     volume_for: barman_data

config.ymlの変数を変更し、プロビジョニングを再実行すると、これらのファイルが更新されます。構成を変更しない場合、何も起こりません。
config.ymlに新しいインスタンスを追加して再実行すると、既存のインスタンスに影響を与えることなく新しいインスタンスが表示されます。
