Accepting request 594031 from systemsmanagement:saltstack:testing
- Update to 2018.3.0 - Modified: * explore-module.run-response-to-catch-the-result-in-d.patch * add-saltssh-multi-version-support-across-python-inte.patch * run-salt-api-as-user-salt-bsc-1064520.patch * fix-openscap-push.patch * fix-decrease-loglevel-when-unable-to-resolve-addr.patch * fix-cp.push-empty-file.patch * make-it-possible-to-use-login-pull-and-push-from-mod.patch * avoid-excessive-syslogging-by-watchdog-cronjob-58.patch * feat-add-grain-for-all-fqdns.patch * fix-bsc-1065792.patch * run-salt-master-as-dedicated-salt-user.patch * move-log_file-option-to-changeable-defaults.patch * activate-all-beacons-sources-config-pillar-grains.patch * remove-obsolete-unicode-handling-in-pkg.info_install.patch - Add python-2.6 support to salt-ssh - Modified: * add-saltssh-multi-version-support-across-python-inte.patch - Update salt-ssh multiversion patch - Modified: * add-saltssh-multi-version-support-across-python-inte.patch - Removed: * require-same-major-version-while-minor-is-allowed-to.patch OBS-URL: https://build.opensuse.org/request/show/594031 OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=117
This commit is contained in:
parent
bbe3fe8f72
commit
aeed45986b
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:90fb674a65567a3fd168d47eb95dcc5f9fee82ea201aff1d0fe91a2468d86900
|
|
||||||
size 13577072
|
|
@ -1 +1 @@
|
|||||||
HEAD
|
f43b8fb2425e3371decf3cde040c70ed15de375d
|
4
_service
4
_service
@ -12,8 +12,8 @@
|
|||||||
</service>
|
</service>
|
||||||
<service name="download_url" mode="disabled">
|
<service name="download_url" mode="disabled">
|
||||||
<param name="host">codeload.github.com</param>
|
<param name="host">codeload.github.com</param>
|
||||||
<param name="path">saltstack/salt/tar.gz/2018.3.0rc1</param>
|
<param name="path">saltstack/salt/tar.gz/v2018.3.0</param>
|
||||||
<param name="filename">2018.3.0rc1.tar.gz</param>
|
<param name="filename">v2018.3.0.tar.gz</param>
|
||||||
</service>
|
</service>
|
||||||
<service name="update_changelog" mode="disabled"></service>
|
<service name="update_changelog" mode="disabled"></service>
|
||||||
</services>
|
</services>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 8550c9cc51d227d4c32c844c7fe0526ae58f4874 Mon Sep 17 00:00:00 2001
|
From 957ac8fe161db2c4b3b8fe8b84027bc15e144a49 Mon Sep 17 00:00:00 2001
|
||||||
From: Bo Maryniuk <bo@suse.de>
|
From: Bo Maryniuk <bo@suse.de>
|
||||||
Date: Tue, 17 Oct 2017 16:52:33 +0200
|
Date: Tue, 17 Oct 2017 16:52:33 +0200
|
||||||
Subject: [PATCH] Activate all beacons sources: config/pillar/grains
|
Subject: [PATCH] Activate all beacons sources: config/pillar/grains
|
||||||
|
1951
add-saltssh-multi-version-support-across-python-inte.patch
Normal file
1951
add-saltssh-multi-version-support-across-python-inte.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
From 5dfc5ebd799d5c9a4588d9e1a27b813b8c35ce25 Mon Sep 17 00:00:00 2001
|
From edb1c95fa06b8bb1d7e6d91beaaddec6d22c966b Mon Sep 17 00:00:00 2001
|
||||||
From: Hubert Mantel <mantel@suse.de>
|
From: Hubert Mantel <mantel@suse.de>
|
||||||
Date: Mon, 27 Nov 2017 13:55:13 +0100
|
Date: Mon, 27 Nov 2017 13:55:13 +0100
|
||||||
Subject: [PATCH] avoid excessive syslogging by watchdog cronjob (#58)
|
Subject: [PATCH] avoid excessive syslogging by watchdog cronjob (#58)
|
||||||
|
131
explore-module.run-response-to-catch-the-result-in-d.patch
Normal file
131
explore-module.run-response-to-catch-the-result-in-d.patch
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
From 8c6b77bfd913b3b47d3d4206ec0a9e08754b6f93 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
||||||
|
<psuarezhernandez@suse.com>
|
||||||
|
Date: Wed, 7 Mar 2018 09:42:46 +0000
|
||||||
|
Subject: [PATCH] Explore 'module.run' response to catch the 'result' in
|
||||||
|
depth
|
||||||
|
|
||||||
|
Fix Python3 and pylint issue
|
||||||
|
|
||||||
|
Rename and fix recursive method
|
||||||
|
|
||||||
|
Add new unit test to check state.apply within module.run
|
||||||
|
---
|
||||||
|
salt/states/module.py | 18 ++++++++++++
|
||||||
|
tests/unit/states/test_module.py | 62 ++++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 80 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/salt/states/module.py b/salt/states/module.py
|
||||||
|
index fda8bdf17a..2190ffa3d2 100644
|
||||||
|
--- a/salt/states/module.py
|
||||||
|
+++ b/salt/states/module.py
|
||||||
|
@@ -531,7 +531,25 @@ def _get_result(func_ret, changes):
|
||||||
|
res = changes_ret.get('result', {})
|
||||||
|
elif changes_ret.get('retcode', 0) != 0:
|
||||||
|
res = False
|
||||||
|
+ # Explore dict in depth to determine if there is a
|
||||||
|
+ # 'result' key set to False which sets the global
|
||||||
|
+ # state result.
|
||||||
|
+ else:
|
||||||
|
+ res = _get_dict_result(changes_ret)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
+
|
||||||
|
+def _get_dict_result(node):
|
||||||
|
+ ret = True
|
||||||
|
+ for key, val in six.iteritems(node):
|
||||||
|
+ if key == 'result' and val is False:
|
||||||
|
+ ret = False
|
||||||
|
+ break
|
||||||
|
+ elif isinstance(val, dict):
|
||||||
|
+ ret = _get_dict_result(val)
|
||||||
|
+ if ret is False:
|
||||||
|
+ break
|
||||||
|
+ return ret
|
||||||
|
+
|
||||||
|
mod_watch = salt.utils.functools.alias_function(run, 'mod_watch')
|
||||||
|
diff --git a/tests/unit/states/test_module.py b/tests/unit/states/test_module.py
|
||||||
|
index 12ad54f979..bf4ddcc5b4 100644
|
||||||
|
--- a/tests/unit/states/test_module.py
|
||||||
|
+++ b/tests/unit/states/test_module.py
|
||||||
|
@@ -25,6 +25,57 @@ log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
CMD = 'foo.bar'
|
||||||
|
|
||||||
|
+STATE_APPLY_RET = {
|
||||||
|
+ 'module_|-test2_|-state.apply_|-run': {
|
||||||
|
+ 'comment': 'Module function state.apply executed',
|
||||||
|
+ 'name': 'state.apply',
|
||||||
|
+ 'start_time': '16:11:48.818932',
|
||||||
|
+ 'result': False,
|
||||||
|
+ 'duration': 179.439,
|
||||||
|
+ '__run_num__': 0,
|
||||||
|
+ 'changes': {
|
||||||
|
+ 'ret': {
|
||||||
|
+ 'module_|-test3_|-state.apply_|-run': {
|
||||||
|
+ 'comment': 'Module function state.apply executed',
|
||||||
|
+ 'name': 'state.apply',
|
||||||
|
+ 'start_time': '16:11:48.904796',
|
||||||
|
+ 'result': True,
|
||||||
|
+ 'duration': 89.522,
|
||||||
|
+ '__run_num__': 0,
|
||||||
|
+ 'changes': {
|
||||||
|
+ 'ret': {
|
||||||
|
+ 'module_|-test4_|-cmd.run_|-run': {
|
||||||
|
+ 'comment': 'Module function cmd.run executed',
|
||||||
|
+ 'name': 'cmd.run',
|
||||||
|
+ 'start_time': '16:11:48.988574',
|
||||||
|
+ 'result': True,
|
||||||
|
+ 'duration': 4.543,
|
||||||
|
+ '__run_num__': 0,
|
||||||
|
+ 'changes': {
|
||||||
|
+ 'ret': 'Wed Mar 7 16:11:48 CET 2018'
|
||||||
|
+ },
|
||||||
|
+ '__id__': 'test4'
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ },
|
||||||
|
+ '__id__': 'test3'
|
||||||
|
+ },
|
||||||
|
+ 'module_|-test3_fail_|-test3_fail_|-run': {
|
||||||
|
+ 'comment': 'Module function test3_fail is not available',
|
||||||
|
+ 'name': 'test3_fail',
|
||||||
|
+ 'start_time': '16:11:48.994607',
|
||||||
|
+ 'result': False,
|
||||||
|
+ 'duration': 0.466,
|
||||||
|
+ '__run_num__': 1,
|
||||||
|
+ 'changes': {},
|
||||||
|
+ '__id__': 'test3_fail'
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ },
|
||||||
|
+ '__id__': 'test2'
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
def _mocked_func_named(name, names=('Fred', 'Swen',)):
|
||||||
|
'''
|
||||||
|
@@ -140,6 +191,17 @@ class ModuleStateTest(TestCase, LoaderModuleMockMixin):
|
||||||
|
if ret['comment'] != '{0}: Success'.format(CMD) or not ret['result']:
|
||||||
|
self.fail('module.run failed: {0}'.format(ret))
|
||||||
|
|
||||||
|
+ def test_run_state_apply_result_false(self):
|
||||||
|
+ '''
|
||||||
|
+ Tests the 'result' of module.run that calls state.apply execution module
|
||||||
|
+ :return:
|
||||||
|
+ '''
|
||||||
|
+ with patch.dict(module.__salt__, {"state.apply": MagicMock(return_value=STATE_APPLY_RET)}):
|
||||||
|
+ with patch.dict(module.__opts__, {'use_deprecated': ['module.run']}):
|
||||||
|
+ ret = module.run(**{"name": "state.apply", 'mods': 'test2'})
|
||||||
|
+ if ret['result']:
|
||||||
|
+ self.fail('module.run did not report false result: {0}'.format(ret))
|
||||||
|
+
|
||||||
|
def test_run_unexpected_keywords(self):
|
||||||
|
with patch.dict(module.__salt__, {CMD: _mocked_func_args}):
|
||||||
|
with patch.dict(module.__opts__, {'use_superseded': ['module.run']}):
|
||||||
|
--
|
||||||
|
2.16.2
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 067b63ccbc6942a0399eb43d7fdf314b5c9b417f Mon Sep 17 00:00:00 2001
|
From 0449bead92ff763d186f5e524556f82c618d652c Mon Sep 17 00:00:00 2001
|
||||||
From: Michele Bologna <michele.bologna@suse.com>
|
From: Michele Bologna <michele.bologna@suse.com>
|
||||||
Date: Thu, 14 Dec 2017 18:20:02 +0100
|
Date: Thu, 14 Dec 2017 18:20:02 +0100
|
||||||
Subject: [PATCH] Feat: add grain for all FQDNs
|
Subject: [PATCH] Feat: add grain for all FQDNs
|
||||||
@ -21,10 +21,10 @@ https://github.com/saltstack/salt/pull/45060
|
|||||||
3 files changed, 29 insertions(+)
|
3 files changed, 29 insertions(+)
|
||||||
|
|
||||||
diff --git a/salt/grains/core.py b/salt/grains/core.py
|
diff --git a/salt/grains/core.py b/salt/grains/core.py
|
||||||
index 9352987abd..f8e36a895e 100644
|
index b7d446676e..96b7ce2cf2 100644
|
||||||
--- a/salt/grains/core.py
|
--- a/salt/grains/core.py
|
||||||
+++ b/salt/grains/core.py
|
+++ b/salt/grains/core.py
|
||||||
@@ -1890,6 +1890,33 @@ def append_domain():
|
@@ -1888,6 +1888,33 @@ def append_domain():
|
||||||
return grain
|
return grain
|
||||||
|
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ index 709f882b45..aa7bd44202 100644
|
|||||||
'groupname',
|
'groupname',
|
||||||
'host',
|
'host',
|
||||||
diff --git a/tests/unit/grains/test_core.py b/tests/unit/grains/test_core.py
|
diff --git a/tests/unit/grains/test_core.py b/tests/unit/grains/test_core.py
|
||||||
index e781fadefe..dba8d082c5 100644
|
index 50babe3ed3..47c9cdd35b 100644
|
||||||
--- a/tests/unit/grains/test_core.py
|
--- a/tests/unit/grains/test_core.py
|
||||||
+++ b/tests/unit/grains/test_core.py
|
+++ b/tests/unit/grains/test_core.py
|
||||||
@@ -7,6 +7,7 @@
|
@@ -7,6 +7,7 @@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 1d2030c6d002ef293c7a71c77db1617fdb5a8cb0 Mon Sep 17 00:00:00 2001
|
From 27d0e8b7e7c1eae68ef6dc972ea0f091d18cd92e Mon Sep 17 00:00:00 2001
|
||||||
From: Bo Maryniuk <bo@suse.de>
|
From: Bo Maryniuk <bo@suse.de>
|
||||||
Date: Thu, 14 Dec 2017 16:21:40 +0100
|
Date: Thu, 14 Dec 2017 16:21:40 +0100
|
||||||
Subject: [PATCH] Fix bsc#1065792
|
Subject: [PATCH] Fix bsc#1065792
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From e91e2db15b99ef677cb112bb817275ed60a1f0e1 Mon Sep 17 00:00:00 2001
|
From 74ca7c3fd6a42f95f9d702ef2847a1f76399db5f Mon Sep 17 00:00:00 2001
|
||||||
From: Mihai Dinca <mdinca@suse.de>
|
From: Mihai Dinca <mdinca@suse.de>
|
||||||
Date: Wed, 7 Mar 2018 13:11:16 +0100
|
Date: Wed, 7 Mar 2018 13:11:16 +0100
|
||||||
Subject: [PATCH] Fix cp.push empty file
|
Subject: [PATCH] Fix cp.push empty file
|
||||||
|
72
fix-decrease-loglevel-when-unable-to-resolve-addr.patch
Normal file
72
fix-decrease-loglevel-when-unable-to-resolve-addr.patch
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
From 14128fc65bf007bbb5b27b3eedec30b7f729bfbd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michele Bologna <michele.bologna@suse.com>
|
||||||
|
Date: Tue, 20 Mar 2018 19:27:36 +0100
|
||||||
|
Subject: [PATCH] Fix: decrease loglevel when unable to resolve addr
|
||||||
|
|
||||||
|
Upstream PR: https://github.com/saltstack/salt/pull/46575
|
||||||
|
|
||||||
|
It occurs that when the machine has multiple interfaces without an associated FQDN, Salt logs are polluted by this error.
|
||||||
|
Some examples:
|
||||||
|
|
||||||
|
```
|
||||||
|
caasp-admin:~ # uptime
|
||||||
|
09:08am up 0:13, 2 users, load average: 1.30, 1.37, 0.98
|
||||||
|
caasp-admin:~ # docker logs $(docker ps | grep salt-master | awk '{print $1}') 2>&1 | grep "Exception during resolving address" | wc -l
|
||||||
|
528
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
caasp-admin:~ # docker exec -it $(docker ps | grep salt-master | awk '{print $1}') salt '*' cmd.run uptime
|
||||||
|
b24f41eb4cc94624862ca0c9e8afcd15:
|
||||||
|
09:08am up 0:11, 0 users, load average: 1.26, 0.83, 0.40
|
||||||
|
admin:
|
||||||
|
09:08am up 0:13, 2 users, load average: 1.33, 1.37, 0.99
|
||||||
|
ba8c76af029043a39ba917f7ab2af796:
|
||||||
|
09:08am up 0:12, 0 users, load average: 0.84, 0.63, 0.32
|
||||||
|
7b7aa52158524556a0c46ae57569ce93:
|
||||||
|
09:08am up 0:11, 1 user, load average: 1.05, 0.77, 0.38
|
||||||
|
5ab0e18cbd084e9088a928a17edb86cb:
|
||||||
|
09:08am up 0:10, 0 users, load average: 0.12, 0.25, 0.20
|
||||||
|
1756c9cd9a9a402b91d8636400d1e512:
|
||||||
|
09:08am up 0:09, 0 users, load average: 0.12, 0.23, 0.14
|
||||||
|
ca:
|
||||||
|
09:08am up 0:13, 0 users, load average: 1.33, 1.37, 0.99
|
||||||
|
caasp-admin:~ # docker exec -it $(docker ps | grep salt-master | awk '{print $1}') salt '*' cmd.run "bash -c 'cat /var/log/salt/minion | grep \"Exception during resolving address\" | wc -l'"
|
||||||
|
admin:
|
||||||
|
63
|
||||||
|
ba8c76af029043a39ba917f7ab2af796:
|
||||||
|
47
|
||||||
|
5ab0e18cbd084e9088a928a17edb86cb:
|
||||||
|
55
|
||||||
|
7b7aa52158524556a0c46ae57569ce93:
|
||||||
|
59
|
||||||
|
b24f41eb4cc94624862ca0c9e8afcd15:
|
||||||
|
47
|
||||||
|
1756c9cd9a9a402b91d8636400d1e512:
|
||||||
|
59
|
||||||
|
ca:
|
||||||
|
25
|
||||||
|
```
|
||||||
|
|
||||||
|
This patch changes the log level of the exception to INFO, since the resolve-unable problem is not blocking.
|
||||||
|
---
|
||||||
|
salt/grains/core.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/salt/grains/core.py b/salt/grains/core.py
|
||||||
|
index 96b7ce2cf2..17a7d9819a 100644
|
||||||
|
--- a/salt/grains/core.py
|
||||||
|
+++ b/salt/grains/core.py
|
||||||
|
@@ -1909,7 +1909,7 @@ def fqdns():
|
||||||
|
fqdns.add(socket.gethostbyaddr(ip)[0])
|
||||||
|
except (socket.error, socket.herror,
|
||||||
|
socket.gaierror, socket.timeout) as e:
|
||||||
|
- log.error("Exception during resolving address: " + str(e))
|
||||||
|
+ log.info("Exception during resolving address: " + str(e))
|
||||||
|
|
||||||
|
grains['fqdns'] = list(fqdns)
|
||||||
|
return grains
|
||||||
|
--
|
||||||
|
2.16.2
|
||||||
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
|||||||
From 7259333c3652d5208258632532a9151648c9cb4d Mon Sep 17 00:00:00 2001
|
From 589d90117783a126dce695cf76a3b8fc2953f8b6 Mon Sep 17 00:00:00 2001
|
||||||
From: Mihai Dinca <mdinca@suse.de>
|
From: Mihai Dinca <mdinca@suse.de>
|
||||||
Date: Fri, 2 Mar 2018 17:17:58 +0100
|
Date: Fri, 2 Mar 2018 17:17:58 +0100
|
||||||
Subject: [PATCH] Fix openscap push
|
Subject: [PATCH] Fix openscap push
|
||||||
|
|
||||||
---
|
---
|
||||||
salt/modules/openscap.py | 4 +---
|
salt/modules/openscap.py | 4 +---
|
||||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
tests/unit/modules/test_openscap.py | 10 +++++-----
|
||||||
|
2 files changed, 6 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
diff --git a/salt/modules/openscap.py b/salt/modules/openscap.py
|
diff --git a/salt/modules/openscap.py b/salt/modules/openscap.py
|
||||||
index c5b51a1846..e3190e1e11 100644
|
index c5b51a1846..e3190e1e11 100644
|
||||||
@ -29,6 +30,42 @@ index c5b51a1846..e3190e1e11 100644
|
|||||||
shutil.rmtree(tempdir, ignore_errors=True)
|
shutil.rmtree(tempdir, ignore_errors=True)
|
||||||
upload_dir = tempdir
|
upload_dir = tempdir
|
||||||
|
|
||||||
|
diff --git a/tests/unit/modules/test_openscap.py b/tests/unit/modules/test_openscap.py
|
||||||
|
index eb8ad1225b..6e17148de1 100644
|
||||||
|
--- a/tests/unit/modules/test_openscap.py
|
||||||
|
+++ b/tests/unit/modules/test_openscap.py
|
||||||
|
@@ -28,8 +28,10 @@ class OpenscapTestCase(TestCase):
|
||||||
|
policy_file = '/usr/share/openscap/policy-file-xccdf.xml'
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
+ import salt.modules.openscap
|
||||||
|
+ salt.modules.openscap.__salt__ = MagicMock()
|
||||||
|
patchers = [
|
||||||
|
- patch('salt.modules.openscap.Caller', MagicMock()),
|
||||||
|
+ patch('salt.modules.openscap.__salt__', MagicMock()),
|
||||||
|
patch('salt.modules.openscap.shutil.rmtree', Mock()),
|
||||||
|
patch(
|
||||||
|
'salt.modules.openscap.tempfile.mkdtemp',
|
||||||
|
@@ -68,8 +70,7 @@ class OpenscapTestCase(TestCase):
|
||||||
|
cwd=openscap.tempfile.mkdtemp.return_value,
|
||||||
|
stderr=PIPE,
|
||||||
|
stdout=PIPE)
|
||||||
|
- openscap.Caller().cmd.assert_called_once_with(
|
||||||
|
- 'cp.push_dir', self.random_temp_dir)
|
||||||
|
+ openscap.__salt__['cp.push_dir'].assert_called_once_with(self.random_temp_dir)
|
||||||
|
self.assertEqual(openscap.shutil.rmtree.call_count, 1)
|
||||||
|
self.assertEqual(
|
||||||
|
response,
|
||||||
|
@@ -106,8 +107,7 @@ class OpenscapTestCase(TestCase):
|
||||||
|
cwd=openscap.tempfile.mkdtemp.return_value,
|
||||||
|
stderr=PIPE,
|
||||||
|
stdout=PIPE)
|
||||||
|
- openscap.Caller().cmd.assert_called_once_with(
|
||||||
|
- 'cp.push_dir', self.random_temp_dir)
|
||||||
|
+ openscap.__salt__['cp.push_dir'].assert_called_once_with(self.random_temp_dir)
|
||||||
|
self.assertEqual(openscap.shutil.rmtree.call_count, 1)
|
||||||
|
self.assertEqual(
|
||||||
|
response,
|
||||||
--
|
--
|
||||||
2.16.2
|
2.16.2
|
||||||
|
|
||||||
|
119
make-it-possible-to-use-login-pull-and-push-from-mod.patch
Normal file
119
make-it-possible-to-use-login-pull-and-push-from-mod.patch
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
From d0b7808f63a32c15249a8adbed048859dfac21a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Calmer <mc@suse.de>
|
||||||
|
Date: Thu, 22 Mar 2018 08:56:58 +0100
|
||||||
|
Subject: [PATCH] make it possible to use login, pull and push from
|
||||||
|
module.run and detect errors
|
||||||
|
|
||||||
|
when using state.apply module.run doing docker operations retcode
|
||||||
|
is tracked to find out if the call was successful or not.
|
||||||
|
|
||||||
|
add unit test for failed login
|
||||||
|
---
|
||||||
|
salt/modules/dockermod.py | 14 ++++++++++----
|
||||||
|
tests/unit/modules/test_dockermod.py | 20 ++++++++++++++++++++
|
||||||
|
2 files changed, 30 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/salt/modules/dockermod.py b/salt/modules/dockermod.py
|
||||||
|
index 23cff8806b..c20b73452b 100644
|
||||||
|
--- a/salt/modules/dockermod.py
|
||||||
|
+++ b/salt/modules/dockermod.py
|
||||||
|
@@ -1354,7 +1354,7 @@ def login(*registries):
|
||||||
|
# information is added to the config.json, since docker-py isn't designed
|
||||||
|
# to do so.
|
||||||
|
registry_auth = __pillar__.get('docker-registries', {})
|
||||||
|
- ret = {}
|
||||||
|
+ ret = {'retcode': 0}
|
||||||
|
errors = ret.setdefault('Errors', [])
|
||||||
|
if not isinstance(registry_auth, dict):
|
||||||
|
errors.append('\'docker-registries\' Pillar value must be a dictionary')
|
||||||
|
@@ -1412,6 +1412,8 @@ def login(*registries):
|
||||||
|
errors.append(login_cmd['stderr'])
|
||||||
|
elif login_cmd['stdout']:
|
||||||
|
errors.append(login_cmd['stdout'])
|
||||||
|
+ if errors:
|
||||||
|
+ ret['retcode'] = 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
@@ -4490,7 +4492,7 @@ def pull(image,
|
||||||
|
|
||||||
|
time_started = time.time()
|
||||||
|
response = _client_wrapper('pull', image, **kwargs)
|
||||||
|
- ret = {'Time_Elapsed': time.time() - time_started}
|
||||||
|
+ ret = {'Time_Elapsed': time.time() - time_started, 'retcode': 0}
|
||||||
|
_clear_context()
|
||||||
|
|
||||||
|
if not response:
|
||||||
|
@@ -4523,6 +4525,7 @@ def pull(image,
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
ret['Errors'] = errors
|
||||||
|
+ ret['retcode'] = 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
@@ -4585,7 +4588,7 @@ def push(image,
|
||||||
|
|
||||||
|
time_started = time.time()
|
||||||
|
response = _client_wrapper('push', image, **kwargs)
|
||||||
|
- ret = {'Time_Elapsed': time.time() - time_started}
|
||||||
|
+ ret = {'Time_Elapsed': time.time() - time_started, 'retcode': 0}
|
||||||
|
_clear_context()
|
||||||
|
|
||||||
|
if not response:
|
||||||
|
@@ -4617,6 +4620,7 @@ def push(image,
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
ret['Errors'] = errors
|
||||||
|
+ ret['retcode'] = 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
@@ -4688,9 +4692,11 @@ def rmi(*names, **kwargs):
|
||||||
|
|
||||||
|
_clear_context()
|
||||||
|
ret = {'Layers': [x for x in pre_images if x not in images(all=True)],
|
||||||
|
- 'Tags': [x for x in pre_tags if x not in list_tags()]}
|
||||||
|
+ 'Tags': [x for x in pre_tags if x not in list_tags()],
|
||||||
|
+ 'retcode': 0}
|
||||||
|
if errors:
|
||||||
|
ret['Errors'] = errors
|
||||||
|
+ ret['retcode'] = 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/tests/unit/modules/test_dockermod.py b/tests/unit/modules/test_dockermod.py
|
||||||
|
index 4e061ce369..77c4bcfb85 100644
|
||||||
|
--- a/tests/unit/modules/test_dockermod.py
|
||||||
|
+++ b/tests/unit/modules/test_dockermod.py
|
||||||
|
@@ -64,6 +64,26 @@ class DockerTestCase(TestCase, LoaderModuleMockMixin):
|
||||||
|
'''
|
||||||
|
docker_mod.__context__.pop('docker.client', None)
|
||||||
|
|
||||||
|
+ def test_failed_login(self):
|
||||||
|
+ '''
|
||||||
|
+ Check that when docker.login failed a retcode other then 0
|
||||||
|
+ is part of the return.
|
||||||
|
+ '''
|
||||||
|
+ client = Mock()
|
||||||
|
+ get_client_mock = MagicMock(return_value=client)
|
||||||
|
+ ref_out = {
|
||||||
|
+ 'stdout': '',
|
||||||
|
+ 'stderr': 'login failed',
|
||||||
|
+ 'retcode': 1
|
||||||
|
+ }
|
||||||
|
+ with patch.dict(docker_mod.__pillar__, {'docker-registries': {'portus.example.com:5000':
|
||||||
|
+ {'username': 'admin', 'password': 'linux12345', 'email': 'tux@example.com'}}}):
|
||||||
|
+ with patch.object(docker_mod, '_get_client', get_client_mock):
|
||||||
|
+ with patch.dict(docker_mod.__salt__, {'cmd.run_all': MagicMock(return_value=ref_out)}):
|
||||||
|
+ ret = docker_mod.login('portus.example.com:5000')
|
||||||
|
+ self.assertTrue('retcode' in ret)
|
||||||
|
+ self.assertTrue(ret['retcode'] > 0)
|
||||||
|
+
|
||||||
|
def test_ps_with_host_true(self):
|
||||||
|
'''
|
||||||
|
Check that docker.ps called with host is ``True``,
|
||||||
|
--
|
||||||
|
2.16.2
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 76706e2b241c932e4067487139325dc16ca08477 Mon Sep 17 00:00:00 2001
|
From f77ae8d0426e551d6249b097850da0ed4ff7276d Mon Sep 17 00:00:00 2001
|
||||||
From: Michael Calmer <mc@suse.de>
|
From: Michael Calmer <mc@suse.de>
|
||||||
Date: Sun, 11 Feb 2018 19:15:27 +0100
|
Date: Sun, 11 Feb 2018 19:15:27 +0100
|
||||||
Subject: [PATCH] move log_file option to changeable defaults
|
Subject: [PATCH] move log_file option to changeable defaults
|
||||||
|
@ -1,26 +1,30 @@
|
|||||||
From a29071d597553184ea39f7c5783b0bd4f29fab2b Mon Sep 17 00:00:00 2001
|
From dc262b912c63ed0d3152a01c9eaaa3ec3f8e0f7e Mon Sep 17 00:00:00 2001
|
||||||
From: Mihai Dinca <mdinca@suse.de>
|
From: Mihai Dinca <mdinca@suse.de>
|
||||||
Date: Tue, 13 Feb 2018 16:11:20 +0100
|
Date: Tue, 13 Feb 2018 16:11:20 +0100
|
||||||
Subject: [PATCH] Remove obsolete unicode handling in pkg.info_installed
|
Subject: [PATCH] Remove obsolete unicode handling in pkg.info_installed
|
||||||
|
|
||||||
---
|
---
|
||||||
salt/modules/zypper.py | 11 +----------
|
salt/modules/zypper.py | 15 +++++----------
|
||||||
1 file changed, 1 insertion(+), 10 deletions(-)
|
1 file changed, 5 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py
|
diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py
|
||||||
index 51d01c3fc9..659d8858f0 100644
|
index 51d01c3fc9..16fc877684 100644
|
||||||
--- a/salt/modules/zypper.py
|
--- a/salt/modules/zypper.py
|
||||||
+++ b/salt/modules/zypper.py
|
+++ b/salt/modules/zypper.py
|
||||||
@@ -309,7 +309,7 @@ class _Zypper(object):
|
@@ -309,7 +309,11 @@ class _Zypper(object):
|
||||||
if self.error_msg and not self.__no_raise and not self.__ignore_repo_failure:
|
if self.error_msg and not self.__no_raise and not self.__ignore_repo_failure:
|
||||||
raise CommandExecutionError('Zypper command failure: {0}'.format(self.error_msg))
|
raise CommandExecutionError('Zypper command failure: {0}'.format(self.error_msg))
|
||||||
|
|
||||||
- return self._is_xml_mode() and dom.parseString(self.__call_result['stdout']) or self.__call_result['stdout']
|
- return self._is_xml_mode() and dom.parseString(self.__call_result['stdout']) or self.__call_result['stdout']
|
||||||
+ return self._is_xml_mode() and dom.parseString(self.__call_result['stdout'].encode('utf-8')) or self.__call_result['stdout']
|
+ return (
|
||||||
|
+ self._is_xml_mode() and
|
||||||
|
+ dom.parseString(salt.utils.stringutils.to_str(self.__call_result['stdout'])) or
|
||||||
|
+ self.__call_result['stdout']
|
||||||
|
+ )
|
||||||
|
|
||||||
|
|
||||||
__zypper__ = _Zypper()
|
__zypper__ = _Zypper()
|
||||||
@@ -482,15 +482,6 @@ def info_installed(*names, **kwargs):
|
@@ -482,15 +486,6 @@ def info_installed(*names, **kwargs):
|
||||||
t_nfo = dict()
|
t_nfo = dict()
|
||||||
# Translate dpkg-specific keys to a common structure
|
# Translate dpkg-specific keys to a common structure
|
||||||
for key, value in six.iteritems(pkg_nfo):
|
for key, value in six.iteritems(pkg_nfo):
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From ff376d2811248384e3a41e69404d2c66affd5279 Mon Sep 17 00:00:00 2001
|
From 92f41027bc08be3e14a47bbf7f43205a60606643 Mon Sep 17 00:00:00 2001
|
||||||
From: Christian Lanig <clanig@suse.com>
|
From: Christian Lanig <clanig@suse.com>
|
||||||
Date: Mon, 27 Nov 2017 13:10:26 +0100
|
Date: Mon, 27 Nov 2017 13:10:26 +0100
|
||||||
Subject: [PATCH] Run salt-api as user salt (bsc#1064520)
|
Subject: [PATCH] Run salt-api as user salt (bsc#1064520)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 1df8d3011ebe645c25be8541cbc40ac2b700dfcf Mon Sep 17 00:00:00 2001
|
From 04906c9a9c1b9fdbc6854a017e92525acd167bc7 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de>
|
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de>
|
||||||
Date: Wed, 20 Jan 2016 11:01:06 +0100
|
Date: Wed, 20 Jan 2016 11:01:06 +0100
|
||||||
Subject: [PATCH] Run salt master as dedicated salt user
|
Subject: [PATCH] Run salt master as dedicated salt user
|
||||||
|
129
salt.changes
129
salt.changes
@ -1,3 +1,132 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 6 16:58:59 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Update to 2018.3.0
|
||||||
|
|
||||||
|
|
||||||
|
- Modified:
|
||||||
|
* explore-module.run-response-to-catch-the-result-in-d.patch
|
||||||
|
* add-saltssh-multi-version-support-across-python-inte.patch
|
||||||
|
* run-salt-api-as-user-salt-bsc-1064520.patch
|
||||||
|
* fix-openscap-push.patch
|
||||||
|
* fix-decrease-loglevel-when-unable-to-resolve-addr.patch
|
||||||
|
* fix-cp.push-empty-file.patch
|
||||||
|
* make-it-possible-to-use-login-pull-and-push-from-mod.patch
|
||||||
|
* avoid-excessive-syslogging-by-watchdog-cronjob-58.patch
|
||||||
|
* feat-add-grain-for-all-fqdns.patch
|
||||||
|
* fix-bsc-1065792.patch
|
||||||
|
* run-salt-master-as-dedicated-salt-user.patch
|
||||||
|
* move-log_file-option-to-changeable-defaults.patch
|
||||||
|
* activate-all-beacons-sources-config-pillar-grains.patch
|
||||||
|
* remove-obsolete-unicode-handling-in-pkg.info_install.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Apr 5 15:58:22 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Add python-2.6 support to salt-ssh
|
||||||
|
|
||||||
|
- Modified:
|
||||||
|
* add-saltssh-multi-version-support-across-python-inte.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Apr 4 16:32:10 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Update salt-ssh multiversion patch
|
||||||
|
|
||||||
|
- Modified:
|
||||||
|
* add-saltssh-multi-version-support-across-python-inte.patch
|
||||||
|
|
||||||
|
- Removed:
|
||||||
|
* require-same-major-version-while-minor-is-allowed-to.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 28 12:18:08 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Add iprout/net-tools dependency
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 28 11:57:30 UTC 2018 - Michael Calmer <mc@suse.de>
|
||||||
|
|
||||||
|
- salt-ssh: require same major version while minor is allowed to be
|
||||||
|
|
||||||
|
- Added:
|
||||||
|
* require-same-major-version-while-minor-is-allowed-to.patch
|
||||||
|
|
||||||
|
- Modified:
|
||||||
|
* explore-module.run-response-to-catch-the-result-in-d.patch
|
||||||
|
* add-saltssh-multi-version-support-across-python-inte.patch
|
||||||
|
* run-salt-api-as-user-salt-bsc-1064520.patch
|
||||||
|
* fix-openscap-push.patch
|
||||||
|
* fix-decrease-loglevel-when-unable-to-resolve-addr.patch
|
||||||
|
* fix-cp.push-empty-file.patch
|
||||||
|
* make-it-possible-to-use-login-pull-and-push-from-mod.patch
|
||||||
|
* avoid-excessive-syslogging-by-watchdog-cronjob-58.patch
|
||||||
|
* feat-add-grain-for-all-fqdns.patch
|
||||||
|
* fix-bsc-1065792.patch
|
||||||
|
* run-salt-master-as-dedicated-salt-user.patch
|
||||||
|
* move-log_file-option-to-changeable-defaults.patch
|
||||||
|
* activate-all-beacons-sources-config-pillar-grains.patch
|
||||||
|
* remove-obsolete-unicode-handling-in-pkg.info_install.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 27 16:29:08 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Add SaltSSH multi-version support across Python interpeters.
|
||||||
|
|
||||||
|
- Added:
|
||||||
|
* add-saltssh-multi-version-support-across-python-inte.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 23 18:12:09 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Fix zypper.info_installed 'ascii' issue
|
||||||
|
|
||||||
|
- Modified:
|
||||||
|
* explore-module.run-response-to-catch-the-result-in-d.patch
|
||||||
|
* fix-openscap-push.patch
|
||||||
|
* fix-decrease-loglevel-when-unable-to-resolve-addr.patch
|
||||||
|
* fix-cp.push-empty-file.patch
|
||||||
|
* make-it-possible-to-use-login-pull-and-push-from-mod.patch
|
||||||
|
* move-log_file-option-to-changeable-defaults.patch
|
||||||
|
* remove-obsolete-unicode-handling-in-pkg.info_install.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 23 16:19:42 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
- Update openscap push patch to include the test fixes
|
||||||
|
|
||||||
|
- Modified:
|
||||||
|
* explore-module.run-response-to-catch-the-result-in-d.patch
|
||||||
|
* fix-openscap-push.patch
|
||||||
|
* fix-decrease-loglevel-when-unable-to-resolve-addr.patch
|
||||||
|
* fix-cp.push-empty-file.patch
|
||||||
|
* make-it-possible-to-use-login-pull-and-push-from-mod.patch
|
||||||
|
* move-log_file-option-to-changeable-defaults.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 22 14:40:50 UTC 2018 - Pablo Suárez Hernández <psuarezhernandez@suse.com>
|
||||||
|
|
||||||
|
- Explore 'module.run' state module output in depth to catch "result" properly
|
||||||
|
|
||||||
|
- Added:
|
||||||
|
* explore-module.run-response-to-catch-the-result-in-d.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 22 09:10:33 UTC 2018 - Michael Calmer <mc@suse.de>
|
||||||
|
|
||||||
|
- make it possible to use docker login, pull and push from module.run and detect errors
|
||||||
|
- Added:
|
||||||
|
* make-it-possible-to-use-login-pull-and-push-from-mod.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 20 19:15:38 UTC 2018 - michele.bologna@suse.com
|
||||||
|
|
||||||
|
- Fix logging with FQDNs
|
||||||
|
|
||||||
|
- Added:
|
||||||
|
* fix-decrease-loglevel-when-unable-to-resolve-addr.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Mar 14 09:37:07 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
Wed Mar 14 09:37:07 UTC 2018 - Mihai Dinca <mdinca@suse.de>
|
||||||
|
|
||||||
|
31
salt.spec
31
salt.spec
@ -52,14 +52,13 @@
|
|||||||
%bcond_with builddocs
|
%bcond_with builddocs
|
||||||
|
|
||||||
Name: salt
|
Name: salt
|
||||||
Version: 2018.1.99
|
Version: 2018.3.0
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A parallel remote execution system
|
Summary: A parallel remote execution system
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
Group: System/Management
|
Group: System/Management
|
||||||
Url: http://saltstack.org/
|
Url: http://saltstack.org/
|
||||||
# Source: https://github.com/saltstack/salt/archive/v%{version}.tar.gz
|
Source: https://github.com/saltstack/salt/archive/v%{version}.tar.gz
|
||||||
Source: https://github.com/saltstack/salt/archive/2018.3.0rc1.tar.gz
|
|
||||||
Source1: README.SUSE
|
Source1: README.SUSE
|
||||||
Source2: salt-tmpfiles.d
|
Source2: salt-tmpfiles.d
|
||||||
Source3: html.tar.bz2
|
Source3: html.tar.bz2
|
||||||
@ -79,9 +78,17 @@ Patch8: fix-openscap-push.patch
|
|||||||
Patch9: move-log_file-option-to-changeable-defaults.patch
|
Patch9: move-log_file-option-to-changeable-defaults.patch
|
||||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/46416
|
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/46416
|
||||||
Patch10: fix-cp.push-empty-file.patch
|
Patch10: fix-cp.push-empty-file.patch
|
||||||
|
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/46575
|
||||||
|
Patch11: fix-decrease-loglevel-when-unable-to-resolve-addr.patch
|
||||||
|
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/46643
|
||||||
|
Patch12: make-it-possible-to-use-login-pull-and-push-from-mod.patch
|
||||||
|
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/46413
|
||||||
|
Patch13: explore-module.run-response-to-catch-the-result-in-d.patch
|
||||||
|
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/46684
|
||||||
|
Patch14: add-saltssh-multi-version-support-across-python-inte.patch
|
||||||
|
|
||||||
# BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
# BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRoot: %{_tmppath}/%{name}-2018.3.0rc1-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: logrotate
|
BuildRequires: logrotate
|
||||||
%if 0%{?suse_version} > 1020
|
%if 0%{?suse_version} > 1020
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
@ -106,6 +113,16 @@ Requires(pre): dbus
|
|||||||
Requires: logrotate
|
Requires: logrotate
|
||||||
Requires: procps
|
Requires: procps
|
||||||
|
|
||||||
|
%if 0%{?suse_version} >= 1500
|
||||||
|
Requires: iproute2
|
||||||
|
%else
|
||||||
|
Requires: net-tools
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?rhel}
|
||||||
|
Requires: iproute
|
||||||
|
%endif
|
||||||
|
|
||||||
%if %{with systemd}
|
%if %{with systemd}
|
||||||
BuildRequires: systemd
|
BuildRequires: systemd
|
||||||
%{?systemd_requires}
|
%{?systemd_requires}
|
||||||
@ -524,7 +541,7 @@ Zsh command line completion support for %{name}.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
# %setup -q -n salt-%{version}
|
# %setup -q -n salt-%{version}
|
||||||
%setup -q -n salt-2018.3.0rc1
|
%setup -q -n salt-%{version}
|
||||||
cp %{S:1} .
|
cp %{S:1} .
|
||||||
cp %{S:5} ./.travis.yml
|
cp %{S:5} ./.travis.yml
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
@ -537,6 +554,10 @@ cp %{S:5} ./.travis.yml
|
|||||||
%patch8 -p1
|
%patch8 -p1
|
||||||
%patch9 -p1
|
%patch9 -p1
|
||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
%patch14 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if 0%{?build_py2}
|
%if 0%{?build_py2}
|
||||||
|
3
v2018.3.0.tar.gz
Normal file
3
v2018.3.0.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4310936a99a330fb67d86d430189831b8b7e064357a8faabebd5e0115a7e0dfc
|
||||||
|
size 13469511
|
Loading…
Reference in New Issue
Block a user