ansible - 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 }}"
解决方案
我维护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']"
推荐阅读
- python - python - 在Windows上引用网络中的路径时删除了反斜杠
- c++11 - 延迟确认 GCloud Pub/Sub 消息
- vuejs2 - 为什么数据:Variable 对 Vue 中的 computed: property 中的 Variable 是反应性的
- wpf - 如何以数据网格的样式添加单元格样式?
- tensorflow - 如何在基本(根)环境中安装 TensorFlow
- html - tr的td重复表内
- api - Apache Ranger Api 不返回数据
- excel-formula - 在 Excel 中使用 y,m,d 从年龄计算出生日期
- javascript - 向 html 添加选项
- jenkins - Jenkins“Pipeline Stage View”插件不屏蔽密码