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

在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文件) 暂无注释 字符串需要双引号 用例:JSONWeb开发受到青睐,因为它最适合序列化格式和通过...YAML文件使用类似于Python缩进系统来显示程序结构。...您需要使用空格而不是制表符来创建缩进,以免造成混淆。 它还削减了JSON和XML文件许多“噪声”格式,例如引号,括号和花括号。...它们有助于将数据划分为逻辑类别,以供以后使用。 字典定义就像映射一样,字典,您输入字典名称,冒号和一个空格,后跟一个或多个缩进键/值对。

    5.3K20

    「译文」给讨厌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.4K30

    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文件集中存储某个目录下,则该目录就是角色。

    2K40

    如何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软件包。

    2.9K20

    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

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

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

    2.5K30

    Ansible 2 -- 5 playbook 语法

    playbook 使用 Ansible 时,绝大部分时间将花费在编写playbook上。playbook 英文直译是剧本意思,是一个Ansible术语,它指的是用于配置管理脚本。...playbook 是 YAML格式,yaml格式可以很方便转换为json供开发语言使用 顺便推荐一个在线yaml转json playbook是一个非常简单配置管理和多主机部署系统,不同于任何已经存在模式...json数组,注意在playbookname属性不是必须,表示描述,表示圈定一个范围,范围内项都属于该列表。...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如何工作,但您并不总是使用开放存储库来处理完全开源项目。

    5.9K00

    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.5K30

    2021年排名前85DevOps面试问答

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

    6.8K30

    使用Ansible构建虚拟机模板二

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

    23020

    一文详解 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模块对目标主机配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,触发器定义目标主机服务重启操作,以使配置文件生效。

    2.9K30

    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

    PEP 8-Python编码规范整理

    5 源文件编码: 核心Python发行版代码应该始终使用UTF-8(或Python 2ASCII)。.../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.4K80

    开源运维自动化工具 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模块对目标主机配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,触发器定义目标主机服务重启操作,以使配置文件生效。

    3.9K40

    DevOps 自动化运维工具选择

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

    2.5K30

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

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

    6.8K21
    领券