Ansible dnf模块启用Fedora Copr存储库

时间:2017-03-07 14:37:17

标签: ansible fedora lxd dnf

我想用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模块(或其他)?

2 个答案:

答案 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 == ''

注意:

  • 再次检查您的copr存储库的ID,因为它与用于启用它的简称不同。
  • 我设置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文件中存在一些小的文本差异(例如True1,缺少默认值的键)会导致此任务报告在以下情况下发生更改:该存储库已通过dnf copr启用。

此外,这可能会带来更高的维护开销,因为人们不得不追踪Copr对其.repo文件所做的更改。