如何在ansible中比较多个文件(代码片段)

author author     2022-12-28     681

关键词:

我正在尝试找到一种方法,可以将一个目录中的多个文件与另一个目录中的文件进行比较。例如-目录/ home / ansible / properties /中有10个文件,而远程主机(如/ opt / apps / properties /)中的另一个目录中有类似的文件集。我想比较每个可能使用校验和的方法,即使其中一个文件被更改,也要执行一些任务-

在我的剧本下面,可以比较一个文件,但是有没有办法比较所有文件或与此相关的目录?

- name: Get checksum of my First file
  stat:
    path : "/home/ansible/properties/my.properties"
  register: myfirstfile

- name: Current SHA1
  set_fact:
    1stFilechecksum: " myfirstfile.stat.checksum "

- name: Get checksum of my Second File
  stat:
    path : "/opt/aaps/properties/my.properties"
  register: mysecondfile

- name: Current SHA1
  set_fact:
    2ndFilechecksum: " mysecondfile.stat.checksum "

- name: Comparing 2 files
  debug:
    msg: "Do Something....."
  when:  1stFilechecksum != 2ndFilechecksum
答案

根据您的描述测试文件树

...或至少我从中了解。

/tmp/test/a          /tmp/test/b
├── file10.txt       ├── file10.txt
├── file1.txt        ├── file1.txt
├── file2.txt        ├── file2.txt
├── file3.txt        ├── file3.txt
├── file4.txt        ├── file4.txt
├── file5.txt        ├── file5.txt
├── file6.txt        ├── file6.txt
├── file7.txt        ├── file7.txt
├── file8.txt        ├── file8.txt
├── file9.txt        ├── file9.txt
└── toto.txt         └── titi.txt

您可以看到,除了每个目录中的文件以外,所有文件都是公用的。这些将被排除在比较之外。对于通用文件,除了file2.txtfile5.txt具有相同的内容之外,所有其他文件都是不同的。

