【问题标题】:Ansible Azure Dynamic Inventory and Sharing variables between hosts in a single playbookAnsible Azure 动态清单和在单个 playbook 中的主机之间共享变量
【发布时间】:2020-05-22 05:27:29
【问题描述】:

问题:使用通配符从剧本中的另一台主机引用有关主机(在本例中为私有 ip)的事实似乎仅适用于剧本的“主机”部分,而不是在任务中。 vm_ubuntu* 不能用于任务。

在单个 playbook 中,我有几个主机,并且由于清单是动态的,我没有提前知道主机名,因为 Azure 在创建后附加了一个标识符。 我正在使用 TF 来创建。 并使用 Azure 动态清单方法。 我这样称呼我的剧本,截至撰写本文时,myazure_rm.yml 是一个沼泽标准 azure 动态库存方法。

ansible-playbook -i ./myazure_rm.yml ./bwaf-playbook.yaml --key-file ~/.ssh/id_rsa --u azureuser

我的剧本看起来像这样(缩写)。

- hosts: vm_ubuntu*

  tasks:
    - name: housekeeping
      set_fact:
        vm_ubuntu_private_ip="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
#"
    - debug: var=vm_ubuntu_private_ip

- hosts: vm_bwaf*
  connection: local

  vars:
    vm_bwaf_private_ip: "{{private_ipv4_addresses | join }}"
    vm_bwaf_public_ip: "{{ public_ipv4_addresses | join }}"
    vm_ubuntu_private_ip: "{{ hostvars['vm_ubuntu*']['ip'] }}"
    api_url: "http://{{ vm_bwaf_public_ip }}:8000/restapi/{{ api_version }}"
#"

【问题讨论】:

    标签: azure dynamic ansible


    【解决方案1】:

    我回答自己的问题是为了获得代表,当然也是为了帮助他人。 我还要感谢首先提出这个问题的人 (https://stackoverflow.com/users/4281353/mon),它出现在此处:How do I set register a variable to persist between plays in ansible?

    - name: "Save private ip to dummy host" 
      add_host: 
         name:   "dummy_host" 
         ip:     "{{ vm_ubuntu_private_ip }}"
    

    然后可以像这样在剧本中的其他主机中引用它:

    - hosts: vm_bwaf*
      connection: local
    
      vars:
        vm_bwaf_private_ip: "{{private_ipv4_addresses | join }}"
        vm_bwaf_public_ip: "{{ public_ipv4_addresses | join }}"
        vm_ubuntu_private_ip: "{{ hostvars['dummy_host']['ip'] }}"
    

    【讨论】:

    • 我很高兴你问了(即使你错了/被误导了,你可以自己去检查一下,也许在发布我的问题之前先阅读你所指的另一个问题) 这是因为现有的答案与许多事情一样是针对不同的问题的。您有什么想为社区做出贡献的吗,或者您打算在这里做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2023-03-04
    • 2016-06-24
    相关资源
    最近更新 更多