Vishwas M.R
Vishwas M.R

Reputation: 1669

Ansible - Execute task based on Linux service status

How can I write an Ansible playbook to start my nginx service only if firewalld.service is in stop state?

Note: Execution being done on a sandbox server. So no issues about firewalld in stop state.

Upvotes: 0

Views: 2251

Answers (2)

Zeitounator
Zeitounator

Reputation: 44615

As already proposed by @Telinov, you can get facts for services and start your own service accordingly:

---
- name: Populate service facts
  service_facts:

- name: start nginx if firewalld.service is stopped
  service:
    name: nginx
    state: started
  when: ansible_facts.services['firewalld.service'].state == 'stopped'

Meanwhile, ansible is about describing state. If you need firewalld stopped and nginx started, it is much easier to just say so:

- name: Make sure firewalld is stopped
  service:
    name: firewalld
    state: stopped

- name: Make sure nginx is started
  service:
    name: nginx
    state: started

You could be even smarter combining the above and open the firewall ports for nginx if it is running.

---
- name: Populate service facts
  service_facts:

- name: Make sure port 80 and 443 are opened if firewall is running
  firewalld:
    port: "{{ port }}/tcp"
    state: enabled
    permanent: true
    immediate: true
  loop:
    - 80
    - 443
  loop_control:
    loop_var: port
  when: ansible_facts.services['firewalld.service'].state == 'running'  

- name: Make sure nginx is started
  service:
    name: nginx
    state: started

Upvotes: 1

Telinov Dmitri
Telinov Dmitri

Reputation: 441

You can check the service status, register a variable, and based on the variable result - start the service.

You can also use the service_facts module to get the service status.

Example:

- name: Populate service facts
  service_facts:
  
- name: start nginx if firewalld.service is stopped
  service:
    name: nginx
    state: started
  when: ansible_facts.services['firewalld.service'].state == 'stopped'

Note: I did not tested that. Modify it accordingly

Upvotes: 1

Related Questions