diff --git a/repos/system_upgrade/el9toel10/actors/preparepamuserdb/actor.py b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/actor.py new file mode 100644 index 0000000000..45d0f0c8a2 --- /dev/null +++ b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/actor.py @@ -0,0 +1,18 @@ +from leapp.actors import Actor +from leapp.libraries.actor import preparepamuserdb +from leapp.models import PamUserDbLocation +from leapp.tags import IPUWorkflowTag, RPMUpgradePhaseTag + + +class PreparePamUserDb(Actor): + """ + Convert the pam_userdb databases to GDBM + """ + + name = 'prepare_pam_user_db' + consumes = (PamUserDbLocation,) + produces = () + tags = (RPMUpgradePhaseTag, IPUWorkflowTag) + + def process(self): + preparepamuserdb.process() diff --git a/repos/system_upgrade/el9toel10/actors/preparepamuserdb/libraries/preparepamuserdb.py b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/libraries/preparepamuserdb.py new file mode 100644 index 0000000000..2e960c29ad --- /dev/null +++ b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/libraries/preparepamuserdb.py @@ -0,0 +1,19 @@ +import subprocess + +from leapp.libraries.stdlib import api +from leapp.models import PamUserDbLocation + + +def process(): + for msg in api.consume(PamUserDbLocation): + locations = msg.locations + + for location in locations: + cmd = f'db_converter --src {location}.db --dest {location}.gdbm' + try: + subprocess.call(cmd, shell=True) + except subprocess.CalledProcessError as e: + api.current_logger().error( + '{} returned non-zero exit status: {}'.format(cmd, e.returncode) + ) + return diff --git a/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/files/db1.db b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/files/db1.db new file mode 100644 index 0000000000..a5f6dcb7cc Binary files /dev/null and b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/files/db1.db differ diff --git a/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/files/db2.db b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/files/db2.db new file mode 100644 index 0000000000..5b579cc261 Binary files /dev/null and b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/files/db2.db differ diff --git a/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/test_preparepamuserdb.py b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/test_preparepamuserdb.py new file mode 100644 index 0000000000..f8790d0b11 --- /dev/null +++ b/repos/system_upgrade/el9toel10/actors/preparepamuserdb/tests/test_preparepamuserdb.py @@ -0,0 +1,23 @@ +import os +from pathlib import Path + +import pytest + +from leapp.libraries.actor import preparepamuserdb +from leapp.libraries.stdlib import api +from leapp.models import PamUserDbLocation + +CUR_DIR = os.path.dirname(os.path.abspath(__file__)) + + +def test_process_locations(current_actor_context): + current_actor_context.feed( + PamUserDbLocation( + locations=[f'{CUR_DIR}/files/db1', f'{CUR_DIR}/files/db2'] + ) + ) + current_actor_context.run() + db1 = Path(f'{CUR_DIR}/files/db1.gdbm') + assert db1.is_file() + db2 = Path(f'{CUR_DIR}/files/db2.gdbm') + assert db2.is_file()