我正在尝试使用 Ansible 在服务器主机文件中添加条目。我有一组服务器,我需要通过专用 LAN 相互通信。
我的库存文件:
[server_list]
server1
server2
Run Code Online (Sandbox Code Playgroud)
我试图开始工作的任务:
- lineinfile: dest=/etc/hosts line="{{ hostvars[" {{ item }} "]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[" {{ item }} "]['ansible_hostname'] }}"
with_items: groups['server_list']
Run Code Online (Sandbox Code Playgroud)
它没有做到这一点,我明白了:
fatal: [server1] => host not found: {{item}}
fatal: [server2] => host not found: {{item}}
Run Code Online (Sandbox Code Playgroud)
这是基本相同,这样,但在新的Ansible变量访问格式{{ }}
。
任何想法如何完成这项工作?
mel*_*yed 10
好的。我以前试过这个,但它并没有真正奏效。所以我一定是在那里做错了什么。
这有效:
- lineinfile: dest=/etc/hosts line="{{ hostvars[item]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[item]['ansible_hostname'] }}"
with_items: groups['server_list']
Run Code Online (Sandbox Code Playgroud)
或 1.9 或更高版本:
- lineinfile: dest=/etc/hosts line="{{ hostvars[item]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[item]['ansible_hostname'] }}"
with_items: "{{ groups['server_list'] }}"
Run Code Online (Sandbox Code Playgroud)
小智 5
有同样的问题,我想查看一组中的主机列表,然后使用它们的 ip 添加防火墙规则。稍微了解一下 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 }}"
Run Code Online (Sandbox Code Playgroud)
你的语法只是稍微有点偏差。尝试使用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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66285 次 |
最近记录: |