11

我想用 Ansible 启用 Fedora Copr 存储库。更具体地说,我想转换此命令:

dnf copr enable ganto/lxd

使用 Ansiblecommand模块,我克服了这个问题,但打破了任务的幂等性(如果再次运行,角色不应进行任何更改)(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 模块(或其他模块)?

4

3 回答 3

8

您可以使用creates使您的命令具有幂等性;如果.repo文件已经存在,那么任务将不会运行:

- name: Enable Fedora Copr for LXD
  command:
      cmd: dnf copr enable -y ganto/lxd
      creates: /etc/yum.repos.d/_copr_ganto-lxd.repo

(您必须enabled=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
于 2017-09-03T13:44:31.190 回答
2

多亏了https://docs.ansible.com/ansible/latest/collections/community/general/copr_module.html

原始片段使用command

- name: Enable Fedora Copr for LXD
  command: "dnf copr enable -y ganto/lxd"

可以改为

- name: Enable Fedora Copr for LXD
  community.general.copr:
    name: ganto/lxd
于 2021-10-13T13:50:09.600 回答
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 == ''

笔记:

  • 仔细检查您的 copr 存储库的 ID,因为它与您用于启用它的短名称不同
  • 我设置warn: no是因为 ansible 警告所有dnf命令(因为它建议使用 dnf 模块,如果可能的话)
  • 我设置check_mode: no了,因为即使在--check模式下也可以安全地执行它
  • 我设置changed_when: false是因为该命令不会改变系统状态

yum_repository或者,您可以使用Ansible 模块添加和启用 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(例如,True1,缺少默认值的键),如果例如存储库已经启用了,则会导致此任务报告更改dnf copr

此外,这可以说具有更高的维护开销,因为必须跟踪 Copr 对其.repo文件引入的更改。

于 2020-03-28T20:50:51.843 回答