需要有关如何重置多个虚拟机的电源状态的帮助,类似于使用 VMware 动态清单文件获取多个虚拟机的电源状态

需要有关如何重置多个虚拟机的电源状态的帮助,类似于使用 VMware 动态清单文件获取多个虚拟机的电源状态

我正在尝试创建和使用一个剧本,它将重置一台、两台或所有虚拟机的电源,类似于我用来获取一台、两台或所有虚拟机的电源状态的剧本。

这是我当前的设置和一些基本背景,它可以在收集给定组及其变量的 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)

相关内容