-
Notifications
You must be signed in to change notification settings - Fork 148
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Copy dnf.conf to target userspace and allow a custom one
This change allows working around the fact that source and target `dnf.conf` files might be incompatible. For example some of the proxy configuration between RHEL7 and RHEL8. If it exists, the `/etc/leapp/files/dnf.conf` config file will be copied to the target userspace. Target system compatible configuration can be specified there. If it doesn't exist, the `/etc/dnf/dnf.conf` from the source system will be copied instead. NOTE: The configuration is not copied onto the target system, only to the target userspace.
- Loading branch information
1 parent
17c88d9
commit 7e75d3d
Showing
3 changed files
with
69 additions
and
0 deletions.
There are no files selected for viewing
24 changes: 24 additions & 0 deletions
24
repos/system_upgrade/common/actors/dnfconfuserspacecopy/actor.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
from leapp.actors import Actor | ||
from leapp.libraries.actor import copycustomdnfconf | ||
from leapp.models import TargetUserSpacePreupgradeTasks | ||
from leapp.tags import FactsPhaseTag, IPUWorkflowTag | ||
|
||
|
||
class DNFConfUserspaceCopy(Actor): | ||
""" | ||
Copy dnf.conf to target userspace | ||
Copies /etc/leapp/files/dnf.conf to target userspace. If it isn't available | ||
/etc/dnf/dnf.conf is copied instead. This allows specifying a different | ||
config for the target userspace, which might be required if the source | ||
system configuration file isn't compatible with the target one. One such | ||
example is incompatible proxy configuration between RHEL7 and RHEL8 DNF | ||
versions. | ||
""" | ||
name = "dnf_conf_userspace_copy" | ||
consumes = () | ||
produces = (TargetUserSpacePreupgradeTasks,) | ||
tags = (FactsPhaseTag, IPUWorkflowTag) | ||
|
||
def process(self): | ||
copycustomdnfconf.process() |
19 changes: 19 additions & 0 deletions
19
repos/system_upgrade/common/actors/dnfconfuserspacecopy/libraries/dnfconfuserspacecopy.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import os | ||
|
||
from leapp.libraries.stdlib import api | ||
from leapp.models import CopyFile, TargetUserSpacePreupgradeTasks | ||
|
||
|
||
def process(): | ||
src = "/etc/dnf/dnf.conf" | ||
if os.path.exists("/etc/leapp/files/dnf.conf"): | ||
src = "/etc/leapp/files/dnf.conf" | ||
|
||
api.current_logger().debug( | ||
"Copying dnf.conf at {} to the target userspace".format(src) | ||
) | ||
api.produce( | ||
TargetUserSpacePreupgradeTasks( | ||
copy_files=[CopyFile(src=src, dst="/etc/dnf/dnf.conf")] | ||
) | ||
) |
26 changes: 26 additions & 0 deletions
26
repos/system_upgrade/common/actors/dnfconfuserspacecopy/tests/test_dnfconfuserspacecopy.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import os | ||
|
||
import pytest | ||
|
||
from leapp.libraries.actor import copycustomdnfconf | ||
from leapp.libraries.common.testutils import CurrentActorMocked, logger_mocked, produce_mocked | ||
|
||
|
||
@pytest.mark.parametrize( | ||
"userspace_conf_exists,expected", | ||
[(False, "/etc/dnf/dnf.conf"), (True, "/etc/leapp/files/dnf.conf")], | ||
) | ||
def test_copy_correct_dnf_conf(monkeypatch, userspace_conf_exists, expected): | ||
monkeypatch.setattr(os.path, "exists", lambda _: userspace_conf_exists) | ||
|
||
mocked_produce = produce_mocked() | ||
monkeypatch.setattr(copycustomdnfconf.api, 'produce', mocked_produce) | ||
monkeypatch.setattr(copycustomdnfconf.api, 'current_logger', logger_mocked()) | ||
|
||
copycustomdnfconf.process() | ||
|
||
assert mocked_produce.called == 1 | ||
assert len(mocked_produce.model_instances) == 1 | ||
assert len(mocked_produce.model_instances[0].copy_files) == 1 | ||
assert mocked_produce.model_instances[0].copy_files[0].src == expected | ||
assert mocked_produce.model_instances[0].copy_files[0].dst == "/etc/dnf/dnf.conf" |