我正在尝试使用我的Ansible
剧本使用with_items多次运行Python脚本,以在每次迭代中采用不同的命令行参数,但是即使如此,它也会循环遍历以对生成的文件采用不同的名称,但文件的内容保持不变:即,它仅显示"show version" NX-OS
的命令输出的内容。
如何遍历上一个任务中的{{ output }}
?
上下文:Cisco Nexus 3k交换机上的NX-OS CLI命令
任务/main.yml:
---
- name: Run basic CLI commands on nexus 3k switch
nxos_command:
provider: "{{ nxos_provider }}"
commands: "{{ item.cmd1 }}"
with_items: "{{ commands }}"
register: output
- debug: var=output
- name: Run python script and store command output
command: python /users/aastha/play/script.py {{ item.name1 }} {{ output }}
with_items: "{{ commands }}"
vars / main.yml :
---
nxos_provider:
host: "{{ inventory_hostname }}"
username: "{{ un }}"
password: "{{ pwd }}"
transport: nxapi
timeout: 500
commands:
- cmd1: show version
name1: pre-show-version
- cmd1: show interface brief
name1: pre-interface
script.py :
import json
import sys
arg = sys.argv[2:]
print(arg)
aas='\n'.join(map(str, arg))
print aas
with open(sys.argv[1], 'w') as outfile:
outfile.write(aas)
答案 0 :(得分:0)
您正在遍历错误的内容。当你有...
- name: Run python script and store command output
command: python /users/aastha/play/script.py {{ item.name1 }} {{ output }}
with_items: "{{ commands }}"
...您正在查看commands
变量。这意味着output
始终指的是同一件事。看看using register
in a loop上的文档:
将寄存器与循环一起使用后,放置在变量中的数据结构将包含一个results属性,该属性是模块中所有响应的列表。
您实际上是想遍历output.results
,例如:
- name: Run python script and store command output
command: python /users/aastha/play/script.py {{ item.item.name1 }} {{ item.stdout }}
with_items: "{{ output.results }}"
在上面,item.item
指的是 first 中的循环值
循环(循环遍历commands
变量)。我正在做一些
这里的假设;我实际上不知道每个的结构
output.results
中的项目看起来像是因为您没有发布输出
debug
任务中。我假装属性item.stdout
具有您感兴趣的值,但它可能名为
其他的东西。