我的目标是用ansible在NetBox中创建新的设备。因此,我使用netbox_device就是出于这个原因。我正在从如下所示的json文件中获取所需的信息(设备名称、类型、序列号等):
{
"results":{
"infos": [
{
"device_type": "type1",
"device_name": "name1",
"serial_number": "num1"
},
{
"device_type": "type2",
"device_name": "name2",
"serial_number": "num2"
}
]
} }
所以,我要做的就是创建一个新设备:
- 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文件创建了一个包含所有设备名称的列表
ok: [localhost] => {
"ansible_facts": {
"dev_names": [
"nameisone",
"nameistwo"
]
},
"changed": false}
然后,我从json文件创建另一个包含设备类型的列表
ok: [localhost] => {
"ansible_facts": {
"dev_types": [
"type_one",
"type_two"
]
},
"changed": false}
所以现在我有一个任务,关于上面的列表有一个循环:
- 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 }} "这只适用于一个列表,这意味着如果我注释掉两个列表中的一个,我不会得到任何错误。
当我在我的两个列表中运行这个任务时,我得到的错误是:
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_dataAttributeError:“list”对象没有属性“”lower“”
失败:localhost => { "ansible_loop_var":"item","changed":false,"item":"nameisone","nameistwo“,
有什么想法吗?
发布于 2020-07-22 20:34:18
如果您确定您的列表是同步的,则可以使用zip filter,如下面的test.yml MVCE攻略所示。
---
- 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 }}"这就给出了:
$ 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=0https://stackoverflow.com/questions/63016151
复制相似问题