如何从没有括号和引号的剧本 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 }}"\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n这就是我想要得到的:
\nmsg:\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\nRun Code Online (Sandbox Code Playgroud)\n如果有任何有关如何执行此操作的信息或建议,我将不胜感激
\n简短回答
使用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)