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 https://download1.rpmfusion.org/free/fedora/rpmfusion-    free-release-$(rpm -E %fedora).noarch.rpm
when: ansible_facts['os_family'] == 'Fedora' and ansible_facts['distribution_major_version'] == '32'

or

- name: Enable the RPM Fusion repository
  dnf:
    name: 'https://download1.rpmfusion.org/free/fedora/rpmfusion-    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?

Thanks!

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
  dnf:
    name: "https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-{{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.