我一直坚持使用 Ansible 剧本中角色中的任务变量。我的剧本如下:
- hosts: server.com
gather_facts: yes
tasks:
- set_fact:
private_ip: "{{ item }}"
with_items: "{{ ansible_all_ipv4_addresses }}"
when: "item.startswith('10.')"
- debug: var=private_ip
roles:
- role: check-server
server_ip: 10.10.0.1
client_ip: "{{ private_ip }}
当 pleybook 运行时 -debug 在变量 private_ip 中显示正确的 IP,但我无法使 client_ip (来自角色 block )来获取 private_ip 内容。 client_ip 始终未定义。
我可以在这里应用什么魔法来拥有 client_ip=$private_ip 吗?
最佳答案
任务
在应用角色
后执行。
将tasks
更改为pre_tasks
。
此外,在循环中使用 set_fact
并不是最佳实践。如果你得到了你想要的值,那没关系,我相信你已经验证过了。但您应该使用 (ansible_all_ipv4_addresses | select("match", "10\..*") | list)[0]
。
关于variables - 在同一剧本中的角色中使用 set_fact 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47138880/