【问题标题】:How can I overcome the set_fact variable for one host in multiple groups如何克服多组中一台主机的 set_fact 变量
【发布时间】: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


【解决方案1】:
[dev:vars]
dev6
dev7

[dev6]
dev6host ansible_ssh_host=targethost1.xyz.com
[dev7]
dev7host ansible_ssh-host=targethost1.xyz.com

现在,同一个主机被不同的环境共享,ansible 将它们全部视为单独​​的机器

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 2018-10-10
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多