调用第二个剧本时如何将 Ansible 剧本切换到另一个主机
How to switch Ansible playbook to another host when calling second playbook
我有两个 playbook - 我的第一个 playbook 在 ESXi 服务器列表上迭代获取所有 VM 的列表,然后将该列表传递给第二个 playbook,它应该在 VM 的 IP 上迭代。相反,它仍在尝试在最后一个 ESXi 服务器上执行。我必须将主机切换到我当前传递给第二个剧本的那个 VM IP。不知道如何切换...有人吗?
第一个剧本:
- name: get VM list from ESXi
hosts: all
tasks:
- name: get facts
vmware_vm_facts:
hostname: "{{ inventory_hostname }}"
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
delegate_to: localhost
register: esx_facts
- name: Debugging data
debug:
msg: "IP of {{ item.key }} is {{ item.value.ip_address }} and is {{ item.value.power_state }}"
with_dict: "{{ esx_facts.virtual_machines }}"
- name: Passing data to include file
include: includeFile.yml ip_address="{{ item.value.ip_address }}"
with_dict: "{{ esx_facts.virtual_machines }}"
我的第二本剧本:
- name: <<Check the IP received
debug:
msg: "Received IP: {{ ip_address }}"
- name: <<Get custom facts
vmware_vm_facts:
hostname: "{{ ip_address }}"
username: root
password: passw
validate_certs: False
delegate_to: localhost
register: custom_facts
我确实收到了正确的 VM ip_address,但 vmware_vm_facts 仍在尝试 运行 在 ESXi 服务器上代替...
如果您无力为 VM 设置动态清单,您的剧本应该有两个剧本:一个用于收集 VM 的 IP,另一个用于该 VM 上的任务,如下所示(伪代码):
---
- hosts: hypervisors
gather_facts: no
connection: local
tasks:
- vmware_vm_facts:
... params_here ...
register: vmfacts
- add_host:
name: "{{ item.key }}"
ansible_host: "{{ item.value.ip_address }}"
group: myvms
with_dict: "{{ vmfacts.virtual_machines }}"
- hosts: myvms
tasks:
- apt:
name: "*"
state: latest
在第一个游戏中,我们从每个管理程序收集事实并填充 myvms
组内存清单。在第二场比赛中,我们 运行 apt
为 myvms
组中的每个主机模块。
我有两个 playbook - 我的第一个 playbook 在 ESXi 服务器列表上迭代获取所有 VM 的列表,然后将该列表传递给第二个 playbook,它应该在 VM 的 IP 上迭代。相反,它仍在尝试在最后一个 ESXi 服务器上执行。我必须将主机切换到我当前传递给第二个剧本的那个 VM IP。不知道如何切换...有人吗?
第一个剧本:
- name: get VM list from ESXi
hosts: all
tasks:
- name: get facts
vmware_vm_facts:
hostname: "{{ inventory_hostname }}"
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
delegate_to: localhost
register: esx_facts
- name: Debugging data
debug:
msg: "IP of {{ item.key }} is {{ item.value.ip_address }} and is {{ item.value.power_state }}"
with_dict: "{{ esx_facts.virtual_machines }}"
- name: Passing data to include file
include: includeFile.yml ip_address="{{ item.value.ip_address }}"
with_dict: "{{ esx_facts.virtual_machines }}"
我的第二本剧本:
- name: <<Check the IP received
debug:
msg: "Received IP: {{ ip_address }}"
- name: <<Get custom facts
vmware_vm_facts:
hostname: "{{ ip_address }}"
username: root
password: passw
validate_certs: False
delegate_to: localhost
register: custom_facts
我确实收到了正确的 VM ip_address,但 vmware_vm_facts 仍在尝试 运行 在 ESXi 服务器上代替...
如果您无力为 VM 设置动态清单,您的剧本应该有两个剧本:一个用于收集 VM 的 IP,另一个用于该 VM 上的任务,如下所示(伪代码):
---
- hosts: hypervisors
gather_facts: no
connection: local
tasks:
- vmware_vm_facts:
... params_here ...
register: vmfacts
- add_host:
name: "{{ item.key }}"
ansible_host: "{{ item.value.ip_address }}"
group: myvms
with_dict: "{{ vmfacts.virtual_machines }}"
- hosts: myvms
tasks:
- apt:
name: "*"
state: latest
在第一个游戏中,我们从每个管理程序收集事实并填充 myvms
组内存清单。在第二场比赛中,我们 运行 apt
为 myvms
组中的每个主机模块。