Ansible 可转换寄存器的问题:副本:和标准输出

Ansible 可转换寄存器的问题:副本:和标准输出,ansible,stdout,nexus,Ansible,Stdout,Nexus,我有一个Ansible 2.6 playbook,它试图在一系列Cisco Nexus交换机上运行两个(在问题解决后想添加更多)命令,并将输出写入一个文件(每个交换机一个文件)。playbook运行成功,但我似乎无法将输出转换为可读格式。提前感谢您的任何尝试 示例输出: 模块1:v1.0\n模块1:v1.0\n模块2:v1.0\n模块7:v2.0\n模块8:v2.0\n结构电源定序器固件:模块0:v3.0版\n微控制器固件:v1.2.2.0版\n QSFP微控制器固件:\n模块1:v1.7.0.

我有一个Ansible 2.6 playbook,它试图在一系列Cisco Nexus交换机上运行两个(在问题解决后想添加更多)命令,并将输出写入一个文件(每个交换机一个文件)。playbook运行成功,但我似乎无法将输出转换为可读格式。提前感谢您的任何尝试

示例输出:

模块1:v1.0\n模块1:v1.0\n模块2:v1.0\n模块7:v2.0\n模块8:v2.0\n结构电源定序器固件:模块0:v3.0版\n微控制器固件:v1.2.2.0版\n QSFP微控制器固件:\n模块1:v1.7.0.0\n模块2:v1.7.0.0\n SFP微控制器固件:\n

剧本:
你说剧本行得通,但我发现几个问题:

  • 复制任务中的
    with_项
    在此位置不正确。正如在你的剧本中所写的那样,你应该得到一个充满json数据的文件(例如,
    {“with_items”):[“whatever{pre_check.stdout[0]}扩展到“,”whatever{{pre_check.stdout[1]}扩展到“]}
  • 如果您使用_items对
    进行缩进,您将为每个开关执行两次任务。这将进行n-1次迭代,因为最后一次迭代将覆盖目标文件的内容,该内容不会更改
nxos_命令模块是否定义了一个
pre_check.stdout_line
变量?(Doc说是),该变量与stdout相同,只是作为一个行列表,而不是控制台输出的全部。类似于:

    - name: save output to /home/ansible/PRECHECK/
      copy:
        content: "{{ (pre_check.stdout_lines[0] + pre_check.stdout_lines[1]) | join('\n') }}"
        dest: "/home/PRECHECK/pre_check_{{ inventory_hostname }}.txt"
工作。假设标准行是一个列表。但我相信:

    - name: save output to /home/ansible/PRECHECK/
      copy:
        content: "{{ (pre_check.stdout[0] + pre_check.stdout[1] }}"
        dest: "/home/PRECHECK/pre_check_{{ inventory_hostname }}.txt"

如果在
预检查结束时有一个最终的
\n
。stdout[0]
,否则您需要自己添加它。

是的,“stdout\u行”是代替“stdout”的有效选项,但无论哪种方式,它的格式都不正确(或者至少是我希望的方式)。因此,它看起来像是接受每个命令,然后将每个命令的输出设置为列表元素,“sh version”命令输出为“[0]”,“sh int status”命令输出为“[1]”@RobertCampbell彻底改变了我的答案。希望这会更有帮助。谢谢!是的,我的“with_items”的确构思不周。内容:“{{(pre_-check.stdout[0]+pre_-check.stdout[1]}”行是赢家。再次感谢!现在格式完美:原因:CLI命令重新加载系统版本:7.3(2)N1(1)服务:插件核心插件、以太网插件、Fc插件活动包--------------------------------------------------------------------------------端口名称状态Vlan双工速度类型--------------------------------------------------------------------Eth1/1 S60G3SP001-e1/1已连接f路径完整40G WSP-Q40GLR4 Eth1/2上行链路FEX111连接1个完整的40G WSP-Q40GLR4
    - name: save output to /home/ansible/PRECHECK/
      copy:
        content: "{{ (pre_check.stdout[0] + pre_check.stdout[1] }}"
        dest: "/home/PRECHECK/pre_check_{{ inventory_hostname }}.txt"