方括号和单引号内的 Ansible 变量 [' ']
Ansible Variable Within square brackets and single quotes [' ']
大家好,谁能告诉我如何在方括号和单引号内格式化变量。
我正在使用库存组,但希望有一个我可以更改并被引用的变量,即
_devices:
- webservers
并且我希望在以下内容中使用 var _devices
`groups[' ']`
所以我只有一个条目要更改,而不是整个剧本。用[' ']
努力逃离"{{ _devices }}"
即
groups['"{{_ devices }}"']
{% for host in groups['webservers'] %}
{{ hostvars[host][‘ansible_host’] }}
{% endfor %}
您将字符串文字与变量引用混为一谈;任何时候发现自己试图使用嵌套的 jinja2 胡子,这是一个错误
你所说的 []
意味着你期望 devices
实际上是一个组名列表,在这种情况下你会希望 | extract
filter 应用 [groups[g_name] for g_name in devices]
(遗憾的是 jinja2 不理解这样的列表理解)。然后,因为每个 extract
运行 本身就是一个 list[str]
,这意味着输出将是 list[list[str]]
,但您只需要 list[str]
,您将应用|flatten
将它们折叠成一个列表
- debug:
msg: >-
all hosts in devices are: {{ devices | map("extract", groups) | flatten | list }}
vars:
devices:
- webservers
大家好,谁能告诉我如何在方括号和单引号内格式化变量。
我正在使用库存组,但希望有一个我可以更改并被引用的变量,即
_devices:
- webservers
并且我希望在以下内容中使用 var _devices
`groups[' ']`
所以我只有一个条目要更改,而不是整个剧本。用[' ']
努力逃离"{{ _devices }}"
即
groups['"{{_ devices }}"']
{% for host in groups['webservers'] %}
{{ hostvars[host][‘ansible_host’] }}
{% endfor %}
您将字符串文字与变量引用混为一谈;任何时候发现自己试图使用嵌套的 jinja2 胡子,这是一个错误
你所说的 []
意味着你期望 devices
实际上是一个组名列表,在这种情况下你会希望 | extract
filter 应用 [groups[g_name] for g_name in devices]
(遗憾的是 jinja2 不理解这样的列表理解)。然后,因为每个 extract
运行 本身就是一个 list[str]
,这意味着输出将是 list[list[str]]
,但您只需要 list[str]
,您将应用|flatten
将它们折叠成一个列表
- debug:
msg: >-
all hosts in devices are: {{ devices | map("extract", groups) | flatten | list }}
vars:
devices:
- webservers