Json Ansible 2.5模块“;服务“事实”;。如何过滤输出?如何才能得到结果不是所有的服务,只有一些服务或一个服务?

Json Ansible 2.5模块“;服务“事实”;。如何过滤输出?如何才能得到结果不是所有的服务,只有一些服务或一个服务?,json,ansible,Json,Ansible,如果我们使用“服务事实”模块,我们将如何获得所有正在运行的服务。 输出结果以JSON格式输出,如下所示(这是结果的一部分) 我是Ansible的新手 如何在Ansible中正确过滤输出?我同意,这个模块创建了一个元素的单一关联数组[]=>array(),这使得在Ansible中很难处理,如果它注入的[services]元素是一个列表就更好了 无论如何,这里有一个剧本,它将为您将服务拆分为运行列表变量和未运行列表变量(state!=“running”) 在本文中,您可能还会对筛选出停止/运行的服务

如果我们使用“服务事实”模块,我们将如何获得所有正在运行的服务。 输出结果以JSON格式输出,如下所示(这是结果的一部分)

我是Ansible的新手


如何在Ansible中正确过滤输出?

我同意,这个模块创建了一个元素的单一关联数组[]=>array(),这使得在Ansible中很难处理,如果它注入的[services]元素是一个列表就更好了

无论如何,这里有一个剧本,它将为您将服务拆分为运行列表变量和未运行列表变量(state!=“running”)


在本文中,您可能还会对筛选出停止/运行的服务并将其分配给单独的变量感兴趣:

{    
    "ansible_facts.services": {
        "rsyslog": {
            "name": "rsyslog",
            "source": "sysv",
            "state": "running"
        },
        "rsyslog.service": {
            "name": "rsyslog.service",
            "source": "systemd",
            "state": "running"
        },
        "sendsigs.service": {
            "name": "sendsigs.service",
            "source": "systemd",
            "state": "stopped"
        }      
    }  
}
---
- hosts: localhost
  gather_facts: no
  vars:
    newline_character: "\n"
    services_running: []
    services_NOT_running: []
  tasks:
  - name: populate service facts
    service_facts:

  - name: populate running services
    set_fact:
      services_running: "{{ services_running + [item] }}"
    when: hostvars[inventory_hostname]['services']['{{item}}']['state'] == "running"
    with_items: "{{ hostvars[inventory_hostname]['services'].keys() }}"

  - name: populate NOT running services
    set_fact:
      services_NOT_running: "{{ services_NOT_running + [item] }}"
    when: hostvars[inventory_hostname]['services']['{{item}}']['state'] != "running"
    with_items: "{{ hostvars[inventory_hostname]['services'].keys() }}"

  - debug:
      msg: "running services: {{ services_running }}"

  - debug:
      msg: "NOT running services: {{ services_NOT_running }}"