How to install RPM Fusion repository with Ansible on Fedora 32 Server virtual machine?

maxime asked:

I want to install RPM Fusion repository on Fedora 32 Server virtual machine with Ansible

I’ve tried various possibility unsuccessfully¬†:

- name: Enable the RPM Fusion repository
command: dnf install    free-release-$(rpm -E %fedora).noarch.rpm
when: ansible_facts['os_family'] == 'Fedora' and ansible_facts['distribution_major_version'] == '32'


- name: Enable the RPM Fusion repository
    name: '    free-release-$(rpm -E %fedora).noarch.rpm'
    state: present
  when: ansible_facts['os_family'] == 'Fedora' and ansible_facts['distribution_major_version'] == '32'

Every time the task is skipped

TASK [Enable the RPM Fusion repository] *******************************************************************************
skipping: [my-ip-address]

Do you have an idea?


My answer:

Don’t use command to install packages. This has no hope of idempotence and will fail in various and subtle ways.

The reason these are skipped is that the os_family fact is never Fedora. It is set to RedHat on Fedora systems.

You should be checking for the distribution name directly:

when: ansible_distribution == 'Fedora' and ansible_distribution_major_version|int == 32

You’ve got further problems, though, and your dnf play will also fail, because you tried to use a shell substitution and Ansible won’t do anything with that.

Your play should look more like this:

- name: Enable the RPM Fusion repository
    name: "{{ansible_distribution_major_version}}.noarch.rpm"
    state: present
  when: ansible_distribution == 'Fedora'

We’re actually providing the version number via substitution, so it will have "32" instead of a random shell command. And of course in this case there is no need to check the distribution version in when: because the relevant version is already provided in the package name.

View the full question and any other answers on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.