下面是我用来使用 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']
您可以使用条件运行一些任务,例如:
- 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'
回答你的主要问题:
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
,正如其他人已经提到的那样。