首页 > 解决方案 > 如何为 service_facts 声明一个变量

问题描述

下面是我使用 service_facts 模块检查服务状态的示例 ansible playbook,它运行良好。在这里我需要支持将服务名称定义为变量,但是当我定义它时给出错误,VARIABLE NOT DEFINED:

---
- name: Check service status
  hosts: all
  gather_facts: no
  tasks:
    - name: Service Facts
      service_facts:

    - debug:
        var: ansible_facts.services['firewalld.service']['status']

我需要在任务下方的 vars 部分下声明“firewalld.service”,尝试了各种选项,但没有给出预期的输出。我尝试了以下选项,但它不起作用。

---
- name: Check service status
  hosts: all
  gather_facts: no
  vars:
    - SERVICE: firewalld.service
  tasks:
    - name: Service Facts
      service_facts:

    - debug:
        var: ansible_facts.services[SERVICE]['status']

标签: variablesmoduleansible

解决方案


您可以使用条件运行一些任务,例如:

    - name: Get service_facts
    service_facts:

    - name: Open some port
    firewalld:
        port: "{{ some_port }}/tcp"
        permanent: yes
        immediate: yes
        offline: no
        state: enabled
    when: 
        - ansible_facts.services['firewalld.service'].state == 'running'
        - ansible_facts.services['firewalld.service'].status == 'enabled'

推荐阅读