我已经通过我产生一个码头工人的容器,并添加少量主机条目给它的ansible脚本,因为etc_hosts需要密钥的主机名和对应的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,可以有人建议我如何才能做到这一点。提前致谢
试试这个语法:
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的templator将评估到字典。 注意,每一个项目应该被引用和对用逗号分隔。
我有成功与...
在我玩(书):
- 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 /使用相同的IP,这是不主机根据手册页纠正。)