web-dev-qa-db-ja.com

Ansibleで変数値を破棄/削除/設定解除するにはどうすればよいですか?

Ansibleで変数を破棄する方法はありますか?

実際、各パッケージのすべてのロールで{{version}}変数が使用されています。複数のロールを実行すると、1つのロールのバージョン値が別のロールに渡されます-これは、一部のロールではバージョン値を指定していないため、ubuntu /のようなそれぞれのm/cで利用可能なそのパッケージのデフォルトバージョンをインストールできますredhatなど.

これが私の役割テンプレートです。 mysqlからの{{version}}の値がrabbitmqに渡されています。

    roles:
- { role: mysql }
- { role: rabbitmq}

すべての役割でバージョンの値を破棄/削除できれば、問題は解決すると思います。

8
MMA

すでに指摘したように、Ansibleで変数を設定解除することはできません。

rabbitmq_versionなどのように変数名にプレフィックスを追加することで、この状況を回避します。私見これはベストプラクティスです。

これに遭遇した状況を回避することに加えて、Host_varsgroup_varsをより明確にします。

8
Henrik Pingel

変数を設定解除するには、次のように、変数を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で変数を設定解除する方法です。ごきげんよう。

6
Jordan Stewart

いいえ、Ansibleで変数(トップレベル)の設定​​を解除する方法はありません。

あなたができる唯一のことは、辞書を作成し、この辞書にキーとして変数を格納することです。 「親」辞書をクリアすると、基本的にdictionary.key is defined条件式が機能します。

4
techraf

代わりに、ロールごとに変数を使用する必要があります。

  roles:
    - role: mysql
      version: mysql_version
    - role: rabbitmq
      version: rabbitmq_version

または

  roles:
    - { role: mysql, version: mysql_version }
    - { role: rabbitmq, version: rabbitmq_version }
3
Radu Toader