我正在尝试使用Ansible在服务器主机文件中添加条目。 我有一组服务器,需要通过专用局域网互相通信。
我的库存文件:
[server_list] server1 server2
我正在努力工作的任务:
- lineinfile: dest=/etc/hosts line="{{ hostvars[" {{ item }} "]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[" {{ item }} "]['ansible_hostname'] }}" with_items: groups['server_list']
这不是伎俩,我得到这个:
fatal: [server1] => host not found: {{item}} fatal: [server2] => host not found: {{item}}
这与此基本相同,但采用了新的Ansiblevariables访问格式{{ }}
。
任何想法如何做到这一点?
好。 我曾经尝试过这个,并没有真正的工作。 所以我一定是在那里做错了事。
这工作:
- lineinfile: dest=/etc/hosts line="{{ hostvars[item]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[item]['ansible_hostname'] }}" with_items: groups['server_list']
或1.9或更高版本:
- lineinfile: dest=/etc/hosts line="{{ hostvars[item]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[item]['ansible_hostname'] }}" with_items: "{{ groups['server_list'] }}"
有同样的问题,我想要在一个组中的主机列表,然后添加防火墙规则与ips。 看了一下hostvars [item]的结构,并用不同的名字来访问这个值。 这对我工作:
- name: Setting up firewall so web_servers can access MySQL on port {{ mysql_port }} ufw: rule=allow proto=tcp to_port={{ mysql_port }} src="{{ hostvars[item]['ansible_default_ipv4']['address'] }}" with_items: groups.web_servers
你的语法只是稍微偏离。 尝试使用groups.server_list
作为您的with_items list
。
我不像你那样使用host_vars,所以让我知道如果你的手册的部分工作分析错误。
但是下面的代码应该用主机名代替{{item}}。
- lineinfile: dest=/etc/hosts line="{{ hostvars[" {{ item }} "]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[" {{ item }} "]['ansible_hostname'] }}" with_items: groups.server_list