File support-transactional-systems-microos.patch of Package salt.25405

From 5d7b9be571b765faae5cefc5a0810c61c2a25814 Mon Sep 17 00:00:00 2001
From: Alexander Graul <agraul@suse.com>
Date: Tue, 18 Jan 2022 17:36:12 +0100
Subject: [PATCH] Support transactional systems (MicroOS)

Add rebootmgr module

Add transactional_update module

chroot: add chroot detector

systemd: add offline mode detector

transactional_update: add pending_transaction detector

extra: add EFI and transactional grains

transactional_update: add call, apply_, sls & highstate

transactional_update: add documentation

transactional_update: add executor

Add changelog entry 58519.added

Closes #58519

transactional_update: update the cleanups family

transactional_update: add activate_transaction param

transactional_update: skip tests on Windows

transactional_update: unify with chroot.call

Return for both .call() "retcode" when fail

Add MicroOS information in release note

systemd: support NamedLoaderContext

transactional_update: detect recursion in the executor

Handle master tops data when states are applied by transactional_update

Fix unit tests for transactional_update module

Do noop for services states when running systemd in offline mode

transactional_updates: do not execute states in parallel but use a queue

Add changes suggested by pre-commit

Fix unit tests for transactional_updates module

Add unit tests to cover queue cases on transaction_update states

Refactor offline checkers and add unit tests

Fix regression that always consider offline mode

Add proper mocking and skip tests when running in offline mode

Fix failing unit tests for systemd

test_rebootmgr: convert to pytest

test_transactional_update: convert to pytest

Update release documentation to 3004
---
 changelog/58519.added                               |  1 +
 salt/modules/chroot.py                              | 10 +++++++---
 salt/modules/transactional_update.py                |  8 ++++----
 .../unit/modules/test_transactional_update.py       | 10 +++++++++-
 tests/unit/modules/test_chroot.py                   | 13 ++++++++++++-
 5 files changed, 33 insertions(+), 9 deletions(-)
 create mode 100644 changelog/58519.added

diff --git a/changelog/58519.added b/changelog/58519.added
new file mode 100644
index 0000000000..1cc8d7dc74
--- /dev/null
+++ b/changelog/58519.added
@@ -0,0 +1 @@
+Add support for transactional systems, like openSUSE MicroOS
\ No newline at end of file
diff --git a/salt/modules/chroot.py b/salt/modules/chroot.py
index 39dfff6b86..91f139455b 100644
--- a/salt/modules/chroot.py
+++ b/salt/modules/chroot.py
@@ -242,7 +242,11 @@ def _create_and_execute_salt_state(root, chunks, file_refs, test, hash_type):
     # Create the tar containing the state pkg and relevant files.
     salt.client.ssh.wrapper.state._cleanup_slsmod_low_data(chunks)
     trans_tar = salt.client.ssh.state.prep_trans_tar(
-        salt.fileclient.get_file_client(__opts__), chunks, file_refs, __pillar__, root
+        salt.fileclient.get_file_client(__opts__),
+        chunks,
+        file_refs,
+        __pillar__.value(),
+        root,
     )
     trans_tar_sum = salt.utils.hashutils.get_hash(trans_tar, hash_type)
 
@@ -303,7 +307,7 @@ def sls(root, mods, saltenv="base", test=None, exclude=None, **kwargs):
     """
     # Get a copy of the pillar data, to avoid overwriting the current
     # pillar, instead the one delegated
-    pillar = copy.deepcopy(__pillar__)
+    pillar = copy.deepcopy(__pillar__.value())
     pillar.update(kwargs.get("pillar", {}))
 
     # Clone the options data and apply some default values. May not be
@@ -372,7 +376,7 @@ def highstate(root, **kwargs):
     """
     # Get a copy of the pillar data, to avoid overwriting the current
     # pillar, instead the one delegated
-    pillar = copy.deepcopy(__pillar__)
+    pillar = copy.deepcopy(__pillar__.value())
     pillar.update(kwargs.get("pillar", {}))
 
     # Clone the options data and apply some default values. May not be
