rmu*_*ler 42 variables list inventory ansible
我需要像(安全库存文件)这样的东西:
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"
Run Code Online (Sandbox Code Playgroud)
但是,ansible不会将"locales"识别为列表.
Ryl*_*ury 85
您可以传递这样的列表或对象:
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'
Run Code Online (Sandbox Code Playgroud)
Lor*_*ein 24
对于复杂变量,最好在host_vars文件而不是清单文件中定义它们,因为host_vars文件支持YAML语法.
尝试host_vars/127.0.0.1使用以下内容创建文件:
timezone: Europe/Amsterdam
locales:
- en_US
- nl_NL
Run Code Online (Sandbox Code Playgroud)
Spa*_*rky 11
Ryler在这个具体案例中的答案很好,但我在使用模板模块的其他变体时遇到了问题.
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'
Run Code Online (Sandbox Code Playgroud)
是他原来的例子并且工作正常.
以下变体适用于模板.基本上如果它是一个字符串,你必须记住使用内部双引号或整个结构被解析为一个字符串.如果它只是数字或"真"或"假"(不是"是")那么你就没事了.在此变体中,如果它具有外部引号,则无法使其与模板一起使用.
我没有详细检查他们做了哪些内部用例,除了模板模块之外没有破坏.
我正在使用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"]'
Run Code Online (Sandbox Code Playgroud)
小智 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(',')
Run Code Online (Sandbox Code Playgroud)