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

Автор: | 10/03/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"

Проверяем:

[simterm]

...
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 
...

[/simterm]

Удаляем NGINX:

[simterm]

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

[/simterm]

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

[simterm]

...
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

[/simterm]

Готово.