我有一个哈希,我在Ansible中循环。
site1:
some_config: value1
some_other_config: value2
site2:
some_config: value3
some_other_config: value4
使用哈希,我尝试使用模板创建一些文件,如下所示:
- name: create config files
template: src=templates/site.conf.j2 dest=/etc/nginx/conf.d/site-{{item???}}.conf
with_items:
- "{{site1}}"
- "{{site2}}"
我能够从模板中引用变量item.some_config
和其他变量。但我想使用变量名称命名目标文件。像这样,
site-site1.conf
和site-site2.conf
如何将变量名称称为值?
(简单的解决方法是在每个变量中添加另一个键,其值为site1
和site2
。但这只是多余的)
答案 0 :(得分:1)
您似乎与最后一段走在了正确的轨道上,但我认为您在这里错过了更简单的数据结构。
相反,您的配置可以设置如下:
configuration:
- destination: site1
some_config: value1
some_other_config: value2
- destination: site2
some_config: value3
some_other_config: value4
然后你可以像这样引用它:
- name: create config files
template: src=templates/site.conf.j2 dest=/etc/nginx/conf.d/site-{{item.destination}}.conf
with_items: configuration
现在,当您需要为任务添加更多模板时,您只需要更改configuration
变量块而不是实际任务。如果最终在环境级别(通过组变量等)被覆盖,那么这将变得更加灵活。
答案 1 :(得分:1)
在这种情况下,您可以使用with_dict
代替with_items
稍作修改,这是一个完整的工作示例:
- hosts: all
gather_facts: no
vars:
sites:
site1:
some_config: value1
some_other_config: value2
site2:
some_config: value3
some_other_config: value4
tasks:
- name: create config files
template:
src: site.conf.j2
dest: "/etc/nginx/conf.d/site-{{ item.key }}.conf"
with_dict: "{{ sites }}"
在模板中,您可以像这样引用值:
{{ item.value.some_config }}
{{ item.value.some_other_config }}
希望这会对你有所帮助