问题:使用通配符引用剧本中另一个主机的主机(在本例中为私有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 }}"
#"
答案 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'] }}"