ansible寄存器出现问题:复制:和标准输出

时间:2018-07-19 19:33:46

标签: ansible stdout nexus

我有一台Ansible 2.6剧本,试图在一系列Cisco Nexus交换机上运行几个命令(希望在问题解决时添加更多命令),并将输出写入文件(每个交换机一个文件)。该剧本可以成功运行,但我似乎无法将输出格式转换为可读格式。预先感谢您尝试尝试!

示例输出:

模块1:v1.0 \ n模块1:v1.0 \ n模块2:v1.0 \ n模块7:v2.0 \ n模块8:v2.0 \ n Fabric Power Sequencer固件:模块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

PLAYBOOK:

    - hosts: NX-API
      gather_facts: false
      connection: network_cli
      order: sorted


      tasks:
        - name: run show version on remote devices
          nxos_command:
            commands:
              - show version
              - show interface status
          register: pre_check

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

1 个答案:

答案 0 :(得分:0)

您说剧本有效,但是我发现了几个问题:

  • 复制任务中的with_item放在这里。正如您在剧本中所写的那样,您应该得到的是一个填充了json数据的文件(例如 {"with_items": ["whatever {{ pre_check.stdout[0] }} expands to", "whatever {{ pre_check.stdout[1] }} expands to"]};
  • 如果要缩进with_items,则每次开关都要执行两次任务。然后那将不做任何n-1次迭代,因为最后一个迭代将覆盖目标文件的内容,而后者不会改变;

nxos_command模块没有定义pre_check.stdout_lines变量吗? (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"

工作。假设stdout_lines是列表的列表。但我相信:

    - 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末尾有一个pre_check.stdout[0],否则也应该工作,否则您需要自己添加它。