使用Ansible比较文件
我需要找到一种方法来比较给定elasticsearch数据主机组中的elasticsearch模板文件夹。这意味着,如果目录是使用Ansible比较文件,ansible,ansible-playbook,Ansible,Ansible Playbook,我需要找到一种方法来比较给定elasticsearch数据主机组中的elasticsearch模板文件夹。这意味着,如果目录是/usr/local/elasticsearch/config/templates/,我需要确保ansible主机组中该目录中的所有文件都相同 没有额外的模板文件或不同版本的模板文件。我还不知道怎么做 我首先比较模板文件夹下给定组中所有主机中的文件数,然后获取文件列表及其各自的md5sum值,并使用include_vars将它们导出到当前playbook。然后,我将每个文
/usr/local/elasticsearch/config/templates/
,我需要确保ansible主机组中该目录中的所有文件都相同
没有额外的模板文件或不同版本的模板文件。我还不知道怎么做 我首先比较模板文件夹下给定组中所有主机中的文件数,然后获取文件列表及其各自的md5sum值,并使用include_vars将它们导出到当前playbook。然后,我将每个文件md5sum与使用include_vars和_items导出的文件进行了比较。尝试使用shell模块将ansible与rsync干运行相结合:
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'
解释
- 将[data_hosts]组中所有主机上的/usr/local/elasticsearch/config/templates目录与主机1进行比较
- 使用
限制参数排除host1.example.com:-l
-l'~主机1'
- 使用
一次只运行一个比较。可选,但对我的情况有帮助,因为目录包含大量文件(>10K)-f 1
- 使用
防止rsync实际同步目录--dry run
- 使用
列出目标目录中的无关文件--delete
- 使用
根据校验和而不是mod time和size来比较文件--checksum
- 您可以通过删除
来修改这一行以执行同步。考虑在传输过程中添加<代码> -Z >代码>压缩文件数据,以及<代码> ->代码>存档模式。--dry run
- 生产库存文件如下所示:
[data_hosts] host1.example.com host2.example.com host3.example.com host4.example.com