インベントリホストまたはグループに関連付けられていないが、プレーブックが実行されているサーバー層に関連付けられていない可能性のあるインベントリ変数を作成することはできますか?私はAPTを使用してlibffi-devパッケージをインストールするAnsibleの役割を持っていますが、各サーバー層に異なるバージョンのパッケージをインストールしたいと思うかもしれません。私はその目的のために変数 "libffi-dev_ver"を作成しました。私はまた、各階層に対応する在庫ファイル "開発"、 "ステージング"、 "生産"を持っています。私の主なsite.ymlの脚本から呼び出され危険なティア固有の在庫変数を設定するにはどうすればいいですか?
私の役割の主なタスクは、バージョン変数は前役割を実行するために存在することを確認します
# roles/misc_libs/tasks/main.yml
- include: check_vars.yml tags=misc_libs
- include: misc_libs.yml tags=misc_libs
check_vars.ymlチェックをパッケージのバージョンの変数が存在することを確認するために、 :
# roles/misc_libs_tasks/check_vars.yml
- name: check that required role variables are set
fail: msg="{{ item }} is not defined"
when: not {{ item }}
with_items:
- libffi-dev_ver
役割が実際にパッケージをインストールするには、その変数を使用していますmisc_libs:
# roles/misc_libs/tasks/misc_libs.yml
- name: install libffi-dev
apt: >
pkg=libffi-dev={{ libffi-dev_ver }}
update_cache=yes
cache_valid_time=3600
become: True
私の開発インベントリファイルは、次のようになります
# development
[webservers]
web01.example.com ansible_ssh_host=<ip_address>
[dev:children]
webservers
[webservers:vars]
libffi-dev_ver="3.1-2+b2"
私は、このコマンドを実行すると:
fatal: [web01.example.com] => error while evaluating conditional: not libffi-dev_ver
宣言するための正しい方法は何ですか:
ansible-playbook -i development site.yml -l webservers
を私はこのAnsibleのエラーを取得しますこのような変数のバージョンをAnabilitiesに入れますか?変数の値は、インベントリファイルがサーバー層固有であるため、インベントリファイルに格納されることを示すサーバー層によって異なります。しかし、すべての在庫変数は、ホストまたはグループに関連付けられている必要があります。私はそれをしましたが、役割はまだ変数を参照していません。私はサーバー層を検出する役割にタスクを追加し、それに応じて変数を設定するための「条件付き」条件を使用しますが、そのソリューションは醜いようです。なぜなら、複数のパッケージをロールにインストールすると、それぞれに3つの条件パッケージバージョン変数。私はAnipalのドキュメンテーションを見て、多階層のプレイブックを設定するためのブログ記事を多数読んだが、私はこの特定の状況については言及していない。このような階層固有の変数を宣言する正しい方法は何ですか?
私はあなたが達成しようとしているものは得られません。なぜ: #役割/ misc_libs /タスク/ misc_libs.yml - 名前:libffi-devのインストール 傾向:> PKG = libffi-devを= {{libffi-dev_ver}} update_cache = yesの cache_valid_time = 3600 次のようになります:True :libffi-dev_verが定義されています が不十分ですか? –