单个剧本中主机之间的Ansible Azure动态清单和共享变量

时间:2020-02-06 08:14:17

标签: azure dynamic ansible

问题:使用通配符引用剧本中另一个主机的主机(在本例中为私有ip)的事实似乎只在剧本的“主机”部分起作用,而不在任务内部起作用。 vm_ubuntu *不能在任务中使用。

在一个剧本中,我有几个主机,并且由于清单是动态的,因此我没有主机名,因为Azure在创建标识符后会附加一个标识符。 我正在使用TF创建。 并使用Azure动态清单方法。 我正在这样称呼我的剧本,在撰写本文时,myazure_rm.yml是沼泽标准的天蓝色动态库存方法。

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 }}"
#"

1 个答案:

答案 0 :(得分:0)

我正在回答自己的问题以获得代表,当然也可以帮助其他人。 我还要感谢首先提出此建议的人(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'] }}"