はじめに
こんにちは たそ(@taso_int)です。
12月の中旬に差し掛かろうとしています。
年末に積んでる本を消化したいところです。
昨日AZ900無事受かりました。ちょっと不安でしたが8割ぐらいとれてましたね。
ansible-builderとAnsible-runnerについて
キャッチアップの一環で入門的なものを書いていこうと思います。
今回はbuilder編になります。
ansible-builderとanisble-runnerについて
Ansible Automation Platform 2.1(次以降AAP)がリリースされ、
実行環境(execution environment 次以降ee)が
venv(pythonの仮想環境)からコンテナへと変更されました。
そのためeeのコンテナを作成するansible-builderが必要となります。
またコンテナ上でplaybookを実行させるansible-runnerが必要となります。
どの環境でも同じものを動かすことができるコンテナのメリットを採用している
と考えられます。
ドキュメント
builder
ansible-builder.readthedocs.io
runner
環境
AWS RHEL8
python 3.9.6
ansible-builder 1.0.1
ansible-runner 2.1.1
podman 3.3.1
インストール方法
コンテナのツールであるdockerもしくはpodmanが必要になります。
今回はRHELを使用しているのでpodmanをインストールします。
sudo dnf install -y @container-tools
pipを使ってanisble-builderとanible-runnerをインストールします。
pip install anisble-builder pip install ansible-runner
これで以上となります。
Ansibleはeeで入れることになるのでインストールは必要ありません。
eeコンテナの作成
インストールし終わったらeeのコンテナの作成をします。
AAPとの連携がわかってないので、フォルダー配置がわかってないです。
コンテナ用のフォルダーを作成します。
フォルダーの構成はこんな感じです。
XXX ├── ansible.cfg # ansible.cfg ├── execution-environment.yml # コンテナの設定ファイル ├── bindep.txt # dnfでインストールする一覧(今回は使わない) ├── requirements.txt # pipでインストールもの一覧 └── requirements.yml # ansible galaxyでインストールするもの一覧
execution-environment.yml
コンテナの設定ファイルになります。
以下が記入例となります。
--- version: 1 build_arg_defaults: EE_BASE_IMAGE: 'quay.io/ansible/ansible-runner:stable-2.12-devel' ansible_config: 'ansible.cfg' # collection をAutomation Hubからもってくるときの認証情報 dependencies: galaxy: requirements.yml # galaxyでインストールする一覧 python: requirements.txt # pipでインストールする一覧 system: bindep.txt #dnfでインストールする一覧 additional_build_steps: #コンテナを作成でのオプション prepend: | RUN pip3 install --upgrade pip setuptools append: - RUN ls -la /etc - ENV AZURE_SUBSCRIPTION_ID="" - ENV AZURE_CLIENT_ID="" - ENV AZURE_SECRET="" - ENV AZURE_TENANT=""
軽い解説をしたいと思います。
EE_BASE_IMAGE
これはeeのAnsible環境(2.9~2.12まである)になります。
コンテナイメージレジストリ
コンテナイメージレジストリから自分の使いたい環境を引っ張る形になります。
これらのレジストリは更新されてしまうため時間が経つと変化が起こる可能性があります。
そのためイメージのハッシュ値を指定することで、
そのハッシュ値のイメージを変更なしに使用することが可能です。
例 Ansible2.9のハッシュ値を指定
EE_BASE_IMAGE: 'quay.io/ansible/ansible-runner@sha256:14c06cf54c0f9b090d0c189c0eeb76db2a29f3fd630cb272cc9752ce6c21a6e7
そのイメージのAnsibleのバージョンが見たい場合はpodmanで調べることが可能です。
[ec2-user@ip-172-31-22-9 ~]$ podman run -it quay.io/ansible/ansible-runner:stable-2.12-devel ansible --version ansible [core 2.12.1.post0] config file = None configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.8/site-packages/ansible ansible collection location = /home/runner/.ansible/collections:/usr/share/ansible/collections executable location = /usr/local/bin/ansible python version = 3.8.8 (default, Aug 25 2021, 16:13:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] jinja version = 2.10.3 libyaml = True
ansible.cfg
いつもならplaybookのフォルダーに入れたりしますが、
ここで設定することで置く必要がなくなります。
今回はdiffのcontext(デフォルトは3行)を1行にする設定を入れておきます。
訂正
collectionをAutomation Hubからもってくるときの認証情報を指定するanisble.cfgで、
Ansible自体の設定ではありませんでした。
@akira6592さんありがとうございます。
Automation Hub への接続情報をかいた ansible.cfg のパスを ansible-builder.yml の ansible_config で指定したら Automation Hub から collection もってこれた(ansible.controller は Galaxy にない) pic.twitter.com/LkQfGGw6GM
— よこち (@akira6592) 2021年12月12日
dependencies
dependenciesは指定ファイルに書かれているリストをインストールします。
例 requirements.txt
ansible[azure] pywinrm paramiko netaddr
例 requirements.yml
--- collections: - name: azure.azcollection - name: ansible.windows - name: cisco.ios
additional_build_steps
prependがメインビルドの前、appendはメインビルド後で
追加のコマンドを指定することができます。
今回はAzureのデプロイに関する自動化を実行するので、
サービスプリンシパル(AWSのアクセスシークレットキー的なもの)を環境変数として追加します。
作成する
上記のファイル一式を用意したらeeのコンテナを作成します。
ansible-builder build --t eetest --verbosity 3
runnerの設定でコンテナの名前を指定するので--tagを付けることをお勧めします。
--verbosity 3でコンテナの作成ログを確認することができます。
appendで設定した環境変数が確認できますね。
[3/3] STEP 8/11: ENV AZURE_SUBSCRIPTION_ID="" [3/3] STEP 9/11: ENV AZURE_CLIENT_ID="" [3/3] STEP 10/11: ENV AZURE_SECRET="" [3/3] STEP 11/11: ENV AZURE_TENANT="" [3/3] COMMIT eetest Successfully tagged localhost/eetest:latest
podmanでコンテナが作成されているか確認しましょう。
(venv) [ec2-user@ip-172-31-22-9 test]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/eetest latest e0fe27474668 7 minutes ago 1.12 GB <none> <none> f2555b8fd8dc 9 minutes ago 1.12 GB <none> <none> e8fea866ba54 11 minutes ago 786 MB quay.io/ansible/ansible-runner stable-2.12-devel f36649c10f20 8 hours ago 763 MB <none> <none> 0ef5110917a3 4 days ago 762 MB <none> <none> b0e87c7a7760 5 days ago 767 MB quay.io/ansible/ansible-runner latest 4284ef892283 5 days ago 762 MB quay.io/ansible/ansible-builder latest 6ccdd35188d4 5 days ago 655 MB
作られてはいますがnoneが気になりますね。
コンテナの知識があまりないのでここら辺が分かる方は教えてほしいです。
コンテナの勉強がしたい…
おすすめコンテンツがあれば教えてください。
実行するとcontextというディレクトリが生成されます。
(builderのオプションで生成場所の指定も可能)
そこに今回利用したファイルのバックアップやコンテナファイルが保存されます。
これでeeのコンテナが作れたので次はrunnerでplaybookを実行したいと思います。
こちらはrunner編で解説します。
ここまでお疲れ様でした。
参考ブログ
参考にさせて頂いたブログを紹介します。