54

(ansibleインベントリファイル)のようなものが必要です:

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"

ただし、ansible は「ロケール」をリストとして認識しません。

4

7 に答える 7

100

次のようにリストまたはオブジェクトを渡すことができます。

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'
于 2015-03-20T20:03:56.303 に答える
30

複雑な変数の場合、host_vars ファイルは YAML 構文をサポートしているため、インベントリ ファイルではなく、host_vars ファイルで変数を定義することをお勧めします。

host_vars/127.0.0.1次の内容のファイルを作成してみてください。

timezone: Europe/Amsterdam
locales:
    - en_US
    - nl_NL
于 2013-09-02T21:34:30.690 に答える
17

この特定のケースではRylerの答えは良いですが、テンプレートモジュールで他のバリエーションを使用すると問題が発生しました。

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'

彼の元の例であり、正常に動作します。

次のバリエーションは、テンプレートで機能します。基本的に、文字列の場合は、内部二重引用符を使用することを覚えておく必要があります。そうしないと、構造全体が単一の文字列として解析されます。数字のみ、または「True」または「False」(「yes」ではない) であれば問題ありません。このバリエーションでは、外部引用符がある場合、テンプレートで機能させることができませんでした。

テンプレートモジュール以外で、どの内部ユースケースが機能し、機能しないかを徹底的にチェックしていません。

Ansible 2.2.1 を使用しています。

[example:vars]
# these work
myvar1=["foo", "bar"]
myvar2=[1,2]
myvar3=[True,False]

# These fail, they get interpreted as a single string.
myvar4=[yes, no]
myvar5=[foo,bar]
myvar6='["foo", "bar"]'
于 2017-01-26T14:18:01.097 に答える
6

あなたは分割を試すことができます

#inventory file
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"

#role file
---
- debug: msg="{{ item }}"
  with_items: locales.split(',')
于 2015-05-06T09:52:13.427 に答える
-2

フィルターをカスタマイズして、文字列をリストに分割できます

Github ansible exampleは、カスタム フィルターの作成方法を示しています。

于 2014-04-04T12:01:09.657 に答える