SHA256
1
0
forked from pool/salt

osc copypac from project:systemsmanagement:saltstack:testing package:salt revision:299

OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=153
This commit is contained in:
Pablo Suárez Hernández 2019-10-25 09:14:18 +00:00 committed by Git OBS Bridge
parent b39fec6a59
commit 61b8fa3223
5 changed files with 299 additions and 1 deletions

View File

@ -1 +1 @@
5c46ca0c3961fc3954afcf884bf2ac754507c151 b6cbd715dc69b13db8d3fec05840366a1202a62a

View File

@ -0,0 +1,186 @@
From 46a60d81604eaf6f9fc3712e02d1066e959c96e3 Mon Sep 17 00:00:00 2001
From: Alberto Planas <aplanas@gmail.com>
Date: Tue, 22 Oct 2019 11:02:33 +0200
Subject: [PATCH] Accumulated changes from Yomi (#167)
* core.py: ignore wrong product_name files
Some firmwares (like some NUC machines), do not provide valid
/sys/class/dmi/id/product_name strings. In those cases an
UnicodeDecodeError exception happens.
This patch ignore this kind of issue during the grains creation.
(cherry picked from commit 2d57d2a6063488ad9329a083219e3826e945aa2d)
* zypperpkg: understand product type
(cherry picked from commit b865491b74679140f7a71c5ba50d482db47b600f)
---
salt/grains/core.py | 4 +++
salt/modules/zypperpkg.py | 30 +++++++++++++------
tests/unit/grains/test_core.py | 45 ++++++++++++++++++++++++++++
tests/unit/modules/test_zypperpkg.py | 26 ++++++++++++++++
4 files changed, 96 insertions(+), 9 deletions(-)
diff --git a/salt/grains/core.py b/salt/grains/core.py
index fa188a6ff7..fdabe484a8 100644
--- a/salt/grains/core.py
+++ b/salt/grains/core.py
@@ -986,6 +986,10 @@ def _virtual(osdata):
grains['virtual'] = 'gce'
elif 'BHYVE' in output:
grains['virtual'] = 'bhyve'
+ except UnicodeDecodeError:
+ # Some firmwares provide non-valid 'product_name'
+ # files, ignore them
+ pass
except IOError:
pass
elif osdata['kernel'] == 'FreeBSD':
diff --git a/salt/modules/zypperpkg.py b/salt/modules/zypperpkg.py
index da1953b2a5..a87041aa70 100644
--- a/salt/modules/zypperpkg.py
+++ b/salt/modules/zypperpkg.py
@@ -861,23 +861,35 @@ def list_pkgs(versions_as_list=False, root=None, includes=None, **kwargs):
_ret[pkgname] = sorted(ret[pkgname], key=lambda d: d['version'])
for include in includes:
+ if include == 'product':
+ products = list_products(all=False, root=root)
+ for product in products:
+ extended_name = '{}:{}'.format(include, product['name'])
+ _ret[extended_name] = [{
+ 'epoch': product['epoch'],
+ 'version': product['version'],
+ 'release': product['release'],
+ 'arch': product['arch'],
+ 'install_date': None,
+ 'install_date_time_t': None,
+ }]
if include in ('pattern', 'patch'):
if include == 'pattern':
- pkgs = list_installed_patterns(root=root)
+ elements = list_installed_patterns(root=root)
elif include == 'patch':
- pkgs = list_installed_patches(root=root)
+ elements = list_installed_patches(root=root)
else:
- pkgs = []
- for pkg in pkgs:
- pkg_extended_name = '{}:{}'.format(include, pkg)
- info = info_available(pkg_extended_name,
+ elements = []
+ for element in elements:
+ extended_name = '{}:{}'.format(include, element)
+ info = info_available(extended_name,
refresh=False,
root=root)
- _ret[pkg_extended_name] = [{
+ _ret[extended_name] = [{
'epoch': None,
- 'version': info[pkg]['version'],
+ 'version': info[element]['version'],
'release': None,
- 'arch': info[pkg]['arch'],
+ 'arch': info[element]['arch'],
'install_date': None,
'install_date_time_t': None,
}]
diff --git a/tests/unit/grains/test_core.py b/tests/unit/grains/test_core.py
index 889fb90074..aa04a7a7ac 100644
--- a/tests/unit/grains/test_core.py
+++ b/tests/unit/grains/test_core.py
@@ -1117,6 +1117,51 @@ class CoreGrainsTestCase(TestCase, LoaderModuleMockMixin):
'uuid': ''
})
+ @skipIf(not salt.utils.platform.is_linux(), 'System is not Linux')
+ def test_kernelparams_return(self):
+ expectations = [
+ ('BOOT_IMAGE=/vmlinuz-3.10.0-693.2.2.el7.x86_64',
+ {'kernelparams': [('BOOT_IMAGE', '/vmlinuz-3.10.0-693.2.2.el7.x86_64')]}),
+ ('root=/dev/mapper/centos_daemon-root',
+ {'kernelparams': [('root', '/dev/mapper/centos_daemon-root')]}),
+ ('rhgb quiet ro',
+ {'kernelparams': [('rhgb', None), ('quiet', None), ('ro', None)]}),
+ ('param="value1"',
+ {'kernelparams': [('param', 'value1')]}),
+ ('param="value1 value2 value3"',
+ {'kernelparams': [('param', 'value1 value2 value3')]}),
+ ('param="value1 value2 value3" LANG="pl" ro',
+ {'kernelparams': [('param', 'value1 value2 value3'), ('LANG', 'pl'), ('ro', None)]}),
+ ('ipv6.disable=1',
+ {'kernelparams': [('ipv6.disable', '1')]}),
+ ('param="value1:value2:value3"',
+ {'kernelparams': [('param', 'value1:value2:value3')]}),
+ ('param="value1,value2,value3"',
+ {'kernelparams': [('param', 'value1,value2,value3')]}),
+ ('param="value1" param="value2" param="value3"',
+ {'kernelparams': [('param', 'value1'), ('param', 'value2'), ('param', 'value3')]}),
+ ]
+
+ for cmdline, expectation in expectations:
+ with patch('salt.utils.files.fopen', mock_open(read_data=cmdline)):
+ self.assertEqual(core.kernelparams(), expectation)
+
+ @skipIf(not salt.utils.platform.is_linux(), 'System is not Linux')
+ @patch('os.path.exists')
+ @patch('salt.utils.platform.is_proxy')
+ def test__hw_data_linux_empty(self, is_proxy, exists):
+ is_proxy.return_value = False
+ exists.return_value = True
+ with patch('salt.utils.files.fopen', mock_open(read_data='')):
+ self.assertEqual(core._hw_data({'kernel': 'Linux'}), {
+ 'biosreleasedate': '',
+ 'biosversion': '',
+ 'manufacturer': '',
+ 'productname': '',
+ 'serialnumber': '',
+ 'uuid': ''
+ })
+
@skipIf(not salt.utils.platform.is_linux(), 'System is not Linux')
@skipIf(six.PY2, 'UnicodeDecodeError is throw in Python 3')
@patch('os.path.exists')
diff --git a/tests/unit/modules/test_zypperpkg.py b/tests/unit/modules/test_zypperpkg.py
index 695d982ca6..7617113401 100644
--- a/tests/unit/modules/test_zypperpkg.py
+++ b/tests/unit/modules/test_zypperpkg.py
@@ -943,6 +943,32 @@ Repository 'DUMMY' not found by its alias, number, or URI.
with self.assertRaisesRegex(CommandExecutionError, '^Advisory id "SUSE-PATCH-XXX" not found$'):
zypper.install(advisory_ids=['SUSE-PATCH-XXX'])
+ @patch('salt.modules.zypperpkg._systemd_scope',
+ MagicMock(return_value=False))
+ @patch('salt.modules.zypperpkg.list_products',
+ MagicMock(return_value={'openSUSE': {'installed': False, 'summary': 'test'}}))
+ @patch('salt.modules.zypperpkg.list_pkgs', MagicMock(side_effect=[{"product:openSUSE": "15.2"},
+ {"product:openSUSE": "15.3"}]))
+ def test_install_product_ok(self):
+ '''
+ Test successfully product installation.
+ '''
+ with patch.dict(zypper.__salt__,
+ {
+ 'pkg_resource.parse_targets': MagicMock(
+ return_value=(['product:openSUSE'], None))
+ }):
+ with patch('salt.modules.zypperpkg.__zypper__.noraise.call', MagicMock()) as zypper_mock:
+ ret = zypper.install('product:openSUSE', includes=['product'])
+ zypper_mock.assert_called_once_with(
+ '--no-refresh',
+ 'install',
+ '--auto-agree-with-licenses',
+ '--name',
+ 'product:openSUSE'
+ )
+ self.assertDictEqual(ret, {"product:openSUSE": {"old": "15.2", "new": "15.3"}})
+
def test_remove_purge(self):
'''
Test package removal
--
2.23.0

View File

@ -0,0 +1,88 @@
From f9e7ace2f7c56a7fb4df60a048131dbd6887340b Mon Sep 17 00:00:00 2001
From: Jochen Breuer <jbreuer@suse.de>
Date: Fri, 27 Sep 2019 11:33:47 +0200
Subject: [PATCH] Adds the possibility to also use downloadonly in kwargs
The download_only parameter in the apt module is not in line with
the yum and zypper modules. Both of them use downloadonly without
the underline.
With this change apt now additionally supports the downloadonly
parameter.
Fixes #54790
---
salt/modules/aptpkg.py | 7 ++++---
tests/unit/modules/test_aptpkg.py | 30 ++++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/salt/modules/aptpkg.py b/salt/modules/aptpkg.py
index a11bb51c16..1a60255a1d 100644
--- a/salt/modules/aptpkg.py
+++ b/salt/modules/aptpkg.py
@@ -1054,8 +1054,9 @@ def upgrade(refresh=True, dist_upgrade=False, **kwargs):
Skip refreshing the package database if refresh has already occurred within
<value> seconds
- download_only
- Only download the packages, don't unpack or install them
+ download_only (or downloadonly)
+ Only download the packages, don't unpack or install them. Use
+ downloadonly to be in line with yum and zypper module.
.. versionadded:: 2018.3.0
@@ -1086,7 +1087,7 @@ def upgrade(refresh=True, dist_upgrade=False, **kwargs):
cmd.append('--force-yes')
if kwargs.get('skip_verify', False):
cmd.append('--allow-unauthenticated')
- if kwargs.get('download_only', False):
+ if kwargs.get('download_only', False) or kwargs.get('downloadonly', False):
cmd.append('--download-only')
cmd.append('dist-upgrade' if dist_upgrade else 'upgrade')
diff --git a/tests/unit/modules/test_aptpkg.py b/tests/unit/modules/test_aptpkg.py
index 85360da181..d3fac5902a 100644
--- a/tests/unit/modules/test_aptpkg.py
+++ b/tests/unit/modules/test_aptpkg.py
@@ -393,6 +393,36 @@ class AptPkgTestCase(TestCase, LoaderModuleMockMixin):
with patch.multiple(aptpkg, **patch_kwargs):
self.assertEqual(aptpkg.upgrade(), dict())
+ def test_upgrade_downloadonly(self):
+ '''
+ Tests the download-only options for upgrade.
+ '''
+ with patch('salt.utils.pkg.clear_rtag', MagicMock()):
+ with patch('salt.modules.aptpkg.list_pkgs',
+ MagicMock(return_value=UNINSTALL)):
+ mock_cmd = MagicMock(return_value={
+ 'retcode': 0,
+ 'stdout': UPGRADE
+ })
+ patch_kwargs = {
+ '__salt__': {
+ 'config.get': MagicMock(return_value=True),
+ 'cmd.run_all': mock_cmd
+ },
+ }
+ with patch.multiple(aptpkg, **patch_kwargs):
+ aptpkg.upgrade()
+ args_matching = [True for args in patch_kwargs['__salt__']['cmd.run_all'].call_args.args if "--download-only" in args]
+ self.assertFalse(any(args_matching))
+
+ aptpkg.upgrade(downloadonly=True)
+ args_matching = [True for args in patch_kwargs['__salt__']['cmd.run_all'].call_args.args if "--download-only" in args]
+ self.assertTrue(any(args_matching))
+
+ aptpkg.upgrade(download_only=True)
+ args_matching = [True for args in patch_kwargs['__salt__']['cmd.run_all'].call_args.args if "--download-only" in args]
+ self.assertTrue(any(args_matching))
+
def test_show(self):
'''
Test that the pkg.show function properly parses apt-cache show output.
--
2.16.4

View File

@ -1,3 +1,20 @@
-------------------------------------------------------------------
Tue Oct 22 09:29:19 UTC 2019 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com>
- core.py: ignore wrong product_name files
- zypperpkg: understand product type
- Added:
* accumulated-changes-from-yomi-167.patch
-------------------------------------------------------------------
Mon Oct 21 15:10:37 UTC 2019 - Jochen Breuer <jbreuer@suse.de>
- Enable usage of downloadonly parameter for apt module
- Added:
* adds-the-possibility-to-also-use-downloadonly-in-kwa.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Oct 9 12:40:33 UTC 2019 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com> Wed Oct 9 12:40:33 UTC 2019 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com>

View File

@ -255,6 +255,11 @@ Patch87: use-current-ioloop-for-the-localclient-instance-of-b.patch
Patch88: fix-failing-unit-tests-for-batch-async.patch Patch88: fix-failing-unit-tests-for-batch-async.patch
# PATCH_FIX_UPSTREAM: https://github.com/saltstack/salt/pull/54935 # PATCH_FIX_UPSTREAM: https://github.com/saltstack/salt/pull/54935
Patch89: add-missing-fun-for-returns-from-wfunc-executions.patch Patch89: add-missing-fun-for-returns-from-wfunc-executions.patch
# PATCH_FIX_OPENSUSE: https://github.com/openSUSE/salt/pull/179
Patch90: adds-the-possibility-to-also-use-downloadonly-in-kwa.patch
# PATCH_FIX_UPSTREAM: https://github.com/saltstack/salt/pull/53326
# PATCH_FIX_UPSTREAM: https://github.com/saltstack/salt/pull/54954
Patch91: accumulated-changes-from-yomi-167.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: logrotate BuildRequires: logrotate
@ -832,6 +837,8 @@ cp %{S:5} ./.travis.yml
%patch87 -p1 %patch87 -p1
%patch88 -p1 %patch88 -p1
%patch89 -p1 %patch89 -p1
%patch90 -p1
%patch91 -p1
%build %build
%if 0%{?build_py2} %if 0%{?build_py2}