用于解决方案的基础

  • 我们以find循环搜索两个目录中的所有文件。 find中的所有文件都在a中,results[0]中的b中的文件都在。 results[1]选项收集我们所需的信息。
  • 在下一个任务中:
    • 我们循环搜索get_checksum中找到的文件。
    • [在每次迭代中,我们通过替换[dir]路径后仅用a选择具有相同b名称的列表元素来计算selectattr中的相应文件。保留结果的第一个元素将得到我们的文件。如果结果为空(不是通用文件),则默认为空对象
    • when子句检查文件是否存在(常见的是我们跳过)并且它们是否不同(校验和不相等)
    • selectattr用于自定义循环变量名称以提高可读性(即item => file1),并将循环项的输出限制为易于理解的形式。

剧本

path

结果

loop_control

ansible(代码片段)

Ansible:Ansible的核心程序HostLnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统... 查看详情

多个主机在ansible中更新相同的localhost变量(代码片段)

如果在我的playbook中,正在多个主机上运行一个游戏,每个主机更新一个localhost变量,localhost变量的值是什么?-hosts:groupaserial:2tasks:-set_fact:deploy:ARandomInteger(differentfordifferentserver)when:prev_failure.stat.existsdelegate_to:localh 查看详情

ansible(代码片段)

  Ansible:Ansible的核心程序HostLnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载Playbooks:YAML格式文件,多个任务定义在一个文件中,使用... 查看详情

ansible详解(代码片段)

ansible:Ansible的核心程序HostLnventory:记录每一个管理主机的信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载。Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,&l... 查看详情

ansible如何只输出错误信息?(代码片段)

...输出需要关注的部分。但是callback插件只对playbook生效,如何对Ad-hoc起作用呢?参考文档:https://docs.ansible.com/ansible/2.6/plugins/callback.html#managing-adhoc可以通过修改配置文件[defaults]bin_ansible_callbacks=True或者修改环境变量来实现exportANSI... 查看详情

ansible学习(代码片段)

ansible与salt对比相同都是为了同时在多台机器上执行相同的命令都是python开发不同agent(saltstack需要安装、ansible不需要)配置(salt配置麻烦,ansible基本不用配置)学习路线(salt比较陡峭,ansible比较平缓)第三方工具(salt比较... 查看详情

在ansible中如何从另一个变量初始化变量?(代码片段)

在Ansible角色中,如何根据另一个变量定义变量?我正在设计一个角色,并希望它的界面能够理解像framework_enable_java=yes或framework_enable_java=mysqltomcat这样的剧本变量,并希望编写一个定义布尔值的vars/main.yml文件framework_enable_java_coref... 查看详情

自动化运维之ansible基础元素介绍(代码片段)

Inventory(主机清单)Ansible为了更加便捷的管理主机,在主机清单中将被管理主机进行分组命名,默认的主机清单为/etc/ansible/hosts文件。主机清单可以设置为多个,也可以通过DynamicInventory动态生成。Inventory文件以中括号中的字符标... 查看详情

使用 Ansible 复制多个文件

...ileswithAnsible【发布时间】:2016-08-1008:47:43【问题描述】:如何在任务中通过Ansible将多个文件复制到远程节点?我试图在我的任务中复制复制模块行来定义文件,但它只复制第一个文件。【问题讨论】:【参考方案1】:您可以为... 查看详情

ansible:如何从清单组附加变量(代码片段)

我有一个ansible清单,组别如下。+hosts/+all/+group_vars/-linux.yml-webserver.yml-dbserver.yml...我有一个游戏本,用来设置对主机的监控,而监控的种类是由插件完成的。所以在每个组y中设置一个列表monitoring_plugins的插件,以便能够监控每个... 查看详情

如何在ocaml中编译多个文件?(代码片段)

我目前正在教自己ocaml我的编程语言课程,我在ocaml编译多个文件时遇到问题。我在get_file_buffer.ml文件中定义了一个函数get_file_buffer.ml的源代码(*Creatingafunctionthatwillreadallthecharsinafilepassedinfromthecommandargument.Andstoretheresultsinacharli 查看详情

如何应用此 pandas.Series 代码来比较文件夹中的多个文件

】如何应用此pandas.Series代码来比较文件夹中的多个文件【英文标题】:Howtoapplythispandas.Seriescodetocompareseveralfileswithinafolder【发布时间】:2018-01-2300:06:57【问题描述】:我已经有了这段代码,它可以在一个文件夹中找到所有csv文件... 查看详情

如何使用comparableinterface比较arraylist中对象的多个属性?[重复](代码片段)

...r(Point)。我可以在评估一个属性时对列表进行排序。我如何设置我的compareTo方法,以便它首先 查看详情

如何在文件目录中群集多个csv文件(代码片段)

我有多个具有相同数据结构的csv文件我想一次群集每个csv文件importosimportpandasaspdimportnumpyasnpfromsklearnimportmetricsimportglobdf=pd.read_csv('File000rejoice-19.csv')can=df.drop(columns=['pat'])fromsklearn.clusterimportDBSC 查看详情

ansible(代码片段)

一、安装ansibleyuminstallansible-yansible--version//查看版本,没有报错即安装成功二、ansible主机定义与分组1.ansible配置文件查找顺序(意思是以前边配置文件为准,前边有后边就不生效了)首先检测ANSIBLE_CONFIG变量定义的配置文件其次检... 查看详情

如何使用ansible过滤树中每个文件的最新版本?(代码片段)

我有一个带有各种文件的中型目录树:/some/place/distfiles/foo-1.2.jar/some/place/distfiles/subdir/foo-1.3.jar/some/place/distfiles/bar-1.1.jar/some/place/distfiles/bar-1.1.2.jar我使用find-module获取完整列表,但对于每个foo和bar,我只需要late 查看详情

如何使用 ansible 在一个循环中挂载多个磁盘

】如何使用ansible在一个循环中挂载多个磁盘【英文标题】:Howtomountmultipledisksinaloopusingansible【发布时间】:2020-11-1521:09:06【问题描述】:我最近才开始使用Ansible。我正在尝试在使用terraform附加的azureVM上安装4个磁盘。每个磁盘... 查看详情

如何在多个zip文件中添加文件?(代码片段)

...中的每个zip文件夹中移动图片。我在网上搜索了一些关于如何使用批处理(.bat)进行操作的指导,我发现的唯一解决方案是创建它的宏,但它需要很长时间才能完成。编辑:我有50个zip文件夹,我想以更快的方式在每个文件夹中... 查看详情