![如何将ansible stdout.lines保存到列表格式的文件中](https://linux22.com/image/133675/%E5%A6%82%E4%BD%95%E5%B0%86ansible%20stdout.lines%E4%BF%9D%E5%AD%98%E5%88%B0%E5%88%97%E8%A1%A8%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD.png)
需要使用下面的剧本将 std.out 行保存到委托主机中的文件中。我可以保存数据,但保存的数据是json格式。我需要这些数据作为列表格式,就像命令输出一样。
- name: Host Collection
hosts: rcht01
tasks:
- name: Host coll
shell: mysql -ulnx -plnx -D inventory -se "select Host_Name from servers where OS= 'Linux' AND Server_Status = 'Live' AND Server_loc = 'Richardson' "| tr 'A-Z' 'a-z'
register: all_hosts_list
- name: Saving data to local file
copy:
content: "{{ all_hosts_list.stdout_lines }}"
dest: /tmp/host_coll
delegate_to: rchabs01
答案1
content: "{{ all_hosts_list.stdout_lines|join('\n') }}"
答案2
这条线对我来说效果更好:
content: "{{ output.stdout_lines | join('\n') }}\n"
它添加了最后的 LF,否则将被省略。
join 函数使用参数中提供的字符作为列表项之间的分隔符“将列表连接成字符串”。输出首先以列表形式存在,没有行终止符; join() 将列表转换为单个字符串,每个前列表项的末尾带有 LF。除了我上面添加的最后一个 \n 之外。
文件:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_filters.html