我需要类似于(Ansible清单文件)的东西:
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"
然而,ansible不会将'locales'识别为列表。
您可以像这样传递列表或对象:
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'
复杂变量最好在host_vars文件中定义,而不是在inventory文件中定义,因为host_vars文件支持YAML语法。
尝试创建一个host_vars/127.0.0.1
文件,并将以下内容加入其中:
---
timezone: Europe/Amsterdam
locales:
- en_US
- nl_NL
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"]'
#inventory file
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"
#role file
---
- debug: msg="{{ item }}"
with_items: locales.split(',')
带有变量的INI文件如下所示
$ cat ./vars/vars.yml
lvol_names=['2g-1','2g-2','2g-3']
该变量表示列表类型
lvol_names:
- 2g-1
- 2g-2
- 2g-3
- name: play1
hosts: kub2_data_nodes
become: yes
vars:
- lvol_names: "{{ lookup('ini', 'lvol_names type=properties file=./vars/vars.yml') }}"
{"user":["user1","user2"]}
? - JohnnyQ