Ansibleで変数を破棄する方法はありますか?
実際、各パッケージのすべてのロールで{{version}}変数が使用されています。複数のロールを実行すると、1つのロールのバージョン値が別のロールに渡されます-これは、一部のロールではバージョン値を指定していないため、ubuntu /のようなそれぞれのm/cで利用可能なそのパッケージのデフォルトバージョンをインストールできますredhatなど.
これが私の役割テンプレートです。 mysqlからの{{version}}の値がrabbitmqに渡されています。
roles:
- { role: mysql }
- { role: rabbitmq}
すべての役割でバージョンの値を破棄/削除できれば、問題は解決すると思います。
すでに指摘したように、Ansibleで変数を設定解除することはできません。
rabbitmq_version
などのように変数名にプレフィックスを追加することで、この状況を回避します。私見これはベストプラクティスです。
これに遭遇した状況を回避することに加えて、Host_vars
とgroup_vars
をより明確にします。
変数を設定解除するには、次のように、変数をnullに設定してset_factタスクを実行してみます。
- name: Unset variables
set_fact:
version:
other_var:
次のように、dictをnull
でオーバーライドできる完全な辞書がある場合:
- name: Set dict
set_fact:
dict:
rabbitmq_version: 1
other_version: 2
- name: override dict to null
set_fact:
dict:
何かのようなもの other_var:
は"other_var": null
JSONで。これが、Ansibleで変数を設定解除する方法です。ごきげんよう。
いいえ、Ansibleで変数(トップレベル)の設定を解除する方法はありません。
あなたができる唯一のことは、辞書を作成し、この辞書にキーとして変数を格納することです。 「親」辞書をクリアすると、基本的にdictionary.key is defined
条件式が機能します。
代わりに、ロールごとに変数を使用する必要があります。
roles:
- role: mysql
version: mysql_version
- role: rabbitmq
version: rabbitmq_version
または
roles:
- { role: mysql, version: mysql_version }
- { role: rabbitmq, version: rabbitmq_version }