1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-06-10 18:15:39 +00:00
This commit is contained in:
Maksym Hazevych 2026-06-10 12:05:51 +00:00 committed by GitHub
commit 8eb4e01e23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 1211 additions and 396 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- dnf_config_manager - fix incompatibility with DNF5. The module was crashing on systems with DNF5 due to CLI changes since DNF4 (https://github.com/ansible-collections/community.general/issues/9127).

View file

@ -125,12 +125,27 @@ import re
from ansible.module_utils.basic import AnsibleModule
DNF_BIN = "/usr/bin/dnf"
REPO_ID_RE = re.compile(r"^Repo-id\s*:\s*(\S+)$")
REPO_STATUS_RE = re.compile(r"^Repo-status\s*:\s*(disabled|enabled)$")
REPO_ID_RE = re.compile(r"^Repo[-\s]id\s*:\s*(\S+)$", re.IGNORECASE)
REPO_STATUS_RE = re.compile(r"^(?:Repo-)?status\s*:\s*(disabled|enabled)$", re.IGNORECASE)
def get_repo_states(module):
rc, out, err = module.run_command([DNF_BIN, "repolist", "--all", "--verbose"], check_rc=True)
def get_dnf_version(module) -> 4 | 5:
rc, out, err = module.run_command([DNF_BIN, "--version"], check_rc=True)
line, separator, rest = out.partition("\n")
if re.compile(r"^dnf5\s*").match(line):
return 5
else:
return 4
def get_repo_states(module, dnf_v):
command = [DNF_BIN]
if dnf_v == 4:
command.extend(["repolist", "--all", "--verbose"])
else:
command.extend(["repo", "info", "--all"])
rc, out, err = module.run_command(command, check_rc=True)
repos = dict()
last_repo = ""
@ -150,8 +165,13 @@ def get_repo_states(module):
return repos
def set_repo_states(module, repo_ids, state):
module.run_command([DNF_BIN, "config-manager", "--assumeyes", f"--set-{state}"] + repo_ids, check_rc=True)
def set_repo_states(module, dnf_v, repo_ids, state):
if dnf_v == 4:
module.run_command([DNF_BIN, "config-manager", "--assumeyes", f"--set-{state}"] + repo_ids, check_rc=True)
else:
state = "1" if state == "enabled" else "0"
opts = map(lambda v: f"{v}.enabled={state}", repo_ids)
module.run_command([DNF_BIN, "config-manager", "setopt"] + list(opts), check_rc=True)
def pack_repo_states_for_return(states):
@ -184,7 +204,9 @@ def main():
if not os.path.exists(DNF_BIN):
module.fail_json(msg=f"{DNF_BIN} was not found")
repo_states = get_repo_states(module)
dnf_v = get_dnf_version(module)
repo_states = get_repo_states(module, dnf_v)
result["repo_states_pre"] = pack_repo_states_for_return(repo_states)
desired_repo_state = module.params["state"]
@ -203,9 +225,9 @@ def main():
module.exit_json(**result)
if len(to_change) > 0:
set_repo_states(module, to_change, desired_repo_state)
set_repo_states(module, dnf_v, to_change, desired_repo_state)
repo_states_post = get_repo_states(module)
repo_states_post = get_repo_states(module, dnf_v)
result["repo_states_post"] = pack_repo_states_for_return(repo_states_post)
for repo_id in to_change:

View file

@ -0,0 +1,13 @@
Repo-id : appstream-debuginfo
Repo-name : AlmaLinux 9 - AppStream - Debug
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-source
Repo-name : AlmaLinux 9 - AppStream - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo

View file

@ -0,0 +1,3 @@
Repo-id : appstream-debuginfo
Repo-status : disabled
Repo-status : disabled

View file

@ -0,0 +1,99 @@
Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install
DNF version: 4.14.0
cachedir: /var/cache/dnf
Last metadata expiration check: 1:20:49 ago on Fri 22 Dec 2023 06:05:13 PM UTC.
Repo-id : appstream
Repo-name : AlmaLinux 9 - AppStream
Repo-status : enabled
Repo-revision : 1703240474
Repo-updated : Fri 22 Dec 2023 10:21:14 AM UTC
Repo-pkgs : 5,897
Repo-available-pkgs: 5,728
Repo-size : 9.5 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/AppStream/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-debuginfo
Repo-name : AlmaLinux 9 - AppStream - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-source
Repo-name : AlmaLinux 9 - AppStream - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : baseos
Repo-name : AlmaLinux 9 - BaseOS
Repo-status : enabled
Repo-revision : 1703240561
Repo-updated : Fri 22 Dec 2023 10:22:41 AM UTC
Repo-pkgs : 1,244
Repo-available-pkgs: 1,244
Repo-size : 1.3 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/BaseOS/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-debuginfo
Repo-name : AlmaLinux 9 - BaseOS - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-source
Repo-name : AlmaLinux 9 - BaseOS - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh
Repo-name : Copr repo for dracut-crypt-ssh owned by uriesk
Repo-status : enabled
Repo-revision : 1698291016
Repo-updated : Thu 26 Oct 2023 03:30:16 AM UTC
Repo-pkgs : 4
Repo-available-pkgs: 4
Repo-size : 102 k
Repo-baseurl : https://download.copr.fedorainfracloud.org/results/uriesk/dracut-crypt-ssh/epel-9-x86_64/
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:10 PM UTC)
Repo-filename : /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh.repo
Repo-id : crb
Repo-name : AlmaLinux 9 - CRB
Repo-status : disabled
Repo-revision : 1703240590
Repo-updated : Fri 22 Dec 2023 10:23:10 AM UTC
Repo-pkgs : 1,730
Repo-available-pkgs: 1,727
Repo-size : 13 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/crb
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/CRB/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-crb.repo
Repo-id : rpmfusion-nonfree-updates
Repo-name : RPM Fusion for EL 9 - Nonfree - Updates
Repo-status : enabled
Repo-revision : 1703248251
Repo-tags : binary-x86_64
Repo-updated : Fri 22 Dec 2023 12:30:53 PM UTC
Repo-pkgs : 65
Repo-available-pkgs: 65
Repo-size : 944 M
Repo-metalink : http://mirrors.rpmfusion.org/metalink?repo=nonfree-el-updates-released-9&arch=x86_64
Updated : Fri 22 Dec 2023 06:05:13 PM UTC
Repo-baseurl : http://uvermont.mm.fcix.net/rpmfusion/nonfree/el/updates/9/x86_64/ (33 more)
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:13 PM UTC)
Repo-filename : /etc/yum.repos.d/rpmfusion-nonfree-updates.repo
Total packages: 28,170

