Ansible Automation Platform の execution environments

レッドハットの杉村です。Ansible のテクニカルサポートをしています。毎月1つは何か書くことを目標にしています。

今月は execution environments について紹介します。

Ansible は Python で書かれており、Python の実行環境を作ってライブラリやモジュールの依存関係を閉じ込めて実行するようになっています。

旧 Ansible Tower では virtual environment の仕組みを使っていました。以前記事を書きましたのでご覧ください。

rheb.hatenablog.com

rheb.hatenablog.com

Ansible automation controller (旧称 Ansible Tower) では、virtual environment は controller の Web UI やサービスなどを動作するためだけに使われるようになり、ansible-playbook などのコマンドは execution environments という別な仕組みを使うようになりました。

execution environments はこのような特徴を備えています。

  • Red Hat Enterprise Linux UBI 8 をベースとするコンテナイメージ
  • Ansible 2.9 もしくは Ansible Core 2.11 を動作させることができる
  • Python 3.8
  • Collections をあらかじめインストールする
  • Python の依存ライブラリや動作に必要な設定ファイルなどもあらかじめインストールできる

実行環境がコンテナとしてまとめられたことにより、Podman のコンテナとして扱えるようになります。イメージ配布の仕組みも新しく Automation Hub に取り入れられ、クラスタとして複数台の controller を使う場合でも、それぞれに virtual environment を作らなくてもよくなっています。

execution environments の作り方

Ansible Automation Platform 2.0.x をインストールしますと、いくつかの execution environments が初期インストールされます。

  • ansible-automation-platform-20-early-access/ee-supported-rhel8
  • ansible-automation-platform-20-early-access/ee-minimal-rhel8

こちらの Container images のサイトから検索して見つけることもできますが、単独で取って来て利用いただくことはお勧めしません。

catalog.redhat.com

以前 virtual environment で利用されていたように自分でカスタマイズして使いたいときには、ansible-builder が用意されています。英語ではありますがこちらにドキュメントを書きましたので、弊社のアカウントがある方はご覧ください。

access.redhat.com

例えばコミュニティで開発されているコレクションを使いたいときには必要になると思います。プロジェクトの中で collections/requirements.yml を置くことで、プロジェクトを同期するときにコレクションも動的にダウンロードしてくるという機能があることは先月解説しましたが、そのコレクションが Python のモジュールに依存していて追加で実行環境にインストールしておかなければいけないときには、この requirements.yml では対応できないという問題がありました。

rheb.hatenablog.com

他にも上のドキュメントの例にも書きましたが、Windows を操作するために Kerberos 認証が必要となって /etc/krb5.conf の設定や暗号化周りの設定をカスタマイズしなければいけない場合には、やはり execution environments を作っていただくことになります。

execution environments の使い方

controller の Web UI からは、「実行環境」に登録すればプロジェクトやジョブテンプレート、インベントリー同期などで使えます。

f:id:sugitk:20211031170519p:plain

コマンドラインからは、ansible-navigator を通して使うことができます。ansible-builder と同様に、ansible-automation-platform-2.0-early-access-for-rhel-8-x86_64-rpms のリポジトリから dnf でインストールできます。

# dnf install ansible-navigator

controller 上で起動させる場合には、awx ユーザでお使いいただくと便利です。たとえばわたしの環境ではこのようにイメージがあります。

# su - awx
$ podman images
REPOSITORY                                                                            TAG         IMAGE ID      CREATED       SIZE
localhost/ee-supported-rc4-with-collections                                           latest      6b024619c7ea  13 days ago   1.24 GB
localhost/latest_aws_collection_execution_environment_minimal                         latest      808626f78226  2 weeks ago   400 MB
registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8     2.0.0       85ca2003a842  2 months ago  920 MB
registry.redhat.io/ansible-automation-platform-20-early-access/ee-minimal-rhel8       2.0.0       078c7d4aca51  2 months ago  288 MB
registry.redhat.io/ansible-automation-platform-20-early-access/ansible-builder-rhel8  2.0.0       df5d9fdcdbd4  2 months ago  359 MB

ansible-navigator からも見ることができます。ansible-navigator images コマンドを実行すると、昔を思い出すようなキャラクタベースのアプリケーションが起動します。数字を押していろいろたどってみてください。

f:id:sugitk:20211031170545p:plain

f:id:sugitk:20211031170600p:plain

もちろん Ansible のコマンドを実行することもできます。inventory と playbook.yml を用意して、ee を指定して起動した例です。

$ ansible-navigator run playbook.yml -i inventory --eei registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0 

全体の実行結果が表示されて、数字を押すことで中を掘って見ていくことができます。

f:id:sugitk:20211031170637p:plain

f:id:sugitk:20211031170650p:plain

f:id:sugitk:20211031170702p:plain

従来のような出力で実行させることもできます。

$ ansible-navigator run playbook.yml -i inventory --eei registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0 -m stdout

PLAY [servers] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.0.100]
ok: [192.168.0.101]
ok: [192.168.0.102]

TASK [ping] ********************************************************************
ok: [192.168.0.102]
ok: [192.168.0.101]
ok: [192.168.0.100]

PLAY RECAP *********************************************************************
192.168.0.100              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.0.101              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.0.102              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

$

プレイブックを実行するだけだとあまり便利になったような気はしませんが、他にもいろいろと機能はありますので、ご興味ありましたらお手元でも動かしてみてください。ドキュメントはこちらです。

access.redhat.com

おまけ

実際には podman コマンドから実行してしまうこともよくあります。

$ podman run -it registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0 ansible --version
ansible [core 2.11.2] 
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/runner/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.6 (default, Jan 22 2021, 11:41:28) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]
  jinja version = 2.10.3
  libyaml = True

$ podman run -it registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0 ansible-galaxy collection list

# /usr/share/ansible/collections/ansible_collections
Collection               Version
------------------------ -------
amazon.aws               1.5.0  
ansible.controller       4.0.0  
ansible.netcommon        2.2.0  
ansible.network          1.0.1  
...

外からファイルを与えないといけない場合にはコンテナの性質上そのままでは動作しませんので、ansible-navigator コマンドを使うこともあります。controller の Web UI からプロジェクトやジョブテンプレートを作って実行するのが一番楽だとは思います。

おわりに

Ansible Automation Platform 2.0 で導入された実行環境 (execution environments) について紹介してみました。

コンテナの扱いはもういまとなっては常識になってきているところがあると思いますし、広く普及したコンテナの知識を Ansible Automation Platform でもご利用いただけるのはとても大きいと思います。

Ansible Automation Platform は Developer Subscription でもお試しいただけますので、ご興味持たれましたら試してみてください。

rheb.hatenablog.com

Happy Automation!

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。