如何为service_facts声明变量

问题描述 投票:0回答:2

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

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

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

我需要在任务下面的变量部分下声明“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']

variables module ansible
2个回答
1
投票

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

  - 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'

0
投票

回答你的主要问题:

vars
需要一个字典,而不是一个列表:

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

    - debug:
        msg: "{{ services[SERVICE]['status'] }}"

此外,您需要使用

debug:msg
,正如其他人已经提到的那样。

© www.soinside.com 2019 - 2024. All rights reserved.