python - 使用命令行参数通过 Ansible playbook 多次运行 python 脚本
问题描述
我试图通过我的Ansible
剧本多次运行 Python 脚本,使用 with_items 以在每次迭代中采用不同的命令行参数,但即使它遍历循环以为生成的文件采用不同的名称,但文件的内容仍然存在同:即只显示命令输出的内容"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 }}"
变量/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
脚本.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)
解决方案
你在循环错误的事情。当你有...
- name: Run python script and store command output
command: python /users/aastha/play/script.py {{ item.name1 }} {{ output }}
with_items: "{{ commands }}"
...您正在查看commands
变量。这意味着output
总是指的是同一件事。查看有关在循环中使用register
的文档:
使用带有循环的寄存器后,放置在变量中的数据结构将包含一个结果属性,该属性是来自模块的所有响应的列表。
您实际上想要循环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
指的是第一个循环中的循环值
(循环commands
变量)。我在这里做一些假设;我实际上不知道每个项目的结构是什么样的,output.results
因为您没有发布debug
任务的输出。我假装该属性item.stdout
具有您感兴趣的值,但它可能被命名为其他名称。
推荐阅读
- reactjs - 使用 typescript + 生成的核心作为包调用 graphql-codegen 查询时,挂钩调用无效
- javascript - 计算星期几
- javascript - CanvasRenderingContext2D 函数有什么作用?
- java - 多线程中的 AtomicLong
- tensorflow - TensorFlow 对象检测 API 字典错误
- javascript - TypeError:无法设置未定义的属性“用户名”
- html - 提交事件动画
- reactjs - 在 `setInterval()` 内时值不更新
- c# - 批量操作如何影响 ConcurrentDictionary?
- python - Python socket Select 模块显示它已收到读取请求,但它只收到一个。为什么?