重置/关闭 VMware VM 所需的 Ansible/YML 代码

重置/关闭 VMware VM 所需的 Ansible/YML 代码

我的 hosts 文件夹中有一个名为“vcenter.yml”的文件,用于向 vcenter 进行身份验证并执行此 vcenter 的动态清点。我使用此文件收集虚拟机信息,并选择要执行 WINRM 命令的 Windows 虚拟机。此外,我还有一个名为“vmware_list_all_powered-on_windows_vms.yml”的示例剧本,其中列出了该 vcenter 内所有已启动的虚拟机。因此,基本上,我可以输入命令“ansible-playbook vmware_list_all_powered-on_windows_vms.yml”,结果将是所有已启动的 Windows 虚拟机的列表。更妙的是,我还可以使用 -l“特定虚拟机名称”执行相同的 ansible 命令,结果将是该特定虚拟机的电源状态。现在我的问题是,每次我在谷歌上搜索“如何使用 ansible 对虚拟机进行电源循环”时,似乎 vcenter 名称、vcenter 凭据和特定的虚拟机名称都需要在脚本“vm_reset.yml”中显示的剧本中

什么是正确的 YML 代码,可以让我执行命令“ansible-playbook vm_reset.yml -l“A SPECIFIC VM NAME”?我希望能够将现有的“vcenter.yml”文件用于此目的。

VCENTER.YML

plugin: vmware_vm_inventory
strict: False
hostname: vcenter.foobar.com
username: [email protected]
validate_certs: False
with_tags: False
groups:
  VMs: True
  windowstest: "'win' in config.guestId"
  windows: "'win' in config.guestId"
filters:
- summary.runtime.powerState == "poweredOn"
hostnames:
- config.name
password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
062353461393737393664396333653965383432363934316335306336326539393636653465616638386534303631633165636437326530303664306537300a646162303932326566373837643164643863373134333738326666376134333432633762653161333230643131363931613034343966373432396566393634660a6533623764653031386266353238383264336535626430626439656230386463

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

  - name: Gather a list of all powered on VM names
    debug: msg="{{ on_vm | json_query(jmesquery) }}"
    vars:
      jmesquery: "[*].{guest_name: guest_name, ip_address: ip_address}"

虚拟机重置

---
- name: stop vm demo
  hosts: localhost
  become: false
  gather_facts: false
  collections:
    - community.vmware
  pre_tasks:
    - include_vars: vars.yml
  tasks:
    - name: guest shutdown
      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

答案1

vm_name 是否来自 vars.yml ?

如果没有,您可以使用 key=value 格式传递它,例如

ansible-playbook vm_reset.yml --extra-vars "vm_name=example"

https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#defining-variables-at-runtime

您根本不需要 vcenter.yml 来传递虚拟机的名称。如果您的目标是针对已启动的目标列表动态执行它,我建议分配主机变量或定义一组已启动的虚拟机(可能不是推荐的方法,但它可能比更新清单文件中的行更容易),例如 power_state=='poweredOn',然后将其用作剧本的目标。

相关内容