View file

@ -0,0 +1,99 @@
Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install
DNF version: 4.14.0
cachedir: /var/cache/dnf
Last metadata expiration check: 1:20:49 ago on Fri 22 Dec 2023 06:05:13 PM UTC.
Repo-id : appstream
Repo-name : AlmaLinux 9 - AppStream
Repo-status : enabled
Repo-revision : 1703240474
Repo-updated : Fri 22 Dec 2023 10:21:14 AM UTC
Repo-pkgs : 5,897
Repo-available-pkgs: 5,728
Repo-size : 9.5 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/AppStream/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-debuginfo
Repo-name : AlmaLinux 9 - AppStream - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-source
Repo-name : AlmaLinux 9 - AppStream - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : baseos
Repo-name : AlmaLinux 9 - BaseOS
Repo-status : enabled
Repo-revision : 1703240561
Repo-updated : Fri 22 Dec 2023 10:22:41 AM UTC
Repo-pkgs : 1,244
Repo-available-pkgs: 1,244
Repo-size : 1.3 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/BaseOS/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-debuginfo
Repo-name : AlmaLinux 9 - BaseOS - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-source
Repo-name : AlmaLinux 9 - BaseOS - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh
Repo-name : Copr repo for dracut-crypt-ssh owned by uriesk
Repo-status : enabled
Repo-revision : 1698291016
Repo-updated : Thu 26 Oct 2023 03:30:16 AM UTC
Repo-pkgs : 4
Repo-available-pkgs: 4
Repo-size : 102 k
Repo-baseurl : https://download.copr.fedorainfracloud.org/results/uriesk/dracut-crypt-ssh/epel-9-x86_64/
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:10 PM UTC)
Repo-filename : /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh.repo
Repo-id : crb
Repo-name : AlmaLinux 9 - CRB
Repo-status : enabled
Repo-revision : 1703240590
Repo-updated : Fri 22 Dec 2023 10:23:10 AM UTC
Repo-pkgs : 1,730
Repo-available-pkgs: 1,727
Repo-size : 13 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/crb
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/CRB/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-crb.repo
Repo-id : rpmfusion-nonfree-updates
Repo-name : RPM Fusion for EL 9 - Nonfree - Updates
Repo-status : enabled
Repo-revision : 1703248251
Repo-tags : binary-x86_64
Repo-updated : Fri 22 Dec 2023 12:30:53 PM UTC
Repo-pkgs : 65
Repo-available-pkgs: 65
Repo-size : 944 M
Repo-metalink : http://mirrors.rpmfusion.org/metalink?repo=nonfree-el-updates-released-9&arch=x86_64
Updated : Fri 22 Dec 2023 06:05:13 PM UTC
Repo-baseurl : http://uvermont.mm.fcix.net/rpmfusion/nonfree/el/updates/9/x86_64/ (33 more)
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:13 PM UTC)
Repo-filename : /etc/yum.repos.d/rpmfusion-nonfree-updates.repo
Total packages: 28,170

View file

@ -0,0 +1,6 @@
4.23.0
Installed: dnf-0:4.23.0-1.fc40.1.noarch at Tue May 13 07:48:45 2025
Built : Fedora Project at Fri Apr 11 12:21:43 2025
Installed: rpm-0:4.19.1.1-1.fc40.x86_64 at Tue May 13 07:48:45 2025
Built : Fedora Project at Wed Feb 7 15:55:53 2024

View file

