Ansible 标准输出行结果不带括号和引号

Ben*_*enn 2 ansible

如何从没有括号和引号的剧本 stdout_lines 返回?

\n

我读到的有关此的任何信息都不起作用,

\n

这是我的代码:

\n
  - name: Tested unit information\n    command: cat "{{ location }}/info.txt"\n    register: sys_info\n  - debug: \n      msg: "{{ sys_info.stdout_lines }}"\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的输出:

\n
    "msg": [\n        "Serial Number: Test12345",\n        "Technician Name: Team",\n        "Custom Serial Number: Test12345",\n        "System Part Number: xxxx",\n        "Rev: A10",\n        "Last Rev: A10",\n        "Paka Number: Auto",\n        "Ip Address: 1.1.1.1"\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这就是我想要得到的:

\n
msg:\n    Serial Number: Test12345\n    Technician Name: Team\n    Custom Serial Number: Test12345\n    System Part Number: xxxx\n    Rev: A10\n    Last Rev: A10\n    Paka Number: Auto\n    Ip Address: 1.1.1.1\n
Run Code Online (Sandbox Code Playgroud)\n

如果有任何有关如何执行此操作的信息或建议,我将不胜感激

\n

Vla*_*tka 6

简短回答

使用stdout而不是stdout_lines并使用yaml回调而不是default。然后

    - debug:
        msg: "{{ sys_info.stdout }}"
Run Code Online (Sandbox Code Playgroud)

给你想要的

  msg: |-
    Serial Number: Test12345
    Technician Name: Team
    Custom Serial Number: Test12345
    System Part Number: xxxx
    Rev: A10
    Last Rev: A10
    Paka Number: Auto
    Ip Address: 1.1.1.1
Run Code Online (Sandbox Code Playgroud)

细节


给定文件

shell> cat info.txt
Serial Number: Test12345
Technician Name: Team
Custom Serial Number: Test12345
System Part Number: xxxx
Rev: A10
Last Rev: A10
Paka Number: Auto
Ip Address: 1.1.1.1
Run Code Online (Sandbox Code Playgroud)

和剧本

shell> cat test.yml
- hosts: localhost
  tasks:
    - name: Tested unit information
      command: cat info.txt
      register: sys_info
    - debug:
        msg: "{{ sys_info.stdout_lines }}"
Run Code Online (Sandbox Code Playgroud)

您看到的内容取决于DEFAULT_STDOUT_CALLBACK默认回调格式为JSON

shell> ANSIBLE_STDOUT_CALLBACK=default ansible-playbook test.yml

TASK [debug] ***************************************************************
ok: [localhost] => {
    "msg": [
        "Serial Number: Test12345",
        "Technician Name: Team",
        "Custom Serial Number: Test12345",
        "System Part Number: xxxx",
        "Rev: A10",
        "Last Rev: A10",
        "Paka Number: Auto",
        "Ip Address: 1.1.1.1"
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果您想从列表中创建纯文本,请使用Jinja,例如

    - debug:
        msg: |-
          {% for line in sys_info.stdout_lines %}
          {{ line }}
          {% endfor %}
Run Code Online (Sandbox Code Playgroud)

,或者简单地加入

    - debug:
        msg: "{{ sys_info.stdout_lines|join('\n') }}"
Run Code Online (Sandbox Code Playgroud)

两个选项给出相同的结果

shell> ANSIBLE_STDOUT_CALLBACK=default ansible-playbook test.yml

TASK [debug] ***************************************************************
ok: [localhost] => {
    "msg": "Serial Number: Test12345\nTechnician Name: Team\nCustom Serial Number: Test12345\nSystem Part Number: xxxx\nRev: A10\nLast Rev: A10\nPaka Number: Auto\nIp Address: 1.1.1.1\n"
}
Run Code Online (Sandbox Code Playgroud)

使用回调yaml来得到你想要的

shell> ANSIBLE_STDOUT_CALLBACK=yaml ansible-playbook test.yml

TASK [debug] ***************************************************************
ok: [localhost] => 
  msg: |-
    Serial Number: Test12345
    Technician Name: Team
    Custom Serial Number: Test12345
    System Part Number: xxxx
    Rev: A10
    Last Rev: A10
    Paka Number: Auto
    Ip Address: 1.1.1.1

Run Code Online (Sandbox Code Playgroud)