【发布时间】:2021-02-19 04:23:05
【问题描述】:
使用 Ansible,我想替换 json 文件中的字符串。似乎 Ansible 没有类似 xml 用于 json 的模块,我使用的是 jq cli tool。由于需要在底层应用程序中重新启动(这需要一些时间,因为它是一个沉重且旧的 Java 应用程序),我想要进行更改检测,以便仅在需要时应用重新启动。
带有-e 参数的返回码不会改变,所以我的想法是在jq 运行之前获取文件的哈希值,然后将其与之后的哈希值进行比较。可以使用stat 模块来获取哈希:
- set_fact:
common_properties_file: "{{ resources_dir }}/commonProperties.json"
- name: Get hash of {{ common_properties_file }}
stat: path={{ common_properties_file }}
register: coomon_properties_check
- name: Hash before modification
debug:
var: coomon_properties_check.stat.checksum
但是在测试过程中,我发现在不做任何修改的情况下打印文件时哈希甚至会发生变化。差异显示整个文件被不同的缩进修改:
# jq '.' resources/commonProperties.json > resources/commonProperties.json_jq
# colordiff resources/commonProperties.json resources/commonProperties.json_jq
2,14c2,10
< "name": "Notification mail customization",
< "type": "com.ibm.connections.notification.mail",
< "payload": {
< "platformName": "HCL Connections",
< "photoType":"url",
< "style": {
< "bodyBackgroundColor": "#eeeeee",
< "sidebarBackgroundColor": "#3d6cf0",
< "messageBackgroundColor": "#ffffff"
< },
< "activityDateFormat": "dd MMM",
< "activityMax" : "25",
< "subjectAppNameAppend" : "tail"
---
> "name": "Notification mail customization",
> "type": "com.ibm.connections.notification.mail",
> "payload": {
> "platformName": "HCL Connections",
> "photoType": "url",
> "style": {
> "bodyBackgroundColor": "#eeeeee",
> "sidebarBackgroundColor": "#3d6cf0",
> "messageBackgroundColor": "#ffffff"
16c12,16
< "path": "notify"
---
> "activityDateFormat": "dd MMM",
> "activityMax": "25",
> "subjectAppNameAppend": "tail"
> },
> "path": "notify"
我也试过jq --tab,但没有成功。我看到的唯一方法是编写一个小型 Ansible 模块,将 json 解析为数组,检查是否需要应用修改并设置更改的状态,以便我可以使用它们来决定是否需要重新启动。
是否有无需为此目的编写 Ansible 模块的本地方式?
【问题讨论】: