Ansible: check if a package is installed on a remote system

setevoy

Arseny Zinchenko

Posted on March 10, 2019

Ansible: check if a package is installed on a remote system

Have a self-written letsencrypt role (see the Prometheus: RTFM blog monitoring set up with Ansible – Grafana, Loki, and promtail post).

Before running the Let’s Encrypt client to obtain a new certificate – need to check if NGINX is installed on a remote host.

Let’s use the package_facts module:



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


Enter fullscreen mode Exit fullscreen mode

And add a conditional check with when using the ansible_facts.packages array:



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


Enter fullscreen mode Exit fullscreen mode

Check:



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


Enter fullscreen mode Exit fullscreen mode

Remove NGINX:



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


Enter fullscreen mode Exit fullscreen mode

Run again:



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


Enter fullscreen mode Exit fullscreen mode

Done.

Similar posts

💖 💪 🙅 🚩
setevoy
Arseny Zinchenko

Posted on March 10, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related