レッドハットの杉村です。Ansible のテクニカルサポートをしています。
RHEL の設定変更を Ansible から容易にできるようにするための RHEL System Roles について、以前のブログで紹介されていました。
Ansible Automation Platform からこの System Roles を利用しようとすると、せっかく便利に使いたいと思っているのに見つけられないというエラーになってしまいます。
例えばこのようなプレイブックを書いたとします。
--- - hosts: all gather_facts: false become: true vars: timesync_ntp_servers: - hostname: foo.example.com iburst: true - hostname: bar.example.com iburst: true - hostname: baz.example.com iburst: true roles: - linux-system-roles.timesync
プロジェクトとジョブテンプレートを作成して実行すると、このようにエラーとなってしまいました。
Ansible Automation Platform ではコンテナイメージとして用意された実行環境 (Execution Environment) を使って Ansible のコマンドを実行するのですが、標準で提供するコンテナイメージの中には System Roles のパッケージはインストールされていないため、controller の OS にインストールしてあっても参照することができないためにエラーとなってしまいます。
ERROR! the role 'linux-system-roles.timesync' was not found in /runner/project/roles:/runner/requirements_roles:/home/runner/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/runner/project
この実行環境についてはこちらの記事もご覧ください。
このコンテナは Podman を使って実行します。Podman にはコンテナ外のディレクトリをマウントして参照できる設定があり、これを Ansible Automation Platform でも利用することができます。以前はこの設定は単に参照させるために使われたものではあったのですが、Ansible Automation Platform 2.1.2 以降からはオーバーレイマウント(上書き)のためにも設定できるようになりました。
設定 → ジョブ設定 → 分離されたジョブに公開するパス にこの行を追加します。
"/usr/share/ansible/roles/:/home/runner/.ansible/roles:O", "/usr/share/ansible/collections/:/home/runner/.ansible/collections:O"
初期値としては2行入っていますので、カンマ区切りで追加して保存してください。
再度ジョブテンプレートを実行すると、今度は成功します。
もしコントローラが1台ではなくクラスタになっているようなときは、それぞれのコントローラで System Roles のパッケージをインストールしてください。
$ sudo su - # dnf install rhel-system-roles
簡単ではありますが RHEL System Roles の使い方について紹介しました。
Ansible はクラウドリソースやネットワーク機器の扱いが多くなっているように感じておりまして、RHEL を直接設定していくという機会は減ってきているようには思いますが、System Roles は力を入れて開発が進められていますのでご活用いただけましたら幸いです。
Ansible Automation Platform の評価ライセンスリクエストはこちらからご利用いただけます。60日間利用できます。
Happy Automation!