@ -0,0 +1,299 @@
Repo ID : copr:copr.fedorainfracloud.org:phracek:PyCharm
Name : Copr repo for PyCharm owned by phracek
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 172800 seconds (last: unknown)
Skip if unavailable : true
Config file : /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:phracek:PyCharm.repo
URLs :
Base URL : https://download.copr.fedorainfracloud.org/results/phracek/PyCharm/fedora-44-x86_64/
OpenPGP :
Keys : https://download.copr.fedorainfracloud.org/results/phracek/PyCharm/pubkey.gpg
Verify repodata : false
Verify packages : true
Repo ID : fedora
Name : Fedora 44 - x86_64
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 604800 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora.repo
URLs :
Base URL : https://distrohub.kyiv.ua/fedora/fedora/linux/releases/44/Everything/x86_64/os/ (103 more)
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 76354
Total packages : 76354
Size : 113.1 GiB
Revision : 1776864872
Updated : 2026-04-22 13:34:32
Repo ID : fedora-cisco-openh264
Name : Fedora 44 openh264 (From Cisco) - x86_64
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 1209600 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : true
Config file : /etc/yum.repos.d/fedora-cisco-openh264.repo
URLs :
Base URL : https://codecs.fedoraproject.org/openh264/44/x86_64/ (1 more)
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-cisco-openh264-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 3
Total packages : 3
Size : 901.3 KiB
Revision : 1774348624
Updated : 2026-03-24 10:37:04
Repo ID : fedora-cisco-openh264-debuginfo
Name : Fedora 44 openh264 (From Cisco) - x86_64 - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 1209600 seconds (last: unknown)
Skip if unavailable : true
Config file : /etc/yum.repos.d/fedora-cisco-openh264.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-cisco-openh264-debug-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : fedora-cisco-openh264-source
Name : Fedora 44 openh264 (From Cisco) - x86_64 - Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 1209600 seconds (last: unknown)
Skip if unavailable : true
Config file : /etc/yum.repos.d/fedora-cisco-openh264.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-cisco-openh264-source-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : fedora-debuginfo
Name : Fedora 44 - x86_64 - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 604800 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-debug-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : fedora-source
Name : Fedora 44 - Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 604800 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-source-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : google-chrome
Name : google-chrome
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 172800 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : true
Config file : /etc/yum.repos.d/google-chrome.repo
URLs :
Base URL : https://dl.google.com/linux/chrome/rpm/stable/x86_64
OpenPGP :
Keys : https://dl.google.com/linux/linux_signing_key.pub
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 4
Total packages : 4
Size : 519.9 MiB
Revision : 1780771125
Updated : 2026-06-06 18:38:45
Repo ID : rawhide
Name : Fedora - Rawhide - Developmental packages for the next Fedora release
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-rawhide.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-rawhide-x86_64 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-x86_64
Verify repodata : false
Verify packages : true
Repo ID : rawhide-debuginfo
Name : Fedora - Rawhide - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-rawhide.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=rawhide-debug&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-rawhide-x86_64 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-x86_64
Verify repodata : false
Verify packages : true
Repo ID : rawhide-source
Name : Fedora - Rawhide - Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-rawhide.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=rawhide-source&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-rawhide-x86_64 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates
Name : Fedora 44 - x86_64 - Updates
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: 2026-06-08 23:37:59)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates.repo
URLs :
Base URL : https://distrohub.kyiv.ua/fedora/fedora/linux/updates/44/Everything/x86_64/ (30 more)
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-released-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 17879
Total packages : 17879
Size : 42.9 GiB
Revision : 1780878040
Updated : 2026-06-08 01:19:51
Repo ID : updates-debuginfo
Name : Fedora 44 - x86_64 - Updates - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-source
Name : Fedora 44 - Updates Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-released-source-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-testing
Name : Fedora 44 - x86_64 - Test Updates
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates-testing.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-testing-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-testing-debuginfo
Name : Fedora 44 - x86_64 - Test Updates Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates-testing.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-testing-debug-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-testing-source
Name : Fedora 44 - Test Updates Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates-testing.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-testing-source-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true

View file

@ -0,0 +1,304 @@
Repo ID : copr:copr.fedorainfracloud.org:phracek:PyCharm
Name : Copr repo for PyCharm owned by phracek
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 172800 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : true
Config file : /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:phracek:PyCharm.repo
URLs :
Base URL : https://download.copr.fedorainfracloud.org/results/phracek/PyCharm/fedora-44-x86_64/
OpenPGP :
Keys : https://download.copr.fedorainfracloud.org/results/phracek/PyCharm/pubkey.gpg
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 5
Total packages : 5
Size : 1.8 GiB
Revision : 1771912250
Updated : 2026-02-24 05:51:20
Repo ID : fedora
Name : Fedora 44 - x86_64
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 604800 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora.repo
URLs :
Base URL : https://distrohub.kyiv.ua/fedora/fedora/linux/releases/44/Everything/x86_64/os/ (103 more)
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 76354
Total packages : 76354
Size : 113.1 GiB
Revision : 1776864872
Updated : 2026-04-22 13:34:32
Repo ID : fedora-cisco-openh264
Name : Fedora 44 openh264 (From Cisco) - x86_64
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 1209600 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : true
Config file : /etc/yum.repos.d/fedora-cisco-openh264.repo
URLs :
Base URL : https://codecs.fedoraproject.org/openh264/44/x86_64/ (1 more)
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-cisco-openh264-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 3
Total packages : 3
Size : 901.3 KiB
Revision : 1774348624
Updated : 2026-03-24 10:37:04
Repo ID : fedora-cisco-openh264-debuginfo
Name : Fedora 44 openh264 (From Cisco) - x86_64 - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 1209600 seconds (last: unknown)
Skip if unavailable : true
Config file : /etc/yum.repos.d/fedora-cisco-openh264.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-cisco-openh264-debug-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : fedora-cisco-openh264-source
Name : Fedora 44 openh264 (From Cisco) - x86_64 - Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 1209600 seconds (last: unknown)
Skip if unavailable : true
Config file : /etc/yum.repos.d/fedora-cisco-openh264.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-cisco-openh264-source-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : fedora-debuginfo
Name : Fedora 44 - x86_64 - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 604800 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-debug-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : fedora-source
Name : Fedora 44 - Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 604800 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=fedora-source-44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : google-chrome
Name : google-chrome
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 172800 seconds (last: 2026-06-08 03:33:15)
Skip if unavailable : true
Config file : /etc/yum.repos.d/google-chrome.repo
URLs :
Base URL : https://dl.google.com/linux/chrome/rpm/stable/x86_64
OpenPGP :
Keys : https://dl.google.com/linux/linux_signing_key.pub
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 4
Total packages : 4
Size : 519.9 MiB
Revision : 1780771125
Updated : 2026-06-06 18:38:45
Repo ID : rawhide
Name : Fedora - Rawhide - Developmental packages for the next Fedora release
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-rawhide.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-rawhide-x86_64 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-x86_64
Verify repodata : false
Verify packages : true
Repo ID : rawhide-debuginfo
Name : Fedora - Rawhide - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-rawhide.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=rawhide-debug&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-rawhide-x86_64 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-x86_64
Verify repodata : false
Verify packages : true
Repo ID : rawhide-source
Name : Fedora - Rawhide - Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-rawhide.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=rawhide-source&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-rawhide-x86_64 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates
Name : Fedora 44 - x86_64 - Updates
Status : enabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: 2026-06-08 23:37:59)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates.repo
URLs :
Base URL : https://distrohub.kyiv.ua/fedora/fedora/linux/updates/44/Everything/x86_64/ (30 more)
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-released-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repodata info :
Available packages : 17879
Total packages : 17879
Size : 42.9 GiB
Revision : 1780878040
Updated : 2026-06-08 01:19:51
Repo ID : updates-debuginfo
Name : Fedora 44 - x86_64 - Updates - Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-source
Name : Fedora 44 - Updates Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-released-source-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-testing
Name : Fedora 44 - x86_64 - Test Updates
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates-testing.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-testing-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-testing-debuginfo
Name : Fedora 44 - x86_64 - Test Updates Debug
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates-testing.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-testing-debug-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true
Repo ID : updates-testing-source
Name : Fedora 44 - Test Updates Source
Status : disabled
Priority : 99
Cost : 1000
Type : available
Metadata expire : 21600 seconds (last: unknown)
Skip if unavailable : false
Config file : /etc/yum.repos.d/fedora-updates-testing.repo
URLs :
Metalink : https://mirrors.fedoraproject.org/metalink?repo=updates-testing-source-f44&arch=x86_64
OpenPGP :
Keys : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-44-x86_64
Verify repodata : false
Verify packages : true

