我想使用 Ansible 在 Fedora 32 Server 虚拟机上安装 RPM Fusion 存储库
我尝试过各种可能性,但都没有成功:
- 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]
你有好主意吗?
谢谢!
答案1
不要使用它command
来安装软件包。这没有幂等性,并且会以各种微妙的方式失败。
跳过这些的原因是os_family
事实从来都不是。在 Fedora 系统上Fedora
它被设置为。RedHat
您应该直接检查分发名称:
when: ansible_distribution == 'Fedora' and ansible_distribution_major_version|int == 32
但是,您还遇到了更多问题,并且您的dnf
操作也会失败,因为您尝试使用 shell 替换,而 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”而不是随机的 shell 命令。当然,在这种情况下,无需签入发行版本,when:
因为相关版本已在软件包名称中提供。