I want to get service like redis-server
running status by Ansible.
I know how to use Ansible service module to stop or start system service. But how can I get the current service status?
I want to get service like redis-server
running status by Ansible.
I know how to use Ansible service module to stop or start system service. But how can I get the current service status?
Use
command
module withservice redis-server status
and parse stdout.Or use patched service module.
You wouldn't typically do this with Ansible. Ansible should be for declaratively defining how you want a server to look like.
As such you would typically just do something like:
You might do things conditionally like this:
To restart Redis when the configuration has changed but it would be rare to need to check whether a service is running.
In the absolute case that you do need to check whether a service is running (and I would strongly suggest that you think again about your Ansible role/playbook) then you could always shell out:
Personally, I like to have some kind of support Playbooks for getting the status of my services across my environments and to be able to restart them etc.
I'll therefore use on the one side the command module as recommended by Konstantin Suvorov but additionally i'll also check the expected port(s) to ensure that all required ports are up and my service is working as expected. This would look like the following in your case:
The changed_when is just used because the command module will always set changed to true, although it is just a read-only command.
A very short program for checking services using ansible -
You can also use the service_facts module.
Example usage:
Example output:
Just run the task
service: name=httpd state=started
with the option--check
. This tells you, if the service needs to be started, which means that it is down. If the task shows no change, it is up already.Example service is down,
changed
is true, because it needs to be started:Example service is up,
change
is false, because nothings need to be done: