首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Ansible中检测json文件的更改: jq使用不同的缩进->文件总是被更改

在Ansible中检测JSON文件的更改可以使用jq工具来实现。jq是一个轻量级的命令行JSON处理工具,可以用于查询、过滤和转换JSON数据。

首先,确保已经安装了jq工具。在大多数Linux发行版中,可以通过包管理器进行安装。例如,在Ubuntu上可以使用以下命令安装jq:

代码语言:txt
复制
sudo apt-get install jq

接下来,可以使用Ansible的shell模块结合jq命令来检测JSON文件的更改。以下是一个示例任务:

代码语言:txt
复制
- name: 检测JSON文件更改
  hosts: localhost
  tasks:
    - name: 获取JSON文件的MD5哈希值
      shell: "md5sum /path/to/file.json | awk '{print $1}'"
      register: current_hash

    - name: 获取上次保存的MD5哈希值
      shell: "cat /path/to/saved_hash.txt"
      register: saved_hash
      changed_when: false

    - name: 保存当前的MD5哈希值
      shell: "echo {{ current_hash.stdout }} > /path/to/saved_hash.txt"
      when: current_hash.stdout != saved_hash.stdout

    - name: 执行其他操作(文件已更改)
      debug:
        msg: "JSON文件已更改"
      when: current_hash.stdout != saved_hash.stdout

在上面的示例中,首先使用shell模块和jq命令获取JSON文件的MD5哈希值,并将其保存在变量current_hash中。然后,使用shell模块获取上次保存的MD5哈希值,并将其保存在变量saved_hash中。注意,使用changed_when: false将此任务标记为不会导致变更。

接下来,使用shell模块将当前的MD5哈希值保存到文件中,仅当当前哈希值与上次保存的哈希值不同时执行此任务。

最后,根据当前哈希值与上次保存的哈希值是否相等,决定是否执行其他操作。在示例中,使用debug模块输出一条消息来表示JSON文件是否已更改。

这是一个基本的示例,你可以根据实际需求进行修改和扩展。请注意,Ansible还提供了其他模块和功能,可以更方便地处理JSON文件和数据。你可以参考Ansible官方文档以了解更多信息。

推荐的腾讯云相关产品:腾讯云服务器(CVM)、腾讯云对象存储(COS)、腾讯云数据库(TencentDB)等。你可以访问腾讯云官方网站获取更多关于这些产品的详细信息和文档链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5个基本Linux命令行工具的现代化替代品

例如,top 于 1984 年首次发布,而 du 的首次发布要追溯到 1971 年。 多年来,这些工具已经被现代化并移植到不同的系统,但是,通常,它们仍然延续着它们最初的思想和体验。...如果你是在日常任务中会用到 JSON 的开发人员或系统管理员,那么这是你工具箱中必不可少的工具。...如果你只是在查找第二个容器的名称,则可以在表达式中添加数组元素索引: $ jq '.spec.containers[1].name' k8s-pod.json "nginx" 因为 jq 知道数据结构,...例如,在包含 Git 存储库的目录中搜索源代码文件时,fd 会自动排除隐藏的文件和目录,包括. .git 目录,并忽略.gitignore 文件中的模式。...-iname "*.md" 使用 fd 进行同样的搜索: $ fd .md 在某些情况下,fd 需要额外的选项;例如,如果你想包含隐藏文件和目录,则必须使用选项 -H,而这在 find 中是不需要的。

1.2K20

5 款新型 Linux 命令行工具,实用!

