我有一个ansible脚本,我通过它生成一个docker容器并向其添加几个主机条目,因为etc_hosts将key作为主机名和相应的IP地址。在我的情况下,我需要让主机名和IP地址由某个变量驱动,例如
docker_container:
name: image-name
image: image-to-be-pulled
state: started
restart_policy: always
etc_hosts:
"{{ domain_1 }}": "{{ domain_1_ip }}"
domain_2 : "{{ domain_2_ip }}"
domain_3 : "{{ domain_3_ip }}"
当我进行上述配置时,它会以
的形式输入主机文件xx.xx.xx.xxx {{ domain_1 }}
理想情况下,主机文件应该包含针对IP的主机名,有人可以建议我如何实现这一点。提前致谢
答案 0 :(得分:5)
试试这个语法:
docker_container:
name: image-name
image: image-to-be-pulled
state: started
restart_policy: always
etc_hosts: >
{
"{{ domain_1 }}": "{{ domain_1_ip }}",
"domain_2" : "{{ domain_2_ip }}",
"domain_3" : "{{ domain_3_ip }}"
}
这将形成类似字母的字符串,ansible的临时工将评估为dict 请注意,每个项目都应引用,并且用逗号分隔对。
答案 1 :(得分:0)
我在...上取得了成功
在我的剧本(书)中:
- vars:
my_etc_hosts:
{
"host1.example.com host1": 10.3.1.5,
"host2.example.com host2": 10.3.1.3
}
(与接受的答案相比,没有“>”字符)
与剧本分开的角色是...
在任务中:
- name: have the container created
docker_container:
etc_hosts: "{{ my_etc_hosts | default({}) }}"
默认值/main.yml:
my_etc_hosts: {}
另外(上述任务不需要,但是另一个模板任务的一部分):
在带有jinja2的模板中:
{% for host in my_etc_hosts | default([]) %}
--add-host "{{ host }}":{{ my_etc_hosts[host] }} \
{% endfor %}
(作为一个加号,您将看到如何处理一个IP地址的两个主机名:“ fqdn alias1”。如果您将它们拆分成两个值,它们将在/ etc / hosts中以相同IP形成两行,根据手册页是不正确的。)