json - 有没有办法用json比较不同的变量?

标签 json ansible

我正在尝试比较 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') }}"

“比较正在运行的服务”使用 difference筛选。例如

- debug:
    msg: "Services running at A but not at B
          {{ running_services_A|difference(running_services_B) }}"

(未测试)


注释

  • 无需注册 service_facts 的输出。变量 ansible_facts.services 会自动创建。请参阅service_facts .

关于json - 有没有办法用json比较不同的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57995250/

相关文章:

regex - Ansible:在变量周围放置引号,但前提是引号尚不存在

postgresql - Ansible 创建可以访问所有表的 postgresql 用户?

ansible - 每个主机的 "pause"

php - 来自 json 对象的快速 PUT API

PHP 自定义 session.serialize_handler JSON

ios - 如何为下一个/后一个 UIImageView 创建滑动

javascript - ngRepeat、JSON、angularJS - 不允许重复 - 通过指令中的模板

python - 本地事实(facts.d)和安装模块

email - Ansible 邮件模块不适用于 Office 365

ruby-on-rails - 如何让 Axios 使用 Rails 调用 json 响应?