View file

@ -0,0 +1,46 @@
dnf5 version 5.4.2.1
dnf5 plugin API version 2.0
libdnf5 version 5.4.2.1
libdnf5 plugin API version 2.2
Loaded dnf5 plugins:
name: builddep
version: 1.0.0
API version: 2.0
name: changelog
version: 1.0.0
API version: 2.0
name: config-manager
version: 0.1.0
API version: 2.0
name: copr
version: 0.1.0
API version: 2.0
name: needs_restarting
version: 1.0.0
API version: 2.0
name: repoclosure
version: 1.0.0
API version: 2.0
name: repomanage
version: 1.0.0
API version: 2.0
name: reposync
version: 1.0.0
API version: 2.0
Loaded libdnf5 plugins:
name: appstream
version: 1.0.0
API version: 2.0
name: expired-pgp-keys
version: 1.0.0
API version: 2.1

View file

@ -0,0 +1,309 @@
# Copyright (c) 2023, Andrew Hyatt <andy@hyatt.xyz>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import annotations
import os
from unittest.mock import call, patch
from ansible_collections.community.internal_test_tools.tests.unit.plugins.modules.utils import (
AnsibleExitJson,
AnsibleFailJson,
ModuleTestCase,
set_module_args,
)
from ansible_collections.community.general.plugins.modules import dnf_config_manager as dnf_config_manager_module
def fixture(name: str) -> str:
path = os.path.join(os.path.dirname(__file__), "fixtures", name)
with open(path, "r") as file:
return file.read()
expected_states_enabled_repo_dnf4 = {
"disabled": ["appstream-debuginfo", "appstream-source", "baseos-debuginfo", "baseos-source"],
"enabled": [
"appstream",
"baseos",
"copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh",
"crb",
"rpmfusion-nonfree-updates",
],
}
expected_states_disabled_repo_dnf4 = {
"disabled": ["appstream-debuginfo", "appstream-source", "baseos-debuginfo", "baseos-source", "crb"],
"enabled": [
"appstream",
"baseos",
"copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh",
"rpmfusion-nonfree-updates",
],
}
expected_states_enabled_repo_dnf5 = {
"disabled": [
"fedora-cisco-openh264-debuginfo",
"fedora-cisco-openh264-source",
"fedora-debuginfo",
"fedora-source",
"rawhide",
"rawhide-debuginfo",
"rawhide-source",
"updates-debuginfo",
"updates-source",
"updates-testing",
"updates-testing-debuginfo",
"updates-testing-source",
],
"enabled": [
"copr:copr.fedorainfracloud.org:phracek:PyCharm",
"fedora",
"fedora-cisco-openh264",
"google-chrome",
"updates",
],
}
expected_states_disabled_repo_dnf5 = {
"disabled": [
"copr:copr.fedorainfracloud.org:phracek:PyCharm",
"fedora-cisco-openh264-debuginfo",
"fedora-cisco-openh264-source",
"fedora-debuginfo",
"fedora-source",
"rawhide",
"rawhide-debuginfo",
"rawhide-source",
"updates-debuginfo",
"updates-source",
"updates-testing",
"updates-testing-debuginfo",
"updates-testing-source",
],
"enabled": [
"fedora",
"fedora-cisco-openh264",
"google-chrome",
"updates",
],
}
call_get_dnf_version = call(["/usr/bin/dnf", "--version"], check_rc=True)
call_get_repo_states_dnf4 = call(["/usr/bin/dnf", "repolist", "--all", "--verbose"], check_rc=True)
call_get_repo_states_dnf5 = call(["/usr/bin/dnf", "repo", "info", "--all"], check_rc=True)
call_disable_dnf4 = call(["/usr/bin/dnf", "config-manager", "--assumeyes", "--set-disabled", "crb"], check_rc=True)
call_enable_repo_dnf4 = call(["/usr/bin/dnf", "config-manager", "--assumeyes", "--set-enabled", "crb"], check_rc=True)
call_disable_dnf5 = call(["/usr/bin/dnf", "config-manager", "setopt", "copr:copr.fedorainfracloud.org:phracek:PyCharm.enabled=0"], check_rc=True)
call_enable_repo_dnf5 = call(["/usr/bin/dnf", "config-manager", "setopt", "copr:copr.fedorainfracloud.org:phracek:PyCharm.enabled=1"], check_rc=True)
class TestDNFConfigManager(ModuleTestCase):
def setUp(self):
super().setUp()
self.mock_run_command = patch("ansible.module_utils.basic.AnsibleModule.run_command")
self.run_command = self.mock_run_command.start()
self.mock_path_exists = patch("os.path.exists")
self.path_exists = self.mock_path_exists.start()
self.path_exists.return_value = True
self.module = dnf_config_manager_module
self.mock_dnf4_version = fixture("mock_dnf4_version.txt")
self.mock_dnf5_version = fixture("mock_dnf5_version.txt")
self.mock_dnf4_states_repo_enabled = fixture("mock_dnf4_states_repo_enabled.txt")
self.mock_dnf4_states_repo_disabled = fixture("mock_dnf4_states_repo_disabled.txt")
self.mock_dnf5_states_repo_enabled = fixture("mock_dnf5_states_repo_enabled.txt")
self.mock_dnf5_states_repo_disabled = fixture("mock_dnf5_states_repo_disabled.txt")
self.mock_dnf4_repolist_no_status = fixture("mock_dnf4_repolist_no_status.txt")
self.mock_dnf4_repolist_status_before_id = fixture("mock_dnf4_repolist_status_before_id.txt")
def tearDown(self):
super().tearDown()
self.mock_run_command.stop()
self.mock_path_exists.stop()
def set_command_mock(self, execute_return=(0, "", ""), execute_side_effect=None):
self.run_command.reset_mock()
self.run_command.return_value = execute_return
self.run_command.side_effect = execute_side_effect
def execute_module(self, failed=False, changed=False):
if failed:
result = self.failed()
self.assertTrue(result["failed"])
else:
result = self.changed(changed)
self.assertEqual(result["changed"], changed)
return result
def failed(self):
with self.assertRaises(AnsibleFailJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertTrue(result["failed"])
return result
def changed(self, changed=False):
with self.assertRaises(AnsibleExitJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertEqual(result["changed"], changed)
return result
def test_get_repo_states_dnf4(self):
with set_module_args({}):
side_effects = [(0, self.mock_dnf4_version, ""), (0, self.mock_dnf4_states_repo_enabled, ""),
(0, self.mock_dnf4_states_repo_enabled, "")]
self.set_command_mock(
execute_side_effect=side_effects,
execute_return=(0, self.mock_dnf4_states_repo_enabled, ""))
result = self.execute_module(changed=False)
self.assertEqual(result["repo_states_pre"], expected_states_enabled_repo_dnf4)
self.assertEqual(result["repo_states_post"], expected_states_enabled_repo_dnf4)
self.assertEqual(result["changed_repos"], [])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf4, call_get_repo_states_dnf4]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_get_repo_states_dnf5(self):
with set_module_args({}):
side_effects = [(0, self.mock_dnf5_version, ""), (0, self.mock_dnf5_states_repo_enabled, ""),
(0, self.mock_dnf5_states_repo_enabled, "")]
self.set_command_mock(
execute_side_effect=side_effects,
execute_return=(0, self.mock_dnf5_states_repo_enabled, ""))
result = self.execute_module(changed=False)
self.assertEqual(result["repo_states_pre"], expected_states_enabled_repo_dnf5)
self.assertEqual(result["repo_states_post"], expected_states_enabled_repo_dnf5)
self.assertEqual(result["changed_repos"], [])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf5, call_get_repo_states_dnf5]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_enable_disabled_repo_dnf4(self):
with set_module_args({"name": ["crb"], "state": "enabled"}):
side_effects = [(0, self.mock_dnf4_version, ""), (0, self.mock_dnf4_states_repo_disabled, ""),
(0, "", ""), (0, self.mock_dnf4_states_repo_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["repo_states_pre"], expected_states_disabled_repo_dnf4)
self.assertEqual(result["repo_states_post"], expected_states_enabled_repo_dnf4)
self.assertEqual(result["changed_repos"], ["crb"])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf4, call_enable_repo_dnf4, call_get_repo_states_dnf4]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_enable_disabled_repo_dnf5(self):
with set_module_args({"name": ["copr:copr.fedorainfracloud.org:phracek:PyCharm"], "state": "enabled"}):
side_effects = [(0, self.mock_dnf5_version, ""), (0, self.mock_dnf5_states_repo_disabled, ""),
(0, "", ""), (0, self.mock_dnf5_states_repo_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["repo_states_pre"], expected_states_disabled_repo_dnf5)
self.assertEqual(result["repo_states_post"], expected_states_enabled_repo_dnf5)
self.assertEqual(result["changed_repos"], ["copr:copr.fedorainfracloud.org:phracek:PyCharm"])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf5, call_enable_repo_dnf5, call_get_repo_states_dnf5]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_enable_disabled_repo_check_mode_dnf4(self):
with set_module_args({"name": ["crb"], "state": "enabled", "_ansible_check_mode": True}):
side_effects = [(0, self.mock_dnf4_version, ""), (0, self.mock_dnf4_states_repo_disabled, ""),
(0, self.mock_dnf4_states_repo_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["changed_repos"], ["crb"])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf4]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_enable_disabled_repo_check_mode_dnf5(self):
with set_module_args({"name": ["copr:copr.fedorainfracloud.org:phracek:PyCharm"], "state": "enabled", "_ansible_check_mode": True}):
side_effects = [(0, self.mock_dnf5_version, ""), (0, self.mock_dnf5_states_repo_disabled, ""), (0, self.mock_dnf5_states_repo_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["changed_repos"], ["copr:copr.fedorainfracloud.org:phracek:PyCharm"])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf5]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_disable_enabled_repo_dnf4(self):
with set_module_args({"name": ["crb"], "state": "disabled"}):
side_effects = [(0, self.mock_dnf4_version, ""), (0, self.mock_dnf4_states_repo_enabled, ""),
(0, "", ""), (0, self.mock_dnf4_states_repo_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["repo_states_pre"], expected_states_enabled_repo_dnf4)
self.assertEqual(result["repo_states_post"], expected_states_disabled_repo_dnf4)
self.assertEqual(result["changed_repos"], ["crb"])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf4, call_disable_dnf4, call_get_repo_states_dnf4]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_disable_enabled_repo_dnf5(self):
with set_module_args({"name": ["copr:copr.fedorainfracloud.org:phracek:PyCharm"], "state": "disabled"}):
side_effects = [(0, self.mock_dnf5_version, ""), (0, self.mock_dnf5_states_repo_enabled, ""),
(0, "", ""), (0, self.mock_dnf5_states_repo_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["repo_states_pre"], expected_states_enabled_repo_dnf5)
self.assertEqual(result["repo_states_post"], expected_states_disabled_repo_dnf5)
self.assertEqual(result["changed_repos"], ["copr:copr.fedorainfracloud.org:phracek:PyCharm"])
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf5, call_disable_dnf5, call_get_repo_states_dnf5]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_crb_already_enabled_dnf4(self):
with set_module_args({"name": ["crb"], "state": "enabled"}):
side_effects = [(0, self.mock_dnf4_version, ""), (0, self.mock_dnf4_states_repo_enabled, ""),
(0, self.mock_dnf4_states_repo_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=False)
self.assertEqual(result["repo_states_pre"], expected_states_enabled_repo_dnf4)
self.assertEqual(result["repo_states_post"], expected_states_enabled_repo_dnf4)
self.assertEqual(result["changed_repos"], [])
self.run_command.assert_has_calls(calls=[call_get_dnf_version, call_get_repo_states_dnf4, call_get_repo_states_dnf4], any_order=False)
def test_crb_already_enabled_dnf5(self):
with set_module_args({"name": ["copr:copr.fedorainfracloud.org:phracek:PyCharm"], "state": "enabled"}):
side_effects = [(0, self.mock_dnf5_version, ""), (1, self.mock_dnf5_states_repo_enabled, ""),
(0, self.mock_dnf5_states_repo_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=False)
self.assertEqual(result["repo_states_pre"], expected_states_enabled_repo_dnf5)
self.assertEqual(result["repo_states_post"], expected_states_enabled_repo_dnf5)
self.assertEqual(result["changed_repos"], [])
self.run_command.assert_has_calls(calls=[call_get_dnf_version, call_get_repo_states_dnf5, call_get_repo_states_dnf5], any_order=False)
def test_get_repo_states_fail_no_status(self):
with set_module_args({}):
self.set_command_mock(execute_return=(0, self.mock_dnf4_repolist_no_status, ""))
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "dnf repolist parse failure: parsed another repo id before next status")
self.run_command.assert_has_calls(calls=[call_get_dnf_version, call_get_repo_states_dnf4], any_order=False)
def test_get_repo_states_fail_status_before_id(self):
with set_module_args({}):
self.set_command_mock(execute_return=(0, self.mock_dnf4_repolist_status_before_id, ""))
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "dnf repolist parse failure: parsed status before repo id")
self.run_command.assert_has_calls(calls=[call_get_dnf_version, call_get_repo_states_dnf4], any_order=False)
def test_failed__unknown_repo_id(self):
with set_module_args({"name": ["fake"]}):
self.set_command_mock(execute_return=(0, self.mock_dnf4_states_repo_disabled, ""))
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "did not find repo with ID 'fake' in dnf repolist --all --verbose")
self.run_command.assert_has_calls(calls=[call_get_dnf_version, call_get_repo_states_dnf4], any_order=False)
def test_failed_state_change_ineffective(self):
with set_module_args({"name": ["crb"], "state": "enabled"}):
side_effects = [(0, self.mock_dnf4_version, ""), (0, self.mock_dnf4_states_repo_disabled, ""),
(0, "", ""), (0, self.mock_dnf4_states_repo_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "dnf config-manager failed to make 'crb' enabled")
expected_calls = [call_get_dnf_version, call_get_repo_states_dnf4, call_enable_repo_dnf4, call_get_repo_states_dnf4]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)

