ppouliot.ansible_bootstrap
Ansibleロール: ansible-bootstrap
Ansibleを効果的に実行するためには、ターゲットマシンにPythonインタープリターが必要です。CoreOSやFlatcar Linuxのマシンは最小限の構成で、Pythonのバージョンが付属していません。さらに、他の人が管理しているジャンプボックスを使用する場合、ソフトウェアのインストールに制限があり、単一のディレクトリ構造にインストールすることしかできない場合があります。
この制限を回避するために、軽量のPythonインタープリターであるportable version of pypyをインストールします。ansible-bootstrapロールは、ユーザーのホームディレクトリにpypy(pipを含む)をインストールし、新しくインストールされたPythonスタックの使用を容易にするためのシンボリックリンクを作成し、パスを調整します。これにより、Ansibleを使ってContainer Linuxノード上のインストールされたPythonインタープリターを利用するために、インベントリファイルを更新できます。
また、Ansibleコントローラー構造をこのモデルでブートストラップするのが非常に便利になります。そのため、Ansibleコントロール用のpypyをブートストラップするための追加機能や、SSHバスティオンホストのプロキシが有効なAnsibleコントローラーとしての機能が追加されています。
ロール変数:
PIPの有効化
この値を設定することで、ユーザーのホームディレクトリにPIPと必要なツールをインストールするかどうかを制御します。デフォルト値は'True'に設定されています。
enable_pip: True
Ansibleの有効化
この値を設定することで、新しく展開されたpypy環境を使ってAnsibleをインストールするかどうかを制御します。さらに、アプリケーション用のシンボリックリンクが~/binに作成され、.bashrcのユーザーパスステートメントに追加されます。デフォルト値は'False'に設定されています。
enable_ansible: True
Ansibleフォルダの有効化
この値を設定すると、ユーザーのホームディレクトリにAnsibleコントローラーのためのフォルダインフラと設定ファイルが作成されます。デフォルト値は'False'に設定されています。
enable_ansible_folders: True
一般的なロールフォルダの有効化
この値を設定すると、~/ansible/roles/commonにAnsible-galaxyを使って一般的なロールのためのフォルダインフラが作成されます。デフォルト値は'False'に設定されています。
enable_ansible_common_role: True
バスティオンの有効化(Ansible SSHプロキシングのため)
この値を設定すると、ansible/ssh.cfg
ファイルでバスティオンホストを介してSSHプロキシかつAnsibleを使うためのAnsible設定が作成されます。デフォルト値は'False'に設定されています。
enable_bastion: True
bastion_hostname: bastion.contoso.ltd # バスティオンホストのFQDN
bastion_user: bwayne # バスティオンホストのユーザー
bastion_ip: 172.168.1.10 # バスティオンホストのIPアドレス
bastion_ansible_host: 192.168.1.* # バスティオンの向こう側にあるホスト
インストール
最新のモジュールをインストールするには、ansible-galaxyを使用します。
ansible-galaxy install ppouliot.ansible-bootstrap
プロジェクトの構成
通常のロールとは異なり、Container Linuxホスト用に代替のPythonインタープリターを使用するようにAnsibleを構成する必要があります。これは、インベントリファイルにcontainer-linuxグループを追加し、グループの変数を新しいPythonインタープリターを使用するように設定することで行えます。これにより、Ansibleを使ってCoreOSと非CoreOSのホストを管理できます。CoreOSを持つすべてのホストをcontainer-linuxインベントリグループに入れるだけで、指定されたPythonインタープリターが自動で使用されます。
[container-linux]
host-01
host-02
[container-linux:vars]
enable_pip=True
ansible_ssh_user=core
ansible_python_interpreter=/home/core/bin/python
ansible_connection= ssh
ansible_ssh_private_key_file=/etc/ansible/keys/id_rsa
enable_ansible=True
enable_ansible_folders=True
enable_bastion=True
bastion_hostname=bastion.contoso.ltd
bastion_user=bwayne
bastion_ip=172.168.1.10
bastion_ansible_host=192.168.1.*
これにより、ansible-bootstrapロールによって作成されるPythonインタープリター/home/core/bin/python
をAnsibleが使用するように設定されます。
ブートストラッププレイブック
次に、以下の内容をプレイブックファイルに追加し、site.ymlに含めて、container-linuxグループのすべてのホストで実行されるようにします。
- hosts: container-linux
gather_facts: False
remote_user: core
roles:
- ppouliot.ansible-bootstrap
gather_factsがfalseに設定されていることを確認してください。そうしないと、Ansibleは最初にPythonを使ってシステムのファクトを取得しようとしますが、それはまだインストールされていません!
貢献者
- Peter Pouliot peter@pouliot.net
著作権とライセンス
著作権 (C) 2018 Peter J. Pouliot
Peter Pouliotへの連絡: peter@pouliot.net
Apache License, Version 2.0(「ライセンス」)の下でライセンスされています。ライセンスに従わない限り、このファイルを使用してはなりません。 ライセンスのコピーは以下のリンクから取得できます。
http://www.apache.org/licenses/LICENSE-2.0
適用される法律で要求される場合や書面で合意された場合を除き、ライセンスで配布されるソフトウェアは「現状有姿」で配布され、いかなる種類の保証や条件もありません。ライセンスに従うことで、ライセンスの特定の権限を管理できます。