json - 有没有办法将不同的变量与 json 进行比较?
问题描述
我正在尝试比较 linux 服务器上重启前/后运行的服务。但我无法让它输出差异。
我目前拥有的功能将前/后状态输出到磁盘。但我更愿意将输出直接注册为变量
- name: populate service facts
service_facts:
register: facts
- name: Outputting running services
debug: var=item
with_items: "{{ facts|json_query(query)}}"
vars:
query: 'ansible_facts.services.* | [?state == `running`].name'
最终应该是一个看起来类似于
- name: Missing running services
debug:
msg: {{ item }}
with_items:
- {{ facts_pre }}
- {{ facts_post }}
vars:
query: 'ansible_facts.services.* | [?state == `running`].name'
when: facts_pre.ansible_facts.services != facts_post.ansible_facts.services
结果应该类似于重启前显示以下状态
ok: [hostname] => (item=NetworkManager.service) => {
"item": "NetworkManager.service"
}
ok: [hostname] => (item=systemd-udevd.service) => {
"item": "systemd-udevd.service"
}
ok: [hostname] => (item=sshd.service) => {
"item": "sshd.service"
}
ok: [hostname] => (item=systemd-journald.service) => {
"item": "systemd-journald.service"
}
并且由于某种原因,日志在启动过程中失败
ok: [hostname] => (item=NetworkManager.service) => {
"item": "NetworkManager.service"
}
ok: [hostname] => (item=systemd-udevd.service) => {
"item": "systemd-udevd.service"
}
ok: [hostname] => (item=sshd.service) => {
"item": "sshd.service"
}
它会将 systemd-journald.service 注册到它自己的变量中。
解决方案
查询给出了正在运行的服务列表
- service_facts:
- set_fact:
running_services_A: "{{ ansible_facts.services|dict2items|
json_query('[?value.state == `running`].key') }}"
“比较正在运行的服务”使用差异过滤器。例如
- debug:
msg: "Services running at A but not at B
{{ running_services_A|difference(running_services_B) }}"
(未测试)
笔记
- 没有必要注册
service_facts
. 变量ansible_facts.services
是自动创建的。请参阅service_facts。
推荐阅读
- r - 基于 countrycode 和 countryname 的不带分隔符的拆分字符串
- php - 如何配置服务类以使用 BazingaGeocoderBundle 和 Symfony 3.4
- javascript - 如何在 Nodejs 中使用 document.getElementById()
- r - 在 R 中通过分区将数据切割成箱
- python - 如果使用普通的一个热向量而不是嵌入,如何使用 Tensorflow seq2seq.GreedyEmbeddingHelper 第一个参数嵌入?
- php - 没有在 Codeigniter 中获得我想要的下拉列表中的数据
- sql - 我可以在 Oracle SQL 参数中使用 NULL 或 NOT NULL 吗?
- android - Android - 为每个片段提供工具栏
- openedge - 将 ddmmyyy 字符转换为 DATE
- angular - Angular 和 ASP.NET Core 为金融机构开发应用程序