我需要找到一种方法,可以比较给定elasticsearch数据主机组中的elasticsearch模板文件夹。这意味着如果目录是/usr/local/elasticsearch/config/templates/
,我需要确保该ansible主机组中该目录中的所有文件都是相同的。
没有额外的模板文件或差异版本模板文件。我还没有弄清楚如何做到这一点。
答案 0 :(得分:1)
尝试使用shell模块将ansible与rsync dry-run结合使用:
ansible -i production data_hosts -l '!~host1' -f 1 -m shell \
-a 'rsync --checksum --delete --dry-run -r -v host1.example.com:/usr/local/elasticsearch/config/templates/ /usr/local/elasticsearch/config/templates'
<强>解释强>
-l
限制参数-l '!~host1'
-f 1
一次只运行一次比较。可选,但在我的情况下有帮助,因为目录包含大量文件(&gt; 10K)--dry-run
阻止rsync实际同步目录--delete
列出目标目录中的无关文件--checksum
基于校验和而非模态时间和大小来比较文件备注强>
--dry-run
以执行同步。请考虑在传输过程中添加-z
以压缩文件数据,并在存档模式下添加-a
。生产清单文件如下所示:
[data_hosts]
host1.example.com
host2.example.com
host3.example.com
host4.example.com
答案 1 :(得分:0)
我首先比较了模板文件夹下该给定组中所有主机中的文件数,然后获取文件列表及其各自的md5sum值,并使用include_vars将它们导出到当前的playbook。然后我将每个文件md5sum与使用include_vars和with_items导出的文件进行比较。