首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ansible从vcenter获取vlan id

如何使用ansible从vcenter获取vlan id
EN

Stack Overflow用户
提问于 2020-09-10 14:47:45
回答 2查看 402关注 0票数 1

我正在尝试使用下面的ansible模块获取vlan_id信息。

代码语言:javascript
复制
- name: Get all portgroups in dvswitch vDS
  vmware_dvs_portgroup_find:
    hostname: "{{ vsphere_host }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_password }}"
    dvswitch: 'test-123' --- dvswitch
    validate_certs: no
  with_items: "{{ dvswitch_list }}"
  register: test

- debug: msg="{{ test }}"

我正在以下面的格式出来。

代码语言:javascript
复制
        "results": [
            {
                "ansible_loop_var": "item",
                "changed": false,
                "dvs_portgroups": [
                    {
                        "dvswitch": "test-123",
                        "name": "DPortGroup2",
                        "pvlan": false,
                        "trunk": false,
                        "vlan_id": "220"
                    },
                    {
                        "dvswitch": "test-123",
                        "name": "PP1",
                        "pvlan": false,
                        "trunk": false,
                        "vlan_id": "465"
                    },
                    {
                        "dvswitch": "test-123",
                        "name": "PP2",
                        "pvlan": false,
                        "trunk": false,
                        "vlan_id": "685"
                    },

我正在使用下面的调试msg来获取vlan_id,但有些方法是不工作的。

代码语言:javascript
复制
- debug: msg="{{ item.vlan_id }}"
  with_items: "{{ test.results.dvs_portgroups }}"

ASK [role_vmware_datastore_size : debug] ********************************************************************************
fatal: [192.168.90.00]: FAILED! => {"msg": "'list object' has no attribute 'dvs_portgroups'"}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-10 20:43:04

test.resultsvmware_dvs_portgroup_find任务的with_items的每个项的结果列表。因此,在访问每个元素的字段之前,您必须遍历这个列表。

如果要迭代所有结果的所有dvs_portgroups,可以这样做:

代码语言:javascript
复制
- debug: msg="{{ item.vlan_id }}"
  with_items: "{{ test.results | map(attribute='dvs_portgroups') | flatten | list }}"

  1. map(attribute='dvs_portgroups')将结果列表转换为每个result
  2. | flattendvs_portgroups列表,将列表( dvs_portgroups)转换为每个lists
  3. | list的所有元素的列表,将迭代器转换回可由with_items

解释的列表。

票数 1
EN

Stack Overflow用户

发布于 2020-09-11 08:44:50

以上调试代码运行良好。我得到了vlan_id的名单。只是为了增加更多的细节。我有4个dvswich,并从所有dvswtich获取vlan_id。我想让它的格式像每个dvswitch名称一样,在那里使用vlan_id。

代码语言:javascript
复制
test-123 -- dvswith name
220
221
222

test-456 -- dvswtich name
300
301
302

我正在尝试下面的方式,但它只从每个dvswitch中提供一个vlan_id。

代码语言:javascript
复制
- name: Final VLAN Details
  set_fact:
    vlan_details: "{{ vlan_details | default([]) + [dict(name=item[0], size=item[1])] }}"
  loop: "{{ dvswitch | zip(vlan_id) | list }}"
  loop_control:
    label: " "
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63832244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档