我有一个很长的配置文件,我从各种设备中提取,并且需要它完全,因为命令输出给了我返回。然而,当我将输出写入文件时,Ansible 似乎正在删除换行符。
- name: Pull the running-config...
cisco.ios.ios_command:
commands: show running-config brief
register: running_output
...
...
- name: Copy running_config data to file...
ansible.builtin.copy:
content: "{{ running_output.stdout_lines }}"
dest: "/etc/ansible/backups/{{ inventory_hostname }}/running_config.txt"
当我调试输出时,我确实看到标准输出中的换行符被删除。但我也看到了不同的输出(stdout_lines),因为配置应该是而不是被大量的“替换” “s.
有没有办法确保我发送到文件的输出中存在换行符?或者确保替换它们的字符被正确记录并格式化?
简短回答:使用 stdout 而不是 stdout_lines。
详细信息:给出以下文件进行测试
shell> cat /tmp/config.txt
line1
line2
line3
读取它并注册变量running_output
- command: cat /tmp/config.txt
register: running_output
给予
running_output:
ansible_facts:
discovered_interpreter_python: /usr/bin/python3
changed: true
cmd:
- cat
- /tmp/config.txt
delta: '0:00:00.007317'
end: '2023-11-02 02:15:50.172897'
failed: false
msg: ''
rc: 0
start: '2023-11-02 02:15:50.165580'
stderr: ''
stderr_lines: []
stdout: |-
line1
line2
line3
stdout_lines:
- line1
- line2
- line3
如果您使用列表running_output.stdout_lines
- copy:
dest: /tmp/running_config.txt
content: "{{ running_output.stdout_lines }}"
您将获得清单
shell> cat /tmp/running_config.txt
["line1", "line2", "line"]
使用 running_output.stdout 代替
- copy:
dest: /tmp/running_config.txt
content: "{{ running_output.stdout }}"
你会得到
shell> cat /tmp/running_config.txt
line1
line2
line3