如何在远程服务器中使用 ansible 将两个文件合并为一个文件

如何在远程服务器中使用 ansible 将两个文件合并为一个文件

我需要合并两个不包含重复条目的文件。有什么方法可以通过 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在源文件末尾添加可能丢失的换行符。

相关内容