在设置页面中,你可以更改其颜色,添加或删除指标、更改概述栏的显示选项。 虽然top的最新版本也可以通过配置获得相似的结果,但htop提供的默认配置更为合理,作为一个进程浏览器更加易于使用。...就像sed或grep一样,但主要是为了处理JSON数据。如果你是日常任务需要使用JSON的开发人员或系统管理员,那么这是你的工具箱中必不可少的工具。...在使用jq获得所需结果时,你只需要使用一个模拟向下导航数据结构的表达式,如下所示: $ jq '.spec.containers[].name' k8s-pod.json "busybox" "nginx...如果你只想查看第二个容器的名称,则可以在表达式中添加数组元素索引: $ jq '.spec.containers[1].name' k8s-pod.json "nginx" 因为jq能够理解数据结构,所以即使文件格式稍有变化...例如,在包含Git代码库的目录中搜索源代码文件时,fd会自动排除隐藏的文件和目录(包括.git目录),并忽略.gitignore文件中的模式。通常,它可以更快地查询,并提供相关度更高的结果。

1.1K10
  • YAML教程:5分钟内开始使用YAML

    它类似于XML和JSON文件,但使用更简洁的语法。YAML通常用于在基础架构代码(IoC)程序中创建配置文件或在DevOps开发管道中管理容器。...JSON格式 难以阅读 明确而严格的语法要求 与YAML相似的内联样式(某些YAML解析器可以读取JSON文件) 暂无注释 字符串需要双引号 用例:JSON在Web开发中受到青睐,因为它最适合序列化格式和通过...YAML文件使用类似于Python的缩进系统来显示程序的结构。...您需要使用空格而不是制表符来创建缩进,以免造成混淆。 它还削减了JSON和XML文件中的许多“噪声”格式,例如引号,括号和花括号。...它们有助于将数据划分为逻辑类别,以供以后使用。 字典的定义就像映射一样,在字典中,您输入字典名称,冒号和一个空格,后跟一个或多个缩进键/值对。

    5.5K20

    ansible自动运维工具之ansible-playbook详解

    所有的“-”和“ : ”后面均由空格,而且要严格注意缩进和对齐,否则语法可能能会报错。 每次在执行playbook文件之前,一定要使用“-C”选项来进行预测试。...[ option ]/etc/ansible/a.yml 其中option中的功能包括: * --syntax-check:检测yaml文件的语法。...有一个在线的ansible-playbook语法检测工具,可以更直观的检查出语法中的错误,感兴趣可以看一下:http://www.yamllint.com/ 2、触发器 需要触发才能执行的任务,当之前在...例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以便配置文件生效。...0 :::8080 :::* LISTEN 103594/httpd 3、角色 将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色。

    2.1K40

    「译文」给讨厌YAML的人的10个写YAML的建议

    这些建议可能会减轻你的痛苦。 Ten 配置文件有很多格式:键、值、和键值对的列表、INI 文件、YAML、JSON、XML 等等。其中,由于一些不同的原因,YAML 有时被认为是特别难以处理的。...只需将您的 JSON 数据写入 Python 变量中,在导入语句前面添加一个 import 语句,并以一个简单的三行输出语句结束文件。 #!...浪费一个小时在错误的选项卡或空格组上是您创建策略来使用其中一个或另一个的信号,然后开发一个故障安全检查以确保遵从性(例如使用 Git hook 来执行检测)。 7....例如,Ansible 文档中的同一个 YAML 可以用更少的缩进表示,而不会失去任何有效性或意义: --- - martin: name: Martin D'vloper job: Developer...换用其他配置格式 总的来说,我是 YAML 的粉丝,但有时 YAML 并不能解决问题。如果您没有被正在使用的应用程序锁定在 YAML 中,那么使用其他配置格式可能会更好。

    1.5K30

    Ansible 2 -- 5 playbook 语法

    playbook 使用 Ansible 时,绝大部分时间将花费在编写playbook上。playbook 英文直译是剧本的意思,是一个Ansible术语,它指的是用于配置管理的脚本。...playbook 是 YAML格式的,yaml格式可以很方便的被转换为json供开发语言使用 顺便推荐一个在线的yaml转json playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式...json数组,注意在playbook中name属性不是必须的,表示描述,表示圈定一个范围,范围内的项都属于该列表。...playbook.yml --check 有用的flag --check 对支持check的大部分核心模块,输出真正执行会进行哪些更改 --diff 报告更改,比如操作文件,会告诉用户之前之后发生了哪些变化...注意,notify是在执行完一个play中所有task后被触发的,在一个play中也只会被触发一次。 意味着如果一个play中有多个task出现了changed=true,它也只会触发一次。

    1.2K20

    如何在Ubuntu 14.04上使用Ansible部署基本PHP应用程序

    在本教程中,我们将创建一个本地hosts文件并使用它。我们可以通过在工作目录中创建一个新的Ansible配置文件来完成此操作,我们可以使用它来告诉Ansible在同一目录中查找hosts文件。...版本1.9.1错误 Ansible版本1.9.1中存在一个错误,它阻止了php5-fpm从我们在处理程序中使用的service模块中重新启动。...Composer有一个create-project命令,该命令可以安装所有必需的依赖项,然后运行项目创建步骤,该步骤是被定义在composer.json文件里的post-create-project-cmd...copy将复制一个或多个文件而不进行任何更改,同时template复制单个文件并解析文件中的所有变量。...结论 本教程介绍如何使用公共存储库部署PHP应用程序。虽然它非常适合学习Ansible如何工作,但您并不总是使用开放存储库来处理完全开源的项目。

    6K00

    使用Ansible构建虚拟机模板二

    例如,我们可能只需要更改文件中的一行,而将替换整个文件变成更改一行的工作量有点繁重,特别是当你考虑到配置文件可能会在将来的软件包版本中更新时。...但是,前面代码中的简单正则表达式不考虑空格,因此很容易错过其他有效的SSH配置指令。考虑所有可能的情况和文件的排列来设计正则表达式本身就是一门艺术,因此在创建和使用正则表达式时一定要小心谨慎。...在Ansible中,有许多方法都可以执行此任务,我们举一个简单的例子。假设你有一个存档脚本,它使用bzip2压缩实用程序来压缩文件。...注意前面输出中的changed状态,这是因为我们使用了command(命令)模块,它成功地运行了命令,因此,它总是返回changed。...我们可以再次使用virtsysprep命令,不过,Ansible也可以帮助我们。在下一节中,我们将探讨如何使用Ansible清理映像以进行大规模部署。

    23420

    PEP 8-Python编码规范整理

    5 源文件编码: 核心Python发行版中的代码应该始终使用UTF-8(或Python 2中的ASCII)。.../usr/bin/env python2 上面两行代码常放在Python 2代码中的开头,第一行意思是指定源文件以utf-8格式编码,第二行意思是指定源文件的python解释器在环境变量中去寻找。...6 导入库函数: 若是导入多个库函数,应该分开依次导入: import requests import csv 导入总是放在文件的顶部,在任何模块注释和文档字符串之后,在模块全局变量和常量之前。...""" 一种简单的方式是使用模块json来存储数据 """ # 使用函数json.dump()来存储数据# 函数json.dump()接受两个对象:要存储的数据以及可用于存储数据的文件对象 import...json numbers = [2, 3, 5, 7, 11, 13] filename = "numbers.json" # 使用文件扩展名.json来指出文件存储的数据为JSON格式with

    1.5K80

    ansible puppet saltstack三款自动化运维工具的对比!

    然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(push)来进行更改。   ...安装完毕后,需要管理的节点被添加到Ansible配置环境,SSH授权密钥被附加到每个节点上,这与运行Ansible的用户有关。...针对确保服务在运行,或者触发更新和重新启动之类的简单任务,Ansible可以从命令行来运行,不需要使用配置文件。...至于比较复杂的任务,Ansible配置通过名为Playbook的配置文件中的YAML语法来加以处理。Playbook还可以使用模板来扩展其功能。   ...可以用几乎任何一种语言来编写自定义Ansible模块,只要模块输出是有效的JSON。

    7.2K21

    如何Ansible编写一个Playbook

    1、playbooks介绍 playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。...不同的是只有在接受到通知时才会被触发 5.templates:使用模板语言的文本文件 6.variables:变量,变量替换 3、playbook和临时命令的比较 1.临时命令不适合复杂配置管理或编配场景...playbook使用带空格字符的缩进来表示数据结构。YAML对缩进使用了多少空格没有严格的要求,但是有两个基本规则: 1、层次机构中相同级别的数据元素(例如相同列表中的项)必须具有相同的缩进。...5、Tab键的使用 yml文件只能使用空格缩进,不能使用Tab,如果vim编辑器,可以通过编辑$HOME/.vimrc将Tab转化为2个空格。文件如果不存在,则自己创建。...这会使Ansible报告在执行该playbook时将会发生什么更改,但不会对受管主机进行任何实际的更改。 下面演示了一个playbook的空运行,它在受管主机上安装了最新版本的httpd软件包。

    3K20

    Ansible自动化运维学习笔记1

    举个例子:你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录中是否已经存在此文件,当你使用ansible完成这项任务时,就非常简单了,因为如果目标主机的对应目录中已经存在此文件,那么ansible...中; 2.清单配置详解 我们可以在ansible提供的清单配置文件中进行配置我们以该文件进行讲解 $vim /etc/ansible/hosts # This is the default ansible...注意,为了使缩进显得更加明显,此处每次缩进使用两个空格 $vim /etc/ansible/hosts #使用YAML语法配置的主机清单非常简单下面就是他的配置示例 #示例1.所有受管理组演示 all...: #管理清单中的所有主机的一个组,这里的"all:"就是这个含义 hosts: #第二行开头使用一个空格作为缩进,使用hosts关键字,表示hosts属于all的下一级,(后面的都是采用两个空格..., handlers是另一种任务列表并且可以有多个任务,被tasks中不同的任务notify, 默认情况下所有task执行完毕后才会执行各个handler,并不是执行完某个task后,立即执行对应的handler

    4.1K31

    一文详解 Ansible 自动化运维!

    在 hosts 文件中,通过分组来组织设备,Ansible 通过 Inventory 来定义主机和分组,通过在 ansible 命令中使用选项-i或—inventory-file来指定 Inventory...若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口标明,以行为单位分隔配置。另外,hosts文件还支持通配符。...--[2:5]表示2~5之间的所有数字,即表示yj2.kgc.cn、yj3.kgc.cn……的所有主机--> 可以将一个主机同时归置在不同的组中。...用户可以在ansible-console虚拟出来的终端上像shell一样使用Ansible内置的各种命令,这为习惯于使用shell交互式方式的用户提供了良好的使用体验。...例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效。

    3.1K30

    开源运维自动化工具 Ansible 详解

    在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分组,通过在ansible命令中使用选项-i或--inventory-file来指定Inventory。...若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口标明,以行为单位分隔配置。另外,hosts文件还支持通配符。...--[2:5]表示2~5之间的所有数字,即表示yj2.kgc.cn、yj3.kgc.cn……的所有主机--> 可以将一个主机同时归置在不同的组中。...所有的“-”和“:”后面均有空格,而且注意缩进和对齐,如下图所示: playbook的核心元素包含: hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息...例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效。

    4K40

    Ansible之 AWX 使用 Ansible 与 API 通信

    中 作业模板 Ansible 模块 uri 的简单介绍 Ansible 剧本方式 调用 API 启动作业模板 理解不足小伙伴帮忙指正 「 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了...在 Playbook 中必须为 AWX 提供足够的凭据,以便作为拥有启动该作业的权限的用户进行身份验证: 这里为了方便在 playbook 中嵌入了用于向 AWX 服务器进行身份验证的用户名和密码...若要保护这些数据,应该使用 Ansible Vault 加密 playbook,或者将机密移到一个变量文件中,再使用 Ansible Vault加密该文件。...对于RESTAPI,请使用json;对于基于表单的传统页面,请使用form-urlencoded。...使用status_code选项将您期望成功的状态码告诉uri模块。如果响应中的状态码不同,则任务将失败。

    1.6K10

    JSON神器之jq使用指南指北

    作为一般规则,最好总是引用(使用单引号字符) jq 程序,因为太多对 jq 具有特殊含义的字符也是 shell 元字符。...使用此选项将通过将每个 JSON 对象放在一行中来生成更紧凑的输出。 --tab: 每个缩进级别使用一个制表符,而不是两个空格。...如果您使用 运行 jq --slurpfile foo bar,则$foo在程序中可用,并且有一个数组,其元素对应于名为 的文件中的文本bar。...(回想一下,jq 程序的输出值总是作为 JSON 文本输出到stdout.)debug内置可以具有特定于应用程序的行为,例如对于使用 libjq C API 但不是 jq 可执行文件本身的可执行文件。...模块 jq 有一个库/模块系统。模块是名称以 . 结尾的文件.jq。 程序导入的模块在默认搜索路径中搜索(见下文)。和指令允许导入import器include更改此路径。

    28.7K30

    使用这些配置规范并格式化你的代码

    在日常工作中,我们会接触形形色色的工程。如果工程使用的技术架构不同,可能会有对应不同的代码规范。...添加 .eslintrc.js 配置文件。 更改 VSCode 的 setting.json 文件的配置。 其中,想要实现自动按照工程的规则格式化,第四步必不可少。...当访问当前源文件内未定义的变量时,no-undef 规则将发出警告。如果你想在一个源文件里使用全局变量,推荐你在 ESLint 中定义这些全局变量,这样 ESLint 就不会发出警告了。...,则需要做一点小小的更改,以便在使用 JSX 的时候,不会要求我们引入 React。...但是往往不同的团队对规则的使用是不一致的,如果强制所有文件都使用 prettier 自动格式化,会出现与公司配置的代码规范检查工具(例如 ESLint) 冲突的情况。

    2.5K30

    2021年排名前85的DevOps面试问答

    构建-通过集成前面步骤中形成的各种代码来构建应用程序。 测试-这是应用程序开发中最关键的一步。测试应用程序并在必要时进行重建。 集成-来自不同程序员的多个代码被集成到一个中。...与为其他服务编写的代码相似,在AWS的帮助下,IaC允许开发人员使用JSON或YAML等格式以描述性方式编写,测试和维护基础架构实体。这样可以简化开发并更快地部署基础结构更改。...使用GitHub冲突编辑器解决 在争夺线路更改后导致合并冲突时,可以执行此操作。例如,当人们对您的Git存储库中不同分支上的同一文件的同一行进行不同更改时,可能会发生这种情况。...Ansible角色是嵌入在剧本中的任务,变量,文件和模板的独立块。 ? 这本剧本在node1上安装了tomcat。 59.我什么时候应该使用“ {{}}”?...提供监视不同平台上各种指标的功能 确保快速检测服务和应用程序故障 能够监视以下指标: CPU使用率 记忆 联网 虚拟机状态 减少管理费用 84.在Nagios中命名影响递归和继承的三个变量。

    6.8K30

    DevOps 自动化运维工具选择

    然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(push)来进行更改。...安装完毕后,需要管理的节点被添加到Ansible配置环境,SSH授权密钥被附加到每个节点上,这与运行Ansible的用户有关。...针对确保服务在运行,或者触发更新和重新启动之类的简单任务,Ansible可以从命令行来运行,不需要使用配置文件。...至于比较复杂的任务,Ansible配置通过名为Playbook的配置文件中的YAML语法来加以处理。Playbook还可以使用模板来扩展其功能。...Ansible有一大批模块,可用于管理各种系统以及亚马逊弹性计算云(EC2)和OpenStack等云计算基础设施。可以用几乎任何一种语言来编写自定义Ansible模块,只要模块输出是有效的JSON。

    2.5K30
    领券