View file

@ -1,387 +0,0 @@
# Copyright (c) 2023, Andrew Hyatt <andy@hyatt.xyz>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import annotations
from unittest.mock import call, patch
from ansible_collections.community.internal_test_tools.tests.unit.plugins.modules.utils import (
AnsibleExitJson,
AnsibleFailJson,
ModuleTestCase,
set_module_args,
)
from ansible_collections.community.general.plugins.modules import dnf_config_manager as dnf_config_manager_module
# Return value on all-default arguments
mock_repolist_crb_enabled = """Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install
DNF version: 4.14.0
cachedir: /var/cache/dnf
Last metadata expiration check: 1:20:49 ago on Fri 22 Dec 2023 06:05:13 PM UTC.
Repo-id : appstream
Repo-name : AlmaLinux 9 - AppStream
Repo-status : enabled
Repo-revision : 1703240474
Repo-updated : Fri 22 Dec 2023 10:21:14 AM UTC
Repo-pkgs : 5,897
Repo-available-pkgs: 5,728
Repo-size : 9.5 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/AppStream/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-debuginfo
Repo-name : AlmaLinux 9 - AppStream - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-source
Repo-name : AlmaLinux 9 - AppStream - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : baseos
Repo-name : AlmaLinux 9 - BaseOS
Repo-status : enabled
Repo-revision : 1703240561
Repo-updated : Fri 22 Dec 2023 10:22:41 AM UTC
Repo-pkgs : 1,244
Repo-available-pkgs: 1,244
Repo-size : 1.3 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/BaseOS/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-debuginfo
Repo-name : AlmaLinux 9 - BaseOS - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-source
Repo-name : AlmaLinux 9 - BaseOS - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh
Repo-name : Copr repo for dracut-crypt-ssh owned by uriesk
Repo-status : enabled
Repo-revision : 1698291016
Repo-updated : Thu 26 Oct 2023 03:30:16 AM UTC
Repo-pkgs : 4
Repo-available-pkgs: 4
Repo-size : 102 k
Repo-baseurl : https://download.copr.fedorainfracloud.org/results/uriesk/dracut-crypt-ssh/epel-9-x86_64/
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:10 PM UTC)
Repo-filename : /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh.repo
Repo-id : crb
Repo-name : AlmaLinux 9 - CRB
Repo-status : enabled
Repo-revision : 1703240590
Repo-updated : Fri 22 Dec 2023 10:23:10 AM UTC
Repo-pkgs : 1,730
Repo-available-pkgs: 1,727
Repo-size : 13 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/crb
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/CRB/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-crb.repo
Repo-id : rpmfusion-nonfree-updates
Repo-name : RPM Fusion for EL 9 - Nonfree - Updates
Repo-status : enabled
Repo-revision : 1703248251
Repo-tags : binary-x86_64
Repo-updated : Fri 22 Dec 2023 12:30:53 PM UTC
Repo-pkgs : 65
Repo-available-pkgs: 65
Repo-size : 944 M
Repo-metalink : http://mirrors.rpmfusion.org/metalink?repo=nonfree-el-updates-released-9&arch=x86_64
Updated : Fri 22 Dec 2023 06:05:13 PM UTC
Repo-baseurl : http://uvermont.mm.fcix.net/rpmfusion/nonfree/el/updates/9/x86_64/ (33 more)
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:13 PM UTC)
Repo-filename : /etc/yum.repos.d/rpmfusion-nonfree-updates.repo
Total packages: 28,170
"""
mock_repolist_crb_disabled = """Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install
DNF version: 4.14.0
cachedir: /var/cache/dnf
Last metadata expiration check: 1:20:49 ago on Fri 22 Dec 2023 06:05:13 PM UTC.
Repo-id : appstream
Repo-name : AlmaLinux 9 - AppStream
Repo-status : enabled
Repo-revision : 1703240474
Repo-updated : Fri 22 Dec 2023 10:21:14 AM UTC
Repo-pkgs : 5,897
Repo-available-pkgs: 5,728
Repo-size : 9.5 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/AppStream/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-debuginfo
Repo-name : AlmaLinux 9 - AppStream - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-source
Repo-name : AlmaLinux 9 - AppStream - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : baseos
Repo-name : AlmaLinux 9 - BaseOS
Repo-status : enabled
Repo-revision : 1703240561
Repo-updated : Fri 22 Dec 2023 10:22:41 AM UTC
Repo-pkgs : 1,244
Repo-available-pkgs: 1,244
Repo-size : 1.3 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/BaseOS/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-debuginfo
Repo-name : AlmaLinux 9 - BaseOS - Debug
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : baseos-source
Repo-name : AlmaLinux 9 - BaseOS - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Repo-id : copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh
Repo-name : Copr repo for dracut-crypt-ssh owned by uriesk
Repo-status : enabled
Repo-revision : 1698291016
Repo-updated : Thu 26 Oct 2023 03:30:16 AM UTC
Repo-pkgs : 4
Repo-available-pkgs: 4
Repo-size : 102 k
Repo-baseurl : https://download.copr.fedorainfracloud.org/results/uriesk/dracut-crypt-ssh/epel-9-x86_64/
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:10 PM UTC)
Repo-filename : /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh.repo
Repo-id : crb
Repo-name : AlmaLinux 9 - CRB
Repo-status : disabled
Repo-revision : 1703240590
Repo-updated : Fri 22 Dec 2023 10:23:10 AM UTC
Repo-pkgs : 1,730
Repo-available-pkgs: 1,727
Repo-size : 13 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/crb
Repo-baseurl : http://mirror.cogentco.com/pub/linux/almalinux/9.3/CRB/x86_64/os/ (9 more)
Repo-expire : 86,400 second(s) (last: Fri 22 Dec 2023 06:05:11 PM UTC)
Repo-filename : /etc/yum.repos.d/almalinux-crb.repo
Repo-id : rpmfusion-nonfree-updates
Repo-name : RPM Fusion for EL 9 - Nonfree - Updates
Repo-status : enabled
Repo-revision : 1703248251
Repo-tags : binary-x86_64
Repo-updated : Fri 22 Dec 2023 12:30:53 PM UTC
Repo-pkgs : 65
Repo-available-pkgs: 65
Repo-size : 944 M
Repo-metalink : http://mirrors.rpmfusion.org/metalink?repo=nonfree-el-updates-released-9&arch=x86_64
Updated : Fri 22 Dec 2023 06:05:13 PM UTC
Repo-baseurl : http://uvermont.mm.fcix.net/rpmfusion/nonfree/el/updates/9/x86_64/ (33 more)
Repo-expire : 172,800 second(s) (last: Fri 22 Dec 2023 06:05:13 PM UTC)
Repo-filename : /etc/yum.repos.d/rpmfusion-nonfree-updates.repo
Total packages: 28,170
"""
mock_repolist_no_status = """Repo-id : appstream-debuginfo
Repo-name : AlmaLinux 9 - AppStream - Debug
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-debug
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
Repo-id : appstream-source
Repo-name : AlmaLinux 9 - AppStream - Source
Repo-status : disabled
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/appstream-source
Repo-expire : 86,400 second(s) (last: unknown)
Repo-filename : /etc/yum.repos.d/almalinux-appstream.repo
"""
mock_repolist_status_before_id = """
Repo-id : appstream-debuginfo
Repo-status : disabled
Repo-status : disabled
"""
expected_repo_states_crb_enabled = {
"disabled": ["appstream-debuginfo", "appstream-source", "baseos-debuginfo", "baseos-source"],
"enabled": [
"appstream",
"baseos",
"copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh",
"crb",
"rpmfusion-nonfree-updates",
],
}
expected_repo_states_crb_disabled = {
"disabled": ["appstream-debuginfo", "appstream-source", "baseos-debuginfo", "baseos-source", "crb"],
"enabled": [
"appstream",
"baseos",
"copr:copr.fedorainfracloud.org:uriesk:dracut-crypt-ssh",
"rpmfusion-nonfree-updates",
],
}
call_get_repo_states = call(["/usr/bin/dnf", "repolist", "--all", "--verbose"], check_rc=True)
call_disable_crb = call(["/usr/bin/dnf", "config-manager", "--assumeyes", "--set-disabled", "crb"], check_rc=True)
call_enable_crb = call(["/usr/bin/dnf", "config-manager", "--assumeyes", "--set-enabled", "crb"], check_rc=True)
class TestDNFConfigManager(ModuleTestCase):
def setUp(self):
super().setUp()
self.mock_run_command = patch("ansible.module_utils.basic.AnsibleModule.run_command")
self.run_command = self.mock_run_command.start()
self.mock_path_exists = patch("os.path.exists")
self.path_exists = self.mock_path_exists.start()
self.path_exists.return_value = True
self.module = dnf_config_manager_module
def tearDown(self):
super().tearDown()
self.mock_run_command.stop()
self.mock_path_exists.stop()
def set_command_mock(self, execute_return=(0, "", ""), execute_side_effect=None):
self.run_command.reset_mock()
self.run_command.return_value = execute_return
self.run_command.side_effect = execute_side_effect
def execute_module(self, failed=False, changed=False):
if failed:
result = self.failed()
self.assertTrue(result["failed"])
else:
result = self.changed(changed)
self.assertEqual(result["changed"], changed)
return result
def failed(self):
with self.assertRaises(AnsibleFailJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertTrue(result["failed"])
return result
def changed(self, changed=False):
with self.assertRaises(AnsibleExitJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertEqual(result["changed"], changed)
return result
def test_get_repo_states(self):
with set_module_args({}):
self.set_command_mock(execute_return=(0, mock_repolist_crb_enabled, ""))
result = self.execute_module(changed=False)
self.assertEqual(result["repo_states_pre"], expected_repo_states_crb_enabled)
self.assertEqual(result["repo_states_post"], expected_repo_states_crb_enabled)
self.assertEqual(result["changed_repos"], [])
self.run_command.assert_has_calls(calls=[call_get_repo_states, call_get_repo_states], any_order=False)
def test_enable_disabled_repo(self):
with set_module_args({"name": ["crb"], "state": "enabled"}):
side_effects = [(0, mock_repolist_crb_disabled, ""), (0, "", ""), (0, mock_repolist_crb_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["repo_states_pre"], expected_repo_states_crb_disabled)
self.assertEqual(result["repo_states_post"], expected_repo_states_crb_enabled)
self.assertEqual(result["changed_repos"], ["crb"])
expected_calls = [call_get_repo_states, call_enable_crb, call_get_repo_states]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_enable_disabled_repo_check_mode(self):
with set_module_args({"name": ["crb"], "state": "enabled", "_ansible_check_mode": True}):
side_effects = [(0, mock_repolist_crb_disabled, ""), (0, mock_repolist_crb_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["changed_repos"], ["crb"])
self.run_command.assert_has_calls(calls=[call_get_repo_states], any_order=False)
def test_disable_enabled_repo(self):
with set_module_args({"name": ["crb"], "state": "disabled"}):
side_effects = [(0, mock_repolist_crb_enabled, ""), (0, "", ""), (0, mock_repolist_crb_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=True)
self.assertEqual(result["repo_states_pre"], expected_repo_states_crb_enabled)
self.assertEqual(result["repo_states_post"], expected_repo_states_crb_disabled)
self.assertEqual(result["changed_repos"], ["crb"])
expected_calls = [call_get_repo_states, call_disable_crb, call_get_repo_states]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)
def test_crb_already_enabled(self):
with set_module_args({"name": ["crb"], "state": "enabled"}):
side_effects = [(0, mock_repolist_crb_enabled, ""), (0, mock_repolist_crb_enabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(changed=False)
self.assertEqual(result["repo_states_pre"], expected_repo_states_crb_enabled)
self.assertEqual(result["repo_states_post"], expected_repo_states_crb_enabled)
self.assertEqual(result["changed_repos"], [])
self.run_command.assert_has_calls(calls=[call_get_repo_states, call_get_repo_states], any_order=False)
def test_get_repo_states_fail_no_status(self):
with set_module_args({}):
self.set_command_mock(execute_return=(0, mock_repolist_no_status, ""))
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "dnf repolist parse failure: parsed another repo id before next status")
self.run_command.assert_has_calls(calls=[call_get_repo_states], any_order=False)
def test_get_repo_states_fail_status_before_id(self):
with set_module_args({}):
self.set_command_mock(execute_return=(0, mock_repolist_status_before_id, ""))
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "dnf repolist parse failure: parsed status before repo id")
self.run_command.assert_has_calls(calls=[call_get_repo_states], any_order=False)
def test_failed__unknown_repo_id(self):
with set_module_args({"name": ["fake"]}):
self.set_command_mock(execute_return=(0, mock_repolist_crb_disabled, ""))
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "did not find repo with ID 'fake' in dnf repolist --all --verbose")
self.run_command.assert_has_calls(calls=[call_get_repo_states], any_order=False)
def test_failed_state_change_ineffective(self):
with set_module_args({"name": ["crb"], "state": "enabled"}):
side_effects = [(0, mock_repolist_crb_disabled, ""), (0, "", ""), (0, mock_repolist_crb_disabled, "")]
self.set_command_mock(execute_side_effect=side_effects)
result = self.execute_module(failed=True)
self.assertEqual(result["msg"], "dnf config-manager failed to make 'crb' enabled")
expected_calls = [call_get_repo_states, call_enable_crb, call_get_repo_states]
self.run_command.assert_has_calls(calls=expected_calls, any_order=False)