【发布时间】:2017-01-08 12:03:45
【问题描述】:
库存文件
[dev:vars]
dev6
dev7
[dev6]
targethost1.xyz.com
[dev7]
targethost1.xyz.com
host_variables.yml
dev6:
deploy_domain: "Dev6Domain"
WL_Admin: "DEV6WLAdmin"
WL_Managed: "DEV6Managed"
dev7:
deploy_domain: "Dev7Domain"
WL_Admin: "Dev7WLAdmin"
WL_Managed: "Dev7Managed"
我试图通过使用从剧本中提取 myenv.deploy_domain 的命令
tasks:
- include_vars: host_variables.yml
- set_fact:
my_env: "{{ hostvars[inventory_hostname][group_names[1]] }}"
dev6 和 dev7 共享同一个主机,但具有不同的域和不同的其他变量,如 host_variables.yml 中定义的那样。因此,当我为 dev7 运行剧本时,my_env.deploy_domain 向我显示了 dev6 的值。我如何告诉这段代码只使用当前环境的变量并匹配其在清单中的特定主机名?
【问题讨论】:
-
targethost1.xyz.com 不是域,它是一个完整的主机名。 deploy_domain 是用于部署到每台机器的变量(参数)。
-
Ansible 不会对同一个主机运行同一个 playbook 两次,无论它属于多少个库存组。您必须使用不同的主机名并将其指向
/etc/hosts或 DNS 中的相同 IP 地址。 -
否则你应该重写你的剧本以使用列表而不是名称冲突的变量。
标签: python yaml ansible ansible-playbook ansible-2.x