diff --git a/salt/modules/transactional_update.py b/salt/modules/transactional_update.py
index 6fcad40b35..799fe08e4d 100644
--- a/salt/modules/transactional_update.py
+++ b/salt/modules/transactional_update.py
@@ -1052,7 +1052,7 @@ def _create_and_execute_salt_state(
     # Create the tar containing the state pkg and relevant files.
     salt.client.ssh.wrapper.state._cleanup_slsmod_low_data(chunks)
     trans_tar = salt.client.ssh.state.prep_trans_tar(
-        salt.fileclient.get_file_client(__opts__), chunks, file_refs, __pillar__
+        salt.fileclient.get_file_client(__opts__), chunks, file_refs, __pillar__.value()
     )
     trans_tar_sum = salt.utils.hashutils.get_hash(trans_tar, hash_type)
 
@@ -1134,7 +1134,7 @@ def sls(
 
     # Get a copy of the pillar data, to avoid overwriting the current
     # pillar, instead the one delegated
-    pillar = copy.deepcopy(__pillar__)
+    pillar = copy.deepcopy(__pillar__.value())
     pillar.update(kwargs.get("pillar", {}))
 
     # Clone the options data and apply some default values. May not be
@@ -1218,7 +1218,7 @@ def highstate(activate_transaction=False, queue=False, **kwargs):
 
     # Get a copy of the pillar data, to avoid overwriting the current
     # pillar, instead the one delegated
-    pillar = copy.deepcopy(__pillar__)
+    pillar = copy.deepcopy(__pillar__.value())
     pillar.update(kwargs.get("pillar", {}))
 
     # Clone the options data and apply some default values. May not be
@@ -1284,7 +1284,7 @@ def single(fun, name, test=None, activate_transaction=False, queue=False, **kwar
 
     # Get a copy of the pillar data, to avoid overwriting the current
     # pillar, instead the one delegated
-    pillar = copy.deepcopy(__pillar__)
+    pillar = copy.deepcopy(__pillar__.value())
     pillar.update(kwargs.get("pillar", {}))
 
     # Clone the options data and apply some default values. May not be
diff --git a/tests/pytests/unit/modules/test_transactional_update.py b/tests/pytests/unit/modules/test_transactional_update.py
index f9eb1fd595..032ca0c9e8 100644
--- a/tests/pytests/unit/modules/test_transactional_update.py
+++ b/tests/pytests/unit/modules/test_transactional_update.py
@@ -1,6 +1,7 @@
 import sys
 
 import pytest
+import salt.loader.context
 import salt.modules.state as statemod
 import salt.modules.transactional_update as tu
 from salt.exceptions import CommandExecutionError
@@ -13,8 +14,15 @@ pytestmark = [
 
 @pytest.fixture
 def configure_loader_modules():
+    loader_context = salt.loader.context.LoaderContext()
     return {
-        tu: {"__salt__": {}, "__utils__": {}},
+        tu: {
+            "__salt__": {},
+            "__utils__": {},
+            "__pillar__": salt.loader.context.NamedLoaderContext(
+                "__pillar__", loader_context, {}
+            ),
+        },
         statemod: {"__salt__": {}, "__context__": {}},
     }
 
diff --git a/tests/unit/modules/test_chroot.py b/tests/unit/modules/test_chroot.py
index cdbfcb0fab..9cdfeaf066 100644
--- a/tests/unit/modules/test_chroot.py
+++ b/tests/unit/modules/test_chroot.py
@@ -27,6 +27,7 @@
 
 import sys
 
+import salt.loader.context
 import salt.modules.chroot as chroot
 import salt.utils.platform
 from salt.exceptions import CommandExecutionError
@@ -42,7 +43,17 @@ class ChrootTestCase(TestCase, LoaderModuleMockMixin):
     """
 
     def setup_loader_modules(self):
-        return {chroot: {"__salt__": {}, "__utils__": {}, "__opts__": {"cachedir": ""}}}
+        loader_context = salt.loader.context.LoaderContext()
+        return {
+            chroot: {
+                "__salt__": {},
+                "__utils__": {},
+                "__opts__": {"cachedir": ""},
+                "__pillar__": salt.loader.context.NamedLoaderContext(
+                    "__pillar__", loader_context, {}
+                ),
+            }
+        }
 
     @patch("os.path.isdir")
     def test_exist(self, isdir):
-- 
2.34.1


openSUSE Build Service is sponsored by