【问题标题】:Ansible dnf module enable Fedora Copr repositoryAnsible dnf 模块启用 Fedora Copr 存储库
【发布时间】:2017-07-27 19:44:00
【问题描述】:

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

【问题讨论】:

  • dnf 模块应该是幂等的

标签: ansible fedora lxd dnf


【解决方案1】:

感谢https://docs.ansible.com/ansible/latest/collections/community/general/copr_module.html,现在可以实现了

原来的sn-p使用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

【讨论】:

    【解决方案2】:

    不,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 文件的更改。

    【讨论】:

      【解决方案3】:

      您可以使用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
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多