首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历Ansible中netbox_device中的多个列表

循环遍历Ansible中netbox_device中的多个列表
EN

Stack Overflow用户
提问于 2020-07-21 21:56:49
回答 1查看 1.2K关注 0票数 1

我的目标是用ansible在NetBox中创建新的设备。因此,我使用netbox_device就是出于这个原因。我正在从如下所示的json文件中获取所需的信息(设备名称、类型、序列号等):

代码语言:javascript
复制
{
"results":{
       "infos": [
            {
                "device_type": "type1",
                "device_name": "name1",
                "serial_number": "num1"
            },
            {
                "device_type": "type2",
                "device_name": "name2",
                "serial_number": "num2"
            }

        ]

} 

}

所以,我要做的就是创建一个新设备:

代码语言:javascript
复制
- name: Create new devices within Netbox 
  netbox_device:
    netbox_url: http://url.goes.here
    netbox_token: 7575747448..66353
    data:
      name: name1
      device_type: type1
      device_role: Core Switch
      serial_number: "num1"
      site: Main
    state: present

如果有人想要创建一个特定的新设备,但我想动态创建新设备,同时循环一些带有所需信息的列表,这是很简单的事情。

特别是,我从json文件创建了一个包含所有设备名称的列表

代码语言:javascript
复制
ok: [localhost] => {
"ansible_facts": {
    "dev_names": [
        "nameisone", 
        "nameistwo"
    ]
}, 
"changed": false

}

然后,我从json文件创建另一个包含设备类型的列表

代码语言:javascript
复制
ok: [localhost] => {
"ansible_facts": {
    "dev_types": [
        "type_one", 
        "type_two"
    ]
}, 
"changed": false

}

所以现在我有一个任务,关于上面的列表有一个循环:

代码语言:javascript
复制
 - name: Create new devices within Netbox looping the lists with the required info
  netbox_device:
    netbox_url: http://url.goes.here
    netbox_token: 754544444444404509504959433333333
    data:
      name: "{{ item }}"
      device_type: "{{ item }}"
      device_role: "Core Switch"
      site: Site 
      #serial_number: "number"
    state: present
  loop:
    - "{{ dev_names }}"
    - "{{ dev_types }} "

这只适用于一个列表,这意味着如果我注释掉两个列表中的一个,我不会得到任何错误。

当我在我的两个列表中运行这个任务时,我得到的错误是:

代码语言:javascript
复制
 File "/tmp/poioanni/ansible_netbox_device_payload_5W1o8U/ansible_netbox_device_payload.zip/ansible/module_utils/net_tools/netbox/netbox_utils.py", line 352, in normalize_data

AttributeError:“list”对象没有属性“”lower“”

失败:localhost => { "ansible_loop_var":"item","changed":false,"item":"nameisone","nameistwo“,

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 20:34:18

如果您确定您的列表是同步的,则可以使用zip filter,如下面的test.yml MVCE攻略所示。

代码语言:javascript
复制
---
- name: Zip demo
  hosts: localhost
  gather_facts: false

  vars:
    "dev_names": [
      "nameisone",
      "nameistwo"
    ]

    "dev_types": [
      "type_one",
      "type_two"
    ]

  tasks:
    - name: demonstrate how to use the zip filter with a loop
      debug:
        msg: "Element from first list: {{ item.0 }}. Element from second list: {{ item.1 }}"
      loop: "{{ dev_names | zip(dev_types) | list }}"

这就给出了:

代码语言:javascript
复制
$ ansible-playbook test.yml 

PLAY [Zip demo] ************************************************************************************************************************************************************************************************************************

TASK [demonstrate how to use the zip filter with a loop] *******************************************************************************************************************************************************************************
ok: [localhost] => (item=['nameisone', 'type_one']) => {
    "msg": "Element from first list: nameisone. Element from second list: type_one"
}
ok: [localhost] => (item=['nameistwo', 'type_two']) => {
    "msg": "Element from first list: nameistwo. Element from second list: type_two"
}

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63016151

复制
相关文章

相似问题

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