我想用Ansible启用Fedora Copr存储库。更具体地说,我想转换此命令:
dnf copr enable ganto/lxd
使用Ansible command
模块我克服了这个问题但是破坏了任务的幂等性(如果再次运行,角色不应该进行任何更改)(changed_when: false
不是一个选项)。
- name: Enable Fedora Copr for LXD
command: "dnf copr enable -y ganto/lxd"
另外,我试过这个:
- name: Install LXD
dnf:
name: "{{ item }}"
state: latest
enablerepo: "xxx"
with_items:
- lxd
- lxd-client
我测试选项enablerepo
的许多变体而没有任何成功。
是否可以使用dnf Ansible模块(或其他)?
答案 0 :(得分:2)
如果您不想要dnf,那么您可以:
- name: Enable Fedora Copr for LXD
command: "dnf copr enable -y ganto/lxd"
creates: /etc/yum.repos.d/_copr_ganto-lxd.repo
仍然必须检查是否启用= 1
cat /etc/yum.repos.d/_copr_ganto-lxd.repo
[ganto-lxd]
name=Copr repo for lxd owned by ganto
baseurl=https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/fedora-$releasever-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/pubkey.gpg
repo_gpgcheck=0
enabled=1
答案 1 :(得分:1)
否,Ansible dnf模块不支持启用Copr存储库。
您可以添加一个任务来测试是否已启用Copr存储库,以保护Copr启用任务。
示例:
shell:
cmd: |
dnf -C repolist enabled -v | grep '^Repo-id' | awk '$3 == "copr:copr.fedorainfracloud.org:ganto:lxd" {print "enabled"}'
warn: no
check_mode: no
changed_when: false
register: lxd_copr
- name: Enable Fedora Copr for LXD
command:
cmd: dnf -y copr enable ganto/lxd
warn: no
when: lxd_copr.stdout == ''
注意:
warn: no
是因为ansible会警告所有dnf
命令(因为如果可能的话,建议使用dnf模块)check_mode: no
,因为即使在--check
模式下也可以安全执行changed_when: false
是因为该命令不会更改系统状态或者,您可以使用yum_repository
Ansible module添加并启用Copr存储库。
示例:
- name: enable copr
yum_repository:
name: "copr:copr.fedorainfracloud.org:{{ item[0] }}:{{ item[1] }}"
file: "_copr:copr.fedorainfracloud.org:{{ item[0] }}:{{ item[1] }}"
description: "{{ item[2] }}"
baseurl: "{{ copr_url }}/results/{{ item[0] }}/{{ item[1] }}/fedora-$releasever-$basearch/"
gpgkey: "{{ copr_url }}/results/{{ item[0] }}/{{ item[1] }}/pubkey.gpg"
gpgcheck: yes
enabled: yes
skip_if_unavailable: yes
vars:
#copr_url: https://copr-be.cloud.fedoraproject.org
copr_url: https://download.copr.fedorainfracloud.org
loop:
- [ganto, lxd, "Copr repo for LXD"]
这近似于dnf copr enable ganto/lxd
调用的效果。但是在生成的.repo
文件中存在一些小的文本差异(例如True
与1
,缺少默认值的键)会导致此任务报告在以下情况下发生更改:该存储库已通过dnf copr
启用。
此外,这可能会带来更高的维护开销,因为人们不得不追踪Copr对其.repo
文件所做的更改。