Ansible docker_container与可变密钥etc_hosts

问题描述 投票:2回答:2

我已经通过我产生一个码头工人的容器,并添加少量主机条目给它的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 ansible ansible-playbook ansible-2.x
2个回答
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的templator将评估到字典。 注意,每一个项目应该被引用和对用逗号分隔。


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 /使用相同的IP,这是不主机根据手册页纠正。)

© www.soinside.com 2019 - 2024. All rights reserved.