Ansible - vmware:如何在多主机 vcenter 上查找来宾?

问题描述 投票:0回答:2

Ansible Community.VMWare 模块的众多参数之一是“主机名”,它是 ESXi 服务器的名称。

就我而言,来宾可以位于多个 ESXi 服务器之一(目前为 8 台),支持团队也可以随时添加新服务器。

有没有办法找到来宾所在的 ESXi 服务器?或者我必须一开始就知道这一点?

我可以有一个 ESXi 服务器列表,根据需要不断更新它,并使用模块“community.vmware.vmware_guest_find”和“with_items”循环访问该列表,但实际上,我不知道如何执行此操作(迭代服务器,更改“主机名”,并在我最终找到来宾时停止)。

有什么帮助吗?

ansible vmware
2个回答
1
投票

我想出了下面这个解决方案。之前需要有 ESXi 主机列表。

[...]
vars:
  vcenters_hostname:
    - vcenter01
    - vcenter02
    - ...
[...]
- block:
    - name: Navigate throughout all vcenters looking for the guest
      community.vmware.vmware_guest_find:
        hostname: "{{ item }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        name: "{{ guest_name }}"
        validate_certs: no
      delegate_to: localhost
      register: guest_find_result
      with_items: "{{ vcenter_hostnames }}"
  rescue:
    - name: Doing nothing only to don't raise a fail message
      meta: noop
  always:
    - name: Record which vcenter and folder is the guest
      ansible.builtin.set_fact:
        guest_folder: "{{ item['folders'][0] }}"
        vcenter_hostname: "{{ item['item'] }}"
      with_items: "{{ guest_find_result['results'] }}"
      when: item['failed'] == false

0
投票

谢谢你。

我发现 João Olavo Vasconcelos 的上述示例非常有用,并对其进行了投票。

我想分享一下我如何扩展它以使用 vCenter 主机的库存组,以及如何更好地处理失败的查找以满足我的需求。还修复了名为 guest_find_result's' 的注册字典中的拼写错误

 vars:
    vcenters_hostnames_list: "{{ groups['vmware_vcenter_prod'] }}" # gets list of vcenter servers from inventory group
    # vcenters_hostnames_list: # hard defined list of vcenter servers
    # - "vcenterxxx.domain.tld"
    # - "vcenteryyy.domain.tld"
  
  ## Promt for credential Varaibles
  vars_prompt:
    - name: vcenter_username
      prompt: "What is your vcenter_username?"
      private: false

    - name: vcenter_password
      prompt: "What is your vcenter_password?"
      private: true
      

  tasks:

  - block:
    - name: Navigate throughout all vcenters looking for the guest
      delegate_to: localhost
      community.vmware.vmware_guest_find:
        validate_certs: false
        hostname: "{{ item }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        name: "{{ vcenter_vm_name }}"
      register: guest_find_results
      with_items: "{{ vcenters_hostnames_list }}"
      failed_when: 
        - guest_find_results.msg is defined
        - ("Unable to log on" in guest_find_results.msg)

    rescue:
      - name: Supress failed lookup messages
        meta: noop
     
    always: 
      - name: Record vcenter host and folder of guest
        ansible.builtin.set_fact:
          vm_guest_folder: "{{ item['folders'][0] }}"
          vcenter_hostname: "{{ item['item'] }}"
        with_items: "{{ guest_find_results['results'] }}"
        when: item['folders'] is defined
© www.soinside.com 2019 - 2024. All rights reserved.