Ansible Playbook 从 VMWare 获取事实

Ansible Playbook to get facts from VMWare

我正在尝试使用 ansible 从 vcenter 获取集群名称、数据存储集群、端口组和其他一些信息。我已经阅读了文档 here,但是我在 return 中获取的数据几乎太多了,需要进行过滤。这是 clustername 剧本的示例。它有效,但我只想获取集群的名称。我将其输出到 yaml 文件,以便稍后将其导入管道。这是代码。

- hosts: localhost
  gather_facts: no
  vars_files:
    - vars.yml

  tasks:
    - name: Gather vmware host facts from vCenter
      community.vmware.vmware_cluster_info:
        hostname: '{{ vcenter_hostname }}'
        username: '{{ vcenter_username }}'
        password: '{{ vcenter_password }}'
        datacenter: DC1
        schema: vsphere
        properties:
          - name
      register: clusternames

    - name: Write results to a local file
      copy:
        content: "{{ clusternames.clusters | to_yaml }}"
        dest: "clusternames.yml"

结果如下:

DC1-QA-DMZ: {name: DC1-QA-DMZ}
DC1-QA-GEN: {name: DC1-QA-GEN}
DC1-QA-SQL: {name: DC1-QA-SQL}

有没有办法只return这个?

name: DC1-QA-DMZ
name: DC1-QA-GEN
name: DC1-QA-SQL

or

DC1-QA-DMZ
DC1-QA-GEN
DC1-QA-SQL

我玩过 set_fact,但我似乎无法理解我所缺少的东西。我需要做某种过滤器,但我不熟悉 what/how。

您可以使用 keys 方法从 dictionary class 到 return 具有集群的字典视图对象,然后您可以将其转换为列表list 过滤函数:

content: "{{ clusternames.clusters.keys() | list | to_yaml }}"

此 YAML 呈现为:

- DC1-QA-DMZ
- DC1-QA-GEN
- DC1-QA-SQL

如问题所愿。