You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Ansible scan_services/service_facts模块输出中筛选运行中服务?

如何从Ansible的service_facts模块输出中筛选运行状态的服务

嘿,我来帮你搞定这个需求!在Ansible 2.5及以上版本,**service_facts**是官方推荐用来收集系统服务信息的模块(替代了旧的scan_services),它会把服务数据存放在ansible_facts.services字典里。下面给你两种实用的方法来筛选出处于running状态的服务:

方法1:使用Jinja2原生过滤器(无需额外依赖)

这种方法用Ansible内置的Jinja2过滤器处理,不需要安装额外工具,兼容性最好。

首先收集服务事实,再通过过滤器筛选:

- name: 收集并筛选运行中的服务
  hosts: your_target_hosts
  tasks:
    - name: 获取所有服务状态
      ansible.builtin.service_facts:

    - name: 输出所有运行中服务的完整信息
      ansible.builtin.debug:
        msg: "{{ ansible_facts.services | dict2items | selectattr('value.state', 'equalto', 'running') | list }}"

    - name: 仅输出运行中服务的名称(更简洁)
      ansible.builtin.debug:
        msg: "{{ ansible_facts.services | dict2items | selectattr('value.state', 'equalto', 'running') | map(attribute='key') | list }}"

过滤器说明:

  • dict2items:把services字典转换成键值对列表(每个元素是{key: 服务名, value: 服务详情}的结构)
  • selectattr('value.state', 'equalto', 'running'):筛选出value.state等于running的项
  • map(attribute='key'):如果只需要服务名称,用这个提取每个项的key(即服务名)
  • list:把筛选后的结果转换成列表格式

方法2:使用json_query(更简洁,需依赖jmespath)

如果你偏好更简洁的语法,可以用json_query,但需要在控制节点安装jmespath库(执行pip install jmespath即可)。

示例代码:

- name: 用json_query筛选运行中服务
  hosts: your_target_hosts
  tasks:
    - name: 获取所有服务状态
      ansible.builtin.service_facts:

    - name: 输出运行中服务的完整信息
      ansible.builtin.debug:
        msg: "{{ ansible_facts.services | json_query('* | [?state == `running`]') }}"

    - name: 仅输出运行中服务的名称
      ansible.builtin.debug:
        msg: "{{ ansible_facts.services | json_query('* | [?state == `running`].name') }}"

json_query语法说明:

  • *:遍历services字典的所有值(即每个服务的详情)
  • [?state == running]:筛选出state字段等于running的服务
  • .name:提取筛选结果中的name字段(即服务名)

关于旧的scan_services模块

如果你还在使用旧的scan_services模块,输出结构和service_facts基本一致,只需把模块名替换成scan_services,上面的筛选方法完全适用。

内容的提问来源于stack exchange,提问作者stevansv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:30:00