Ansible: проверка наличия пакета в системе

Автор: | 03/10/2019
 

Имеется «самописная» Ansible роль letsencrypt. (см. Prometheus: мониторинг для RTFM — Grafana, Loki и promtail).

Перед запуском Let’s Encrypt клиента для получения сертификатов — надо проверить, установлен ли в системе NGINX.

Используем модуль package_facts:

...
- name: "Check if NGINX is installed"
  package_facts:
    manager: "auto"
...

И затем условную проверку по массиву ansible_facts.packages:

...
- name: "NGINX test result"
  debug: 
    msg: "NGINX found"
  when: "'nginx' in ansible_facts.packages"

- name: "NGINX test result"
  debug: 
    msg: "NGINX NOT found"
  when: "'nginx' not in ansible_facts.packages"

Проверяем:

...
TASK [test : Check if NGINX is installed] ****
ok: [ssh.dev.rtfm.co.ua]
TASK [test : NGINX test result] ****
ok: [ssh.dev.rtfm.co.ua] => {
"msg": "NGINX found"
}
TASK [test : NGINX test result] ****
skipping: [ssh.dev.rtfm.co.ua]
PLAY RECAP ****
ssh.dev.rtfm.co.ua      : ok=3    changed=0    unreachable=0    failed=0
...

Удаляем NGINX:

root@rtfm-do-dev:~# apt purge nginx

Проверяем ещё раз:

...
TASK [test : Check if NGINX is installed] ****
ok: [ssh.dev.rtfm.co.ua]
TASK [test : NGINX test result] ****
skipping: [ssh.dev.rtfm.co.ua]
TASK [test : NGINX test result] ****
ok: [ssh.dev.rtfm.co.ua] => {
"msg": "NGINX NOT found"
}
PLAY RECAP ****
ssh.dev.rtfm.co.ua      : ok=3    changed=0    unreachable=0    failed=0

Готово.