首页 > 解决方案 > VMware 来宾可以使用 ansible 来确定它自己的名称和/或 uuid 吗?

问题描述

我正在构建一个旨在在 vCenter VM 上运行的 ansible 剧本。它由 ansible-pull 在启动时运行。我的目标是使用 ansible 读取 vm 上的标签,然后根据这些标签对来宾系统进行一些配置更改。

困难在于我需要从客人内部读取客人身上的标签。vmware_guest_facts 模块可以让我这样做,但它需要来宾的名称或 uuid。

目前我能看到的唯一方法是使用 vmware_vm_facts 获取所有虚拟机的事实,然后找到 ansible_default_ipv4.address 与 IP 地址匹配的虚拟机,将其设置为事实,然后使用 vmware_guest_facts 从中读取标签该虚拟机的 UUID。这似乎是矫枉过正。

虚拟机是否有一种简单的方法可以读取我忽略的自己的标签?

这是我现在必须做的:

- hosts: localhost
  connection: local

  vars_files:
    - vars.yaml

  pre_tasks:
    - name:  Read VMware vm facts
      vmware_vm_facts:
        hostname: "{{vc_host}}"
        password: "{{vc_pass}}"
        username: "{{vc_user}}"
        validate_certs: no
        vm_type: vm
      delegate_to: localhost
      register: vmfacts

    - name: scan for ip
      set_fact:
        vm_uuid: "{{ item.uuid }}"
        vm_name: "{{ item.guest_name }}"
      with_items: "{{ vmfacts.virtual_machines }}"
      when:
        - item.ip_address is defined
        - ansible_default_ipv4.address == item.ip_address


    - name:  Read VMware guest facts
      vmware_guest_facts:
        datacenter: ASDC
        hostname: "{{vc_host}}"
        uuid: "{{vm_uuid}}"
        password: "{{vc_pass}}"
        username: "{{vc_user}}"
        tags: yes
        validate_certs: no
      register: vmguestfacts


    - name:  set up tags var
      set_fact:
        vm_tags: "{{ vmguestfacts.instance.tags }}"

    - debug:
        msg: "{{ vm_tags }}"

标签: ansiblevmwareansible-factsvcenter

解决方案


我维护vmware_vm_facts并提出了一个 PR https://github.com/ansible/ansible/pull/60220来获取所有使用vmware_vm_facts. 使用此功能,您将能够收集 VM 标签。

合并 PR 后,任务将如下所示 -

- name: Get Tags from given VM Name
  block:
    - name: Get virtual machine facts
      vmware_vm_facts:
        hostname: '{{ vcenter_hostname }}'
        username: '{{ vcenter_username }}'
        password: '{{ vcenter_password }}'
        folder: "/datacenter/vm/folder"
        show_tag: True
      delegate_to: localhost
      register: vm_facts

    - debug:
        msg: "{{ item.tags }}"
      with_items:
        - "{{ vm_facts.virtual_machines | json_query(query) }}"
      vars:
        query: "[?guest_name=='DC0_H0_VM0']"

推荐阅读