Я хочу установить репозиторий RPM Fusion на виртуальную машину Fedora 32 Server с Ansible
Я безуспешно пробовал разные варианты:
- 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'
или
- 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'
Каждый раз, когда задача пропускается
TASK [Enable the RPM Fusion repository] *******************************************************************************
skipping: [my-ip-address]
У тебя есть идея?
Спасибо!
Не использовать command
для установки пакетов. У этого нет никакой надежды на идемпотентность, и он потерпит неудачу различными и незаметными способами.
Причина их пропускания заключается в том, что os_family
факт никогда Fedora
. Он установлен на RedHat
в системах Fedora.
Вы должны напрямую проверять имя дистрибутива:
when: ansible_distribution == 'Fedora' and ansible_distribution_major_version|int == 32
Однако у вас есть и другие проблемы, и ваш dnf
play также не удастся, потому что вы пытались использовать замену оболочки, и Ansible ничего с этим не сделает.
Ваша игра должна выглядеть примерно так:
- 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'
На самом деле мы предоставляем номер версии посредством подстановки, поэтому вместо случайной команды оболочки в нем будет «32». И, конечно же, в этом случае нет необходимости проверять версию дистрибутива в when:
потому что соответствующая версия уже указана в названии пакета.