Skip to content

Instantly share code, notes, and snippets.

@goldyfruit goldyfruit/pkg.yml
Last active Nov 13, 2019

What would you like to do?
[ansible] Check via the yum module and a registered value if a package is installed or not
- name: Ansible tests playbook
hosts: all
remote_user: root
- name: Check if mariadb-libs-5.5.44-2.el7.centos.x86_64 package is installed
register: pkg
- name: Removing old mariadb-libs package
when: ansible_os_family == 'RedHat' and
pkg.results[0].yumstate == 'installed'

This comment has been minimized.

Copy link

svenXY commented Feb 22, 2017

hi, found this nice snippet, but for me it does not work under all circumstances.

I'm using the oracle-mysql-community repositories and it keeps listing the first found, not the last one.
This always reports as "available", not "installed".

Even trying pkg.results[-1].yumstate == 'installed' does not work.


This comment has been minimized.

Copy link

CrusaderX commented Mar 21, 2017

Hi, you can use this code:

- name: check if "{{ package }}" is installed
    list="{{ package }}"
  register: is_installed

- name: install "{{ package }}" if not exist
    name: "{{ package }}"
    state: latest
  when:  (is_installed.results|length == 1) or (is_installed.results[1].yumstate != 'installed') 

Works for me


This comment has been minimized.

Copy link

beebird commented Jul 12, 2017

This works better:

pkg.results|selectattr("yumstate", "match", "installed")|list|length != 0


This comment has been minimized.

Copy link

bhagya7893 commented Dec 26, 2017

I am using the code suggested by CrusaderX and I am getting the below error:
The error was: error while evaluating conditional ((is_installed.results|length == 1) or (is_installed.results[1].yumstate != 'installed')): list object has no element 1

I am running on Redhat 7.1


This comment has been minimized.

Copy link

ghost commented Mar 28, 2018

disable SELINUX and firewall and try


This comment has been minimized.

Copy link

nccurry commented Jul 16, 2018

@beebird solution is cleanest

- name: Check if rpm is already installed
    list: my-rpm
  # If not installed yum_list.results[*].yumstate != installed
  register: yum_list

- name: Conditionally do next thing
    msg: "Not installed"
  when: yum_list.results | selectattr("yumstate", "match", "installed") | list | length == 0

This comment has been minimized.

Copy link

bhyde commented Apr 6, 2019

the package_facts module maybe better for this.

  - package_facts: {}
  - when: ansible_facts.packages["mysql57-community-release"] is undefined
    - yum:
        state: present
    - yum: {name: mysql-server, state: present}
    - service: {name: mysqld, state: started, enabled: yes}
    - shell: grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}';
      register: result
    - .... etc ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.