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