我正在尝试创建和使用一个剧本,它将重置一台、两台或所有虚拟机的电源,类似于我用来获取一台、两台或所有虚拟机的电源状态的剧本。
这是我当前的设置和一些基本背景,它可以在收集给定组及其变量的 VM 信息方面非常灵活。
VMWARE 动态清单文件 = /home/me/ansible/hosts/vcenter_inventory_vmware.yml
plugin: vmware_vm_inventory
strict: False
hostname: vcenter.mydomain.com
username: [email protected]
password: **************
validate_certs: False
with_tags: False
groups:
VMs: True
windows: "'win' in config.guestId"
filters:
- summary.runtime.powerState == "poweredOn"
hostnames:
- config.name
PLAYBOOK 仅列出在 Windows 上运行的虚拟机 = /home/me/ansible/vmware_list_all_powered-on_windows_vms.yml
- hosts: windows
gather_facts: false
tasks:
- name: Gather a list of all powered on VMs
ansible.builtin.set_fact:
on_vm: "{{ all_vm_info.virtual_machines | json_query(query) }}"
vars:
query: "[?power_state=='poweredOn']"
register: jsoncontent
我可以使用的 ANSIBLE 命令
ansible-playbook vmware_list_all_powered-on_windows_vms.yml = (This will display a list on all powered on windows VMs)
ansible-playbook vmware_list_all_powered-on_windows_vms.yml -l MYVMNAME = (This will display a powerstate of OK for MYVMNAME)
现在让我们看看我的 VM 电源重置剧本以及我当前需要如何获取变量。
变量文件 = /home/me/ansible/hosts/group_vars/vmware.yml
vcenter_hostname: vcenter.mydomain.com
vcenter_username: "[email protected]"
vcenter_password: **************
vcenter_validate_certs: false
vm_name: MYVMNAME
剧本用于重置位于特定 VCENTER 上的特定 VM 的电源 = /home/me/ansible/vm_reset.yml
- name: Power Cycle VM
hosts: localhost
become: false
gather_facts: false
pre_tasks:
- include_vars: /home/me/ansible/hosts/group_vars/vmware.yml
tasks:
- name: VM Power Cycle
community.vmware.vmware_guest_powerstate:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: "{{ vcenter_validate_certs }}"
name: "{{ vm_name }}"
state: restarted
state_change_timeout: 120
register: deploy
ignore_errors: true
我可以使用的 ANSIBLE 命令
ansible-playbook vm_reset.yml = (This will reset the power of a single VM named MYVMNAME on a specific vcenter named vcenter.mydomain.com)
现在,这就是我想要实现的目标。我想对 VMWARE DYNAMIC INVENTORY 中定义的组内的一个、两个或所有 VM 执行电源重置,而不必使用包含冗余信息的单独变量文件。正如您所注意到的,VMWARE DYNAMIC INVENTORY 为我提供了我需要的一切(vcenter 主机名、vcenter 凭据、VM 主机组以及提取和使用所有或有限 VM 的各种 VM 变量的能力。我不需要有一个名为“/home/me/ansible/hosts/group_vars/vmware.yml”的静态变量文件,其中包含可以从 VMWARE DYNAMIC INVENTORY“/home/me/ansible/hosts/vcenter_inventory_vmware.yml”中获得的信息
我希望可以使用的 ANSIBLE 命令
ansible-playbook vm_reset.yml = (This should reset the power of all on all windows VMs)
ansible-playbook vm_reset.yml -l MYVMNAME = (This should reset the power of the MYVMNAME)
ansible-playbook vm_reset.yml -l MYVMNAME:ANOTHERVMNAME = (This should reset the power of the MYVMNAME AND ANOTHERVMNAME)