Je souhaite un service tel que redis-server
en cours d’exécution par Ansible.
Je sais comment utiliser le module de service Ansible pour arrêter ou démarrer le service système. Mais comment puis-je obtenir l'état actuel du service?
Utilisez le module command
avec service redis-server status
et analysez stdout.
Ou utilisez patché module de service.
Vous pouvez également utiliser le module service_facts .
Exemple d'utilisation:
- name: collect facts about system services
service_facts:
register: services_state
- name: Debug
debug:
var: services_state
Exemple de sortie:
...
TASK [Debug] ***************************************************************************************************************************************************************************************************************
ok: [local] => {
"services_state": {
"ansible_facts": {
"services": {
"cloud-init-local.service": {
"name": "cloud-init-local.service",
"source": "systemd",
"state": "stopped"
},
"firewalld.service": {
"name": "firewalld.service",
"source": "systemd",
"state": "stopped"
},
...
}
}
}
}
Personnellement, j'aime avoir une sorte de Playbooks de support pour connaître l'état de mes services dans mes environnements et pouvoir les redémarrer, etc.
J'utiliserai donc d'un côté le module de commande recommandé par Konstantin Suvorov mais je vérifierai également le ou les ports prévus pour m'assurer que tous les ports requis sont activés et que mon service fonctionne comme prévu. Cela ressemblerait à ce qui suit dans votre cas:
- name: verify redis-server service
command: /usr/sbin/sservice redis-server status
changed_when: false
- name: verify redis-server is listening on 6379
wait_for: port=6379 timeout=1
Hangile_when est simplement utilisé car le module de commande définira toujours le paramètre changé sur true, bien qu'il ne s'agisse que d'une commande en lecture seule.
Il suffit d’exécuter la tâche service: name=httpd state=started
avec l’option --check
. Cela vous indique si le service doit être démarré, ce qui signifie qu'il est en panne. Si la tâche n'indique aucun changement, c'est déjà le cas.
Exemple de service en panne, changed
est vrai, car il doit être démarré:
$ ansible -m service -a 'name=rpc/bind state=started' --check Host
host | SUCCESS => {
"changed": true,
"msg": "service state changed"
}
Exemple de service est en place, change
est false, car rien n'est à faire:
$ ansible -m service -a 'name=system-log state=started' --check Host
host | SUCCESS => {
"changed": false,
"name": "system-log",
"state": "started"
}
vous pouvez le faire par commande AD-HOC ansible:
$ansible all -m Shell -a "service redis-server status"
Vous ne feriez généralement pas cela avec Ansible. Ansible devrait être pour définir de manière déclarative comment vous voulez un serveur.
En tant que tel, vous feriez typiquement quelque chose comme:
- name: start redis
service:
name=redis-server
state=started
enabled=yes
Vous pourriez faire des choses conditionnellement comme ceci:
- name: restart redis
service:
name=redis-server
state=restarted
enabled=yes
when: redis_config.changed
Redémarrer Redis lorsque la configuration a changé, mais il serait rare de devoir vérifier si un service est en cours d'exécution.
Dans le cas absolu où vous devez vérifier si un service est en cours d'exécution (et je vous suggère fortement de repenser à votre rôle/livre de jeu Ansible), vous pouvez toujours utiliser Shell:
- name: check redis status
Shell: service redis-service status