我需要合并两个不包含重复条目的文件。有什么方法可以通过 ansible 模块实现吗?例如,我有两个文件 /etc/hosts1 和 /etc/hosts2。我需要一个 /etc/hosts 文件,其中所有条目都存在于 /etc/hosts1 和 /etc/hosts2 中,且不包含重复条目。我该如何实现呢?请举个例子
- name: Merge two files
assemble:
src: /etc/hosts1
dest: /etc/hosts2
上述组装模块失败
答案1
这有效。它读取所有文件的内容并将生成的行数组缩减为唯一值。然后创建一个包含这些行的新文件。
- hosts: localhost
gather_facts: no
vars:
hostsfiles:
- /tmp/hosts1
- /tmp/hosts2
tasks:
- name: read files
command: awk 1 {{ hostsfiles | join(' ') }}
register: hosts_contents
- name: create hosts file
copy:
dest: /tmp/hosts
content: "{{ hosts_contents.stdout_lines | unique |join('\n') }}"
我使用awk 1
而不是cat
在源文件末尾添加可能丢失的换行符。