Accepting request 476766 from systemsmanagement:saltstack
1 OBS-URL: https://build.opensuse.org/request/show/476766 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/salt?expand=0&rev=63
This commit is contained in:
commit
0d22a2f24c
@ -1,53 +0,0 @@
|
||||
From 7854a6cd0ddc5a7d51f298e69b54eec09ce97c14 Mon Sep 17 00:00:00 2001
|
||||
From: Bo Maryniuk <bo@suse.de>
|
||||
Date: Thu, 17 Mar 2016 12:30:23 +0100
|
||||
Subject: [PATCH 05/17] Use SHA256 hash type by default
|
||||
|
||||
---
|
||||
conf/master | 2 +-
|
||||
conf/minion | 2 +-
|
||||
conf/proxy | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/conf/master b/conf/master
|
||||
index ee98e51..6ef1c10 100644
|
||||
--- a/conf/master
|
||||
+++ b/conf/master
|
||||
@@ -509,7 +509,7 @@ syndic_user: salt
|
||||
#
|
||||
# Prior to changing this value, the master should be stopped and all Salt
|
||||
# caches should be cleared.
|
||||
-#hash_type: md5
|
||||
+hash_type: sha256
|
||||
|
||||
# The buffer size in the file server can be adjusted here:
|
||||
#file_buffer_size: 1048576
|
||||
diff --git a/conf/minion b/conf/minion
|
||||
index 9bc9408..07b706f 100644
|
||||
--- a/conf/minion
|
||||
+++ b/conf/minion
|
||||
@@ -559,7 +559,7 @@
|
||||
#
|
||||
# Warning: Prior to changing this value, the minion should be stopped and all
|
||||
# Salt caches should be cleared.
|
||||
-#hash_type: sha256
|
||||
+hash_type: sha256
|
||||
|
||||
# The Salt pillar is searched for locally if file_client is set to local. If
|
||||
# this is the case, and pillar data is defined, then the pillar_roots need to
|
||||
diff --git a/conf/proxy b/conf/proxy
|
||||
index 4e5cc34..8e5dd2d 100644
|
||||
--- a/conf/proxy
|
||||
+++ b/conf/proxy
|
||||
@@ -445,7 +445,7 @@
|
||||
#
|
||||
# Warning: Prior to changing this value, the minion should be stopped and all
|
||||
# Salt caches should be cleared.
|
||||
-#hash_type: sha256
|
||||
+hash_type: sha256
|
||||
|
||||
# The Salt pillar is searched for locally if file_client is set to local. If
|
||||
# this is the case, and pillar data is defined, then the pillar_roots need to
|
||||
--
|
||||
2.10.1
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 57f9c9cb438f13475ca437252770dc8d365d96cd Mon Sep 17 00:00:00 2001
|
||||
From: Christian McHugh <mchugh19@hotmail.com>
|
||||
Date: Thu, 10 Mar 2016 13:25:01 -0600
|
||||
Subject: [PATCH 06/17] Create salt-proxy instantiated service file
|
||||
|
||||
Add a systemd service file for salt-proxy.
|
||||
|
||||
Instantiate a new proxy service with proxyid=p8000:
|
||||
# systemctl enable salt-proxy\@p8000.service
|
||||
# systemctl start salt-proxy\@p8000.service
|
||||
---
|
||||
pkg/salt-proxy@.service | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
create mode 100644 pkg/salt-proxy@.service
|
||||
|
||||
diff --git a/pkg/salt-proxy@.service b/pkg/salt-proxy@.service
|
||||
new file mode 100644
|
||||
index 0000000..f97120a
|
||||
--- /dev/null
|
||||
+++ b/pkg/salt-proxy@.service
|
||||
@@ -0,0 +1,12 @@
|
||||
+[Unit]
|
||||
+Description=salt-proxy service
|
||||
+After=network.target
|
||||
+
|
||||
+[Service]
|
||||
+ExecStart=/usr/bin/salt-proxy --proxyid=%I
|
||||
+Type=simple
|
||||
+Restart=on-failure
|
||||
+RestartSec=5s
|
||||
+
|
||||
+[Install]
|
||||
+WantedBy=multi-user.target
|
||||
--
|
||||
2.10.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,113 +0,0 @@
|
||||
From 65d1dc94577e9bdbaa6c55f7057a78b2fe6010a7 Mon Sep 17 00:00:00 2001
|
||||
From: Justin Anderson <janderson@saltstack.com>
|
||||
Date: Tue, 23 Aug 2016 15:02:31 -0600
|
||||
Subject: [PATCH 11/17] Fix snapper_test for python26
|
||||
|
||||
* Use assertCountEqual instead of assertItemsEqual for Python 3
|
||||
* Skip one Snapper test on 2.6
|
||||
There's a slight difference in the diff comparison but we should be
|
||||
able to catch true failures here with 2.7.
|
||||
---
|
||||
tests/unit/modules/snapper_test.py | 41 ++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 33 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/tests/unit/modules/snapper_test.py b/tests/unit/modules/snapper_test.py
|
||||
index f27b2ba..43f8898 100644
|
||||
--- a/tests/unit/modules/snapper_test.py
|
||||
+++ b/tests/unit/modules/snapper_test.py
|
||||
@@ -6,19 +6,26 @@ Unit tests for the Snapper module
|
||||
:codeauthor: Pablo Suárez Hernández <psuarezhernandez@suse.de>
|
||||
'''
|
||||
|
||||
+# Import Python libs
|
||||
from __future__ import absolute_import
|
||||
+import sys
|
||||
|
||||
-from salttesting import TestCase
|
||||
+# Import Salt Testing libs
|
||||
+from salttesting import TestCase, skipIf
|
||||
from salttesting.mock import (
|
||||
+ NO_MOCK,
|
||||
+ NO_MOCK_REASON,
|
||||
MagicMock,
|
||||
patch,
|
||||
mock_open,
|
||||
)
|
||||
-
|
||||
-from salt.exceptions import CommandExecutionError
|
||||
from salttesting.helpers import ensure_in_syspath
|
||||
+
|
||||
ensure_in_syspath('../../')
|
||||
|
||||
+# Import Salt libs
|
||||
+import salt.ext.six as six
|
||||
+from salt.exceptions import CommandExecutionError
|
||||
from salt.modules import snapper
|
||||
|
||||
# Globals
|
||||
@@ -123,6 +130,13 @@ MODULE_RET = {
|
||||
"@@ -0,0 +1 @@\n"
|
||||
"+another foobar",
|
||||
},
|
||||
+ '/tmp/foo26': {
|
||||
+ 'comment': 'text file created',
|
||||
+ 'diff': "--- /.snapshots/55/snapshot/tmp/foo2 \n"
|
||||
+ "+++ /tmp/foo2 \n"
|
||||
+ "@@ -1,0 +1,1 @@\n"
|
||||
+ "+another foobar",
|
||||
+ },
|
||||
'/tmp/foo3': {
|
||||
'comment': 'binary file changed',
|
||||
'old_sha256_digest': 'e61f8b762d83f3b4aeb3689564b0ffbe54fa731a69a1e208dc9440ce0f69d19b',
|
||||
@@ -132,6 +146,7 @@ MODULE_RET = {
|
||||
}
|
||||
|
||||
|
||||
+@skipIf(NO_MOCK, NO_MOCK_REASON)
|
||||
class SnapperTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.dbus_mock = MagicMock()
|
||||
@@ -220,10 +235,16 @@ class SnapperTestCase(TestCase):
|
||||
@patch('salt.modules.snapper.snapper.GetComparison', MagicMock())
|
||||
@patch('salt.modules.snapper.snapper.GetFiles', MagicMock(return_value=DBUS_RET['GetFiles']))
|
||||
def test_status(self):
|
||||
- self.assertItemsEqual(snapper.status(), MODULE_RET['GETFILES'])
|
||||
- self.assertItemsEqual(snapper.status(num_pre="42", num_post=43), MODULE_RET['GETFILES'])
|
||||
- self.assertItemsEqual(snapper.status(num_pre=42), MODULE_RET['GETFILES'])
|
||||
- self.assertItemsEqual(snapper.status(num_post=43), MODULE_RET['GETFILES'])
|
||||
+ if six.PY3:
|
||||
+ self.assertCountEqual(snapper.status(), MODULE_RET['GETFILES'])
|
||||
+ self.assertCountEqual(snapper.status(num_pre="42", num_post=43), MODULE_RET['GETFILES'])
|
||||
+ self.assertCountEqual(snapper.status(num_pre=42), MODULE_RET['GETFILES'])
|
||||
+ self.assertCountEqual(snapper.status(num_post=43), MODULE_RET['GETFILES'])
|
||||
+ else:
|
||||
+ self.assertItemsEqual(snapper.status(), MODULE_RET['GETFILES'])
|
||||
+ self.assertItemsEqual(snapper.status(num_pre="42", num_post=43), MODULE_RET['GETFILES'])
|
||||
+ self.assertItemsEqual(snapper.status(num_pre=42), MODULE_RET['GETFILES'])
|
||||
+ self.assertItemsEqual(snapper.status(num_post=43), MODULE_RET['GETFILES'])
|
||||
|
||||
@patch('salt.modules.snapper.status', MagicMock(return_value=MODULE_RET['GETFILES']))
|
||||
def test_changed_files(self):
|
||||
@@ -268,7 +289,10 @@ class SnapperTestCase(TestCase):
|
||||
@patch('os.path.isfile', MagicMock(side_effect=[False, True]))
|
||||
@patch('salt.utils.fopen', mock_open(read_data=FILE_CONTENT["/tmp/foo2"]['post']))
|
||||
def test_diff_text_file(self):
|
||||
- self.assertEqual(snapper.diff(), {"/tmp/foo2": MODULE_RET['DIFF']['/tmp/foo2']})
|
||||
+ if sys.version_info < (2, 7):
|
||||
+ self.assertEqual(snapper.diff(), {"/tmp/foo2": MODULE_RET['DIFF']['/tmp/foo26']})
|
||||
+ else:
|
||||
+ self.assertEqual(snapper.diff(), {"/tmp/foo2": MODULE_RET['DIFF']['/tmp/foo2']})
|
||||
|
||||
@patch('salt.modules.snapper._get_num_interval', MagicMock(return_value=(55, 0)))
|
||||
@patch('salt.modules.snapper.snapper.MountSnapshot', MagicMock(
|
||||
@@ -278,6 +302,7 @@ class SnapperTestCase(TestCase):
|
||||
@patch('salt.modules.snapper._is_text_file', MagicMock(return_value=True))
|
||||
@patch('os.path.isfile', MagicMock(side_effect=[True, True, False, True]))
|
||||
@patch('os.path.isdir', MagicMock(return_value=False))
|
||||
+ @skipIf(sys.version_info < (2, 7), 'Python 2.7 required to compare diff properly')
|
||||
def test_diff_text_files(self):
|
||||
fopen_effect = [
|
||||
mock_open(read_data=FILE_CONTENT["/tmp/foo"]['pre']).return_value,
|
||||
--
|
||||
2.10.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 956c7636a7cd83de6afb80b1cd9f0621419497c5 Mon Sep 17 00:00:00 2001
|
||||
From: "C. R. Oldham" <cro@ncbt.org>
|
||||
Date: Wed, 21 Sep 2016 20:05:33 -0600
|
||||
Subject: [PATCH 12/17] Fix pkg.upgrade for zypper
|
||||
|
||||
---
|
||||
salt/modules/zypper.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py
|
||||
index b2a4e0b..49ce5ec 100644
|
||||
--- a/salt/modules/zypper.py
|
||||
+++ b/salt/modules/zypper.py
|
||||
@@ -1146,7 +1146,7 @@ def upgrade(refresh=True,
|
||||
if dryrun:
|
||||
# Creates a solver test case for debugging.
|
||||
log.info('Executing debugsolver and performing a dry-run dist-upgrade')
|
||||
- __zypper__.noraise.call(*cmd_update + ['--debug-solver'])
|
||||
+ __zypper__(systemd_scope=_systemd_scope()).noraise.call(*cmd_update + ['--debug-solver'])
|
||||
|
||||
if fromrepo:
|
||||
for repo in fromrepo:
|
||||
@@ -1167,6 +1167,7 @@ def upgrade(refresh=True,
|
||||
old = list_pkgs()
|
||||
|
||||
__zypper__(systemd_scope=_systemd_scope()).noraise.call(*cmd_update)
|
||||
+
|
||||
if __zypper__.exit_code not in __zypper__.SUCCESS_EXIT_CODES:
|
||||
ret['result'] = False
|
||||
else:
|
||||
--
|
||||
2.10.1
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 84bacc068ff10b33b5bd984459d6cfb73b1bf2c9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
||||
<psuarezhernandez@suse.com>
|
||||
Date: Fri, 30 Sep 2016 13:06:52 +0100
|
||||
Subject: [PATCH 13/17] Setting up OS grains for SLES Expanded Support (SUSE's
|
||||
Red Hat compatible platform)
|
||||
|
||||
core.py: quote style fixed
|
||||
---
|
||||
salt/grains/core.py | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/salt/grains/core.py b/salt/grains/core.py
|
||||
index 867924a..12a2959 100644
|
||||
--- a/salt/grains/core.py
|
||||
+++ b/salt/grains/core.py
|
||||
@@ -1038,6 +1038,7 @@ _OS_NAME_MAP = {
|
||||
'manjaro': 'Manjaro',
|
||||
'antergos': 'Antergos',
|
||||
'sles': 'SUSE',
|
||||
+ 'slesexpand': 'RES',
|
||||
'linuxmint': 'Mint',
|
||||
}
|
||||
|
||||
@@ -1057,6 +1058,7 @@ _OS_FAMILY_MAP = {
|
||||
'OEL': 'RedHat',
|
||||
'XCP': 'RedHat',
|
||||
'XenServer': 'RedHat',
|
||||
+ 'RES': 'RedHat',
|
||||
'Mandrake': 'Mandriva',
|
||||
'ESXi': 'VMWare',
|
||||
'Mint': 'Debian',
|
||||
--
|
||||
2.10.1
|
||||
|
@ -1,42 +0,0 @@
|
||||
From 3da08fe5187b0a7279b0fe6d24f969bfe1026e7a Mon Sep 17 00:00:00 2001
|
||||
From: Joerg Reuter <jreuter@yaina.de>
|
||||
Date: Wed, 12 Oct 2016 13:02:38 +0200
|
||||
Subject: [PATCH 14/17] - acl.delfacl: fix position of -X option to setfacl
|
||||
|
||||
Adjust linux_acl unit test argument ordering
|
||||
---
|
||||
salt/modules/linux_acl.py | 4 +++-
|
||||
tests/unit/modules/linux_acl_test.py | 2 +-
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/salt/modules/linux_acl.py b/salt/modules/linux_acl.py
|
||||
index c23bc8c..0f5c874 100644
|
||||
--- a/salt/modules/linux_acl.py
|
||||
+++ b/salt/modules/linux_acl.py
|
||||
@@ -250,10 +250,12 @@ def delfacl(acl_type, acl_name='', *args, **kwargs):
|
||||
|
||||
_raise_on_no_files(*args)
|
||||
|
||||
- cmd = 'setfacl -x'
|
||||
+ cmd = 'setfacl'
|
||||
if recursive:
|
||||
cmd += ' -R'
|
||||
|
||||
+ cmd += ' -x'
|
||||
+
|
||||
cmd = '{0} {1}:{2}'.format(cmd, _acl_prefix(acl_type), acl_name)
|
||||
|
||||
for dentry in args:
|
||||
diff --git a/tests/unit/modules/linux_acl_test.py b/tests/unit/modules/linux_acl_test.py
|
||||
index 1398636..36d3202 100644
|
||||
--- a/tests/unit/modules/linux_acl_test.py
|
||||
+++ b/tests/unit/modules/linux_acl_test.py
|
||||
@@ -193,4 +193,4 @@ class LinuxAclTestCase(TestCase):
|
||||
|
||||
def test_delfacl__recursive_w_multiple_args(self):
|
||||
linux_acl.delfacl(*(self.default_user_acl[:-1] + self.files), recursive=True)
|
||||
- self.cmdrun.assert_called_once_with('setfacl -x -R ' + ' '.join([self.default_user_acl_cmd.rpartition(':')[0]] + self.files), python_shell=False)
|
||||
+ self.cmdrun.assert_called_once_with('setfacl -R -x ' + ' '.join([self.default_user_acl_cmd.rpartition(':')[0]] + self.files), python_shell=False)
|
||||
--
|
||||
2.10.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From b784cb1d2dd3b190e8664c2a40e8d3c55ad4ad03 Mon Sep 17 00:00:00 2001
|
||||
From: Mihai Dinca <mdinca@suse.de>
|
||||
Date: Fri, 21 Oct 2016 16:25:04 +0200
|
||||
Subject: [PATCH 16/17] Fix pkg.latest_version when latest already installed
|
||||
|
||||
---
|
||||
salt/states/pkg.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/salt/states/pkg.py b/salt/states/pkg.py
|
||||
index 8492de7..9cecc07 100644
|
||||
--- a/salt/states/pkg.py
|
||||
+++ b/salt/states/pkg.py
|
||||
@@ -1679,7 +1679,7 @@ def latest(
|
||||
targets = {}
|
||||
problems = []
|
||||
for pkg in desired_pkgs:
|
||||
- if not avail[pkg]:
|
||||
+ if not avail.get(pkg):
|
||||
# Package either a) is up-to-date, or b) does not exist
|
||||
if not cur[pkg]:
|
||||
# Package does not exist
|
||||
--
|
||||
2.10.1
|
||||
|
@ -1,74 +0,0 @@
|
||||
From e572a2774e186681820c6e9fc6df65516eba2abf Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
||||
<psuarezhernandez@suse.com>
|
||||
Date: Mon, 31 Oct 2016 16:15:36 +0000
|
||||
Subject: [PATCH 17/17] Including resolver params for Zypper debug-solver
|
||||
|
||||
Now '--no-allow-vendor-change' and '--from' parameters are included
|
||||
into the zypper --debug-solver call before performing a dry-run dist-upgrade.
|
||||
---
|
||||
salt/modules/zypper.py | 15 ++++++++-------
|
||||
tests/unit/modules/zypper_test.py | 7 +++++++
|
||||
2 files changed, 15 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py
|
||||
index 49ce5ec..98451bf 100644
|
||||
--- a/salt/modules/zypper.py
|
||||
+++ b/salt/modules/zypper.py
|
||||
@@ -1136,6 +1136,10 @@ def upgrade(refresh=True,
|
||||
|
||||
cmd_update = (['dist-upgrade'] if dist_upgrade else ['update']) + ['--auto-agree-with-licenses']
|
||||
|
||||
+ if skip_verify:
|
||||
+ # The '--no-gpg-checks' needs to be placed before the Zypper command.
|
||||
+ cmd_update.insert(0, '--no-gpg-checks')
|
||||
+
|
||||
if refresh:
|
||||
refresh_db()
|
||||
|
||||
@@ -1143,11 +1147,6 @@ def upgrade(refresh=True,
|
||||
cmd_update.append('--dry-run')
|
||||
|
||||
if dist_upgrade:
|
||||
- if dryrun:
|
||||
- # Creates a solver test case for debugging.
|
||||
- log.info('Executing debugsolver and performing a dry-run dist-upgrade')
|
||||
- __zypper__(systemd_scope=_systemd_scope()).noraise.call(*cmd_update + ['--debug-solver'])
|
||||
-
|
||||
if fromrepo:
|
||||
for repo in fromrepo:
|
||||
cmd_update.extend(['--from', repo])
|
||||
@@ -1161,8 +1160,10 @@ def upgrade(refresh=True,
|
||||
else:
|
||||
log.warn('Disabling vendor changes is not supported on this Zypper version')
|
||||
|
||||
- if skip_verify:
|
||||
- cmd_update.append('--no-gpg-checks')
|
||||
+ if dryrun:
|
||||
+ # Creates a solver test case for debugging.
|
||||
+ log.info('Executing debugsolver and performing a dry-run dist-upgrade')
|
||||
+ __zypper__(systemd_scope=_systemd_scope()).noraise.call(*cmd_update + ['--debug-solver'])
|
||||
|
||||
old = list_pkgs()
|
||||
|
||||
diff --git a/tests/unit/modules/zypper_test.py b/tests/unit/modules/zypper_test.py
|
||||
index fe170b4..56f68b6 100644
|
||||
--- a/tests/unit/modules/zypper_test.py
|
||||
+++ b/tests/unit/modules/zypper_test.py
|
||||
@@ -359,6 +359,13 @@ class ZypperTestCase(TestCase):
|
||||
zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--dry-run')
|
||||
zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--dry-run', '--debug-solver')
|
||||
|
||||
+ with patch('salt.modules.zypper.list_pkgs', MagicMock(side_effect=[{"vim": "1.1"}, {"vim": "1.1"}])):
|
||||
+ ret = zypper.upgrade(dist_upgrade=True, dryrun=True, fromrepo=["Dummy", "Dummy2"], novendorchange=True)
|
||||
+ self.assertTrue(ret['result'])
|
||||
+ self.assertDictEqual(ret['changes'], {})
|
||||
+ zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--dry-run', '--from', "Dummy", '--from', 'Dummy2', '--no-allow-vendor-change')
|
||||
+ zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--dry-run', '--from', "Dummy", '--from', 'Dummy2', '--no-allow-vendor-change', '--debug-solver')
|
||||
+
|
||||
with patch('salt.modules.zypper.list_pkgs', MagicMock(side_effect=[{"vim": "1.1"}, {"vim": "1.2"}])):
|
||||
ret = zypper.upgrade(dist_upgrade=True, fromrepo=["Dummy", "Dummy2"], novendorchange=True)
|
||||
self.assertTrue(ret['result'])
|
||||
--
|
||||
2.10.1
|
||||
|
35
add-a-salt-minion-service-control-file.patch
Normal file
35
add-a-salt-minion-service-control-file.patch
Normal file
@ -0,0 +1,35 @@
|
||||
From 69eeaf17252a2912ed33f2160c14282c2ff703bc Mon Sep 17 00:00:00 2001
|
||||
From: Bo Maryniuk <bo@suse.de>
|
||||
Date: Wed, 18 Jan 2017 15:38:53 +0100
|
||||
Subject: [PATCH] Add a salt-minion service control file
|
||||
|
||||
---
|
||||
pkg/suse/salt-minion.service | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
create mode 100644 pkg/suse/salt-minion.service
|
||||
|
||||
diff --git a/pkg/suse/salt-minion.service b/pkg/suse/salt-minion.service
|
||||
new file mode 100644
|
||||
index 0000000000..1dbaa77755
|
||||
--- /dev/null
|
||||
+++ b/pkg/suse/salt-minion.service
|
||||
@@ -0,0 +1,15 @@
|
||||
+[Unit]
|
||||
+Description=The Salt Minion
|
||||
+After=network.target
|
||||
+
|
||||
+[Service]
|
||||
+Type=notify
|
||||
+NotifyAccess=all
|
||||
+LimitNOFILE=8192
|
||||
+ExecStart=/usr/bin/salt-minion
|
||||
+KillMode=process
|
||||
+Restart=on-failure
|
||||
+RestartSec=15
|
||||
+
|
||||
+[Install]
|
||||
+WantedBy=multi-user.target
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
252
add-options-for-dockerng.patch
Normal file
252
add-options-for-dockerng.patch
Normal file
@ -0,0 +1,252 @@
|
||||
From 95d547d3e6c98f927eaad77346b84b2ccef95627 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Calmer <mc@suse.de>
|
||||
Date: Thu, 19 Jan 2017 15:39:10 +0100
|
||||
Subject: [PATCH] add options for dockerng
|
||||
|
||||
* add buildargs option to dockerng.build
|
||||
* docker buildargs require minimal dockerpy 1.6.0 and docker version 1.9.0
|
||||
* update version in the docs
|
||||
* support dryrun for dockerng.sls_build
|
||||
|
||||
provide the possibility to put extra modules into the thin
|
||||
|
||||
added unit test for dockerng.sls_build dryrun option
|
||||
---
|
||||
salt/modules/dockerng.py | 51 ++++++++++++++++++-----
|
||||
tests/unit/modules/dockerng_test.py | 82 +++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 122 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/salt/modules/dockerng.py b/salt/modules/dockerng.py
|
||||
index 29af703ffa..c199fede1e 100644
|
||||
--- a/salt/modules/dockerng.py
|
||||
+++ b/salt/modules/dockerng.py
|
||||
@@ -28,13 +28,13 @@ to replace references to ``dockerng`` with ``docker``.
|
||||
Installation Prerequisites
|
||||
--------------------------
|
||||
|
||||
-This execution module requires at least version 1.4.0 of both docker-py_ and
|
||||
-Docker_. docker-py can easily be installed using :py:func:`pip.install
|
||||
-<salt.modules.pip.install>`:
|
||||
+This execution module requires at least version 1.6.0 of docker-py_ and
|
||||
+version 1.9.0 of Docker_. docker-py can easily be installed using
|
||||
+:py:func:`pip.install <salt.modules.pip.install>`:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
- salt myminion pip.install docker-py>=1.4.0
|
||||
+ salt myminion pip.install docker-py>=1.6.0
|
||||
|
||||
.. _docker-py: https://pypi.python.org/pypi/docker-py
|
||||
.. _Docker: https://www.docker.com/
|
||||
@@ -332,8 +332,8 @@ __func_alias__ = {
|
||||
}
|
||||
|
||||
# Minimum supported versions
|
||||
-MIN_DOCKER = (1, 6, 0)
|
||||
-MIN_DOCKER_PY = (1, 4, 0)
|
||||
+MIN_DOCKER = (1, 9, 0)
|
||||
+MIN_DOCKER_PY = (1, 6, 0)
|
||||
|
||||
VERSION_RE = r'([\d.]+)'
|
||||
|
||||
@@ -3557,7 +3557,8 @@ def build(path=None,
|
||||
rm=True,
|
||||
api_response=False,
|
||||
fileobj=None,
|
||||
- dockerfile=None):
|
||||
+ dockerfile=None,
|
||||
+ buildargs=None):
|
||||
'''
|
||||
Builds a docker image from a Dockerfile or a URL
|
||||
|
||||
@@ -3591,6 +3592,10 @@ def build(path=None,
|
||||
|
||||
.. versionadded:: develop
|
||||
|
||||
+ buildargs
|
||||
+ A dictionary of build arguments provided to the docker build process.
|
||||
+
|
||||
+
|
||||
**RETURN DATA**
|
||||
|
||||
A dictionary containing one or more of the following keys:
|
||||
@@ -3637,7 +3642,8 @@ def build(path=None,
|
||||
fileobj=fileobj,
|
||||
rm=rm,
|
||||
nocache=not cache,
|
||||
- dockerfile=dockerfile)
|
||||
+ dockerfile=dockerfile,
|
||||
+ buildargs=buildargs)
|
||||
ret = {'Time_Elapsed': time.time() - time_started}
|
||||
_clear_context()
|
||||
|
||||
@@ -5755,7 +5761,9 @@ def call(name, function, *args, **kwargs):
|
||||
raise CommandExecutionError('Missing function parameter')
|
||||
|
||||
# move salt into the container
|
||||
- thin_path = salt.utils.thin.gen_thin(__opts__['cachedir'])
|
||||
+ thin_path = salt.utils.thin.gen_thin(__opts__['cachedir'],
|
||||
+ extra_mods=__salt__['config.option']("thin_extra_mods", ''),
|
||||
+ so_mods=__salt__['config.option']("thin_so_mods", ''))
|
||||
with io.open(thin_path, 'rb') as file:
|
||||
_client_wrapper('put_archive', name, thin_dest_path, file)
|
||||
try:
|
||||
@@ -5865,7 +5873,7 @@ def sls(name, mods=None, saltenv='base', **kwargs):
|
||||
|
||||
|
||||
def sls_build(name, base='opensuse/python', mods=None, saltenv='base',
|
||||
- **kwargs):
|
||||
+ dryrun=False, **kwargs):
|
||||
'''
|
||||
Build a docker image using the specified sls modules and base image.
|
||||
|
||||
@@ -5873,6 +5881,24 @@ def sls_build(name, base='opensuse/python', mods=None, saltenv='base',
|
||||
can build a docker image inside myminion that results of applying those
|
||||
states by doing:
|
||||
|
||||
+ base
|
||||
+ the base image
|
||||
+
|
||||
+ mods
|
||||
+ the state modules to execute during build
|
||||
+
|
||||
+ saltenv
|
||||
+ the salt environment to use
|
||||
+
|
||||
+ dryrun: False
|
||||
+ when set to True the container will not be commited at the end of
|
||||
+ the build. The dryrun succeed also when the state contains errors.
|
||||
+
|
||||
+ **RETURN DATA**
|
||||
+
|
||||
+ A dictionary with the ID of the new container. In case of a dryrun,
|
||||
+ the state result is returned and the container gets removed.
|
||||
+
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
@@ -5905,9 +5931,12 @@ def sls_build(name, base='opensuse/python', mods=None, saltenv='base',
|
||||
# Now execute the state into the container
|
||||
ret = __salt__['dockerng.sls'](id_, mods, saltenv, **kwargs)
|
||||
# fail if the state was not successful
|
||||
- if not salt.utils.check_state_result(ret):
|
||||
+ if not dryrun and not salt.utils.check_state_result(ret):
|
||||
raise CommandExecutionError(ret)
|
||||
finally:
|
||||
__salt__['dockerng.stop'](id_)
|
||||
|
||||
+ if dryrun:
|
||||
+ __salt__['dockerng.rm'](id_)
|
||||
+ return ret
|
||||
return __salt__['dockerng.commit'](id_, name)
|
||||
diff --git a/tests/unit/modules/dockerng_test.py b/tests/unit/modules/dockerng_test.py
|
||||
index ec4901e275..546635577a 100644
|
||||
--- a/tests/unit/modules/dockerng_test.py
|
||||
+++ b/tests/unit/modules/dockerng_test.py
|
||||
@@ -680,6 +680,84 @@ class DockerngTestCase(TestCase):
|
||||
self.assertEqual(
|
||||
{'Id': 'ID2', 'Image': 'foo', 'Time_Elapsed': 42}, ret)
|
||||
|
||||
+ def test_sls_build_dryrun(self, *args):
|
||||
+ '''
|
||||
+ test build sls image in dryrun mode.
|
||||
+ '''
|
||||
+ docker_start_mock = MagicMock(
|
||||
+ return_value={})
|
||||
+ docker_create_mock = MagicMock(
|
||||
+ return_value={'Id': 'ID', 'Name': 'NAME'})
|
||||
+ docker_stop_mock = MagicMock(
|
||||
+ return_value={'state': {'old': 'running', 'new': 'stopped'},
|
||||
+ 'result': True})
|
||||
+ docker_rm_mock = MagicMock(
|
||||
+ return_value={})
|
||||
+
|
||||
+ docker_sls_mock = MagicMock(
|
||||
+ return_value={
|
||||
+ "file_|-/etc/test.sh_|-/etc/test.sh_|-managed": {
|
||||
+ "comment": "File /etc/test.sh is in the correct state",
|
||||
+ "name": "/etc/test.sh",
|
||||
+ "start_time": "07:04:26.834792",
|
||||
+ "result": True,
|
||||
+ "duration": 13.492,
|
||||
+ "__run_num__": 0,
|
||||
+ "changes": {}
|
||||
+ },
|
||||
+ "test_|-always-passes_|-foo_|-succeed_without_changes": {
|
||||
+ "comment": "Success!",
|
||||
+ "name": "foo",
|
||||
+ "start_time": "07:04:26.848915",
|
||||
+ "result": True,
|
||||
+ "duration": 0.363,
|
||||
+ "__run_num__": 1,
|
||||
+ "changes": {}
|
||||
+ }
|
||||
+ })
|
||||
+
|
||||
+ ret = None
|
||||
+ with patch.dict(dockerng_mod.__salt__, {
|
||||
+ 'dockerng.start': docker_start_mock,
|
||||
+ 'dockerng.create': docker_create_mock,
|
||||
+ 'dockerng.stop': docker_stop_mock,
|
||||
+ 'dockerng.rm': docker_rm_mock,
|
||||
+ 'dockerng.sls': docker_sls_mock}):
|
||||
+ ret = dockerng_mod.sls_build(
|
||||
+ 'foo',
|
||||
+ mods='foo',
|
||||
+ dryrun=True
|
||||
+ )
|
||||
+ docker_create_mock.assert_called_once_with(
|
||||
+ cmd='sleep infinity',
|
||||
+ image='opensuse/python', interactive=True, name='foo', tty=True)
|
||||
+ docker_start_mock.assert_called_once_with('ID')
|
||||
+ docker_sls_mock.assert_called_once_with('ID', 'foo', 'base')
|
||||
+ docker_stop_mock.assert_called_once_with('ID')
|
||||
+ docker_rm_mock.assert_called_once_with('ID')
|
||||
+ self.assertEqual(
|
||||
+ {
|
||||
+ "file_|-/etc/test.sh_|-/etc/test.sh_|-managed": {
|
||||
+ "comment": "File /etc/test.sh is in the correct state",
|
||||
+ "name": "/etc/test.sh",
|
||||
+ "start_time": "07:04:26.834792",
|
||||
+ "result": True,
|
||||
+ "duration": 13.492,
|
||||
+ "__run_num__": 0,
|
||||
+ "changes": {}
|
||||
+ },
|
||||
+ "test_|-always-passes_|-foo_|-succeed_without_changes": {
|
||||
+ "comment": "Success!",
|
||||
+ "name": "foo",
|
||||
+ "start_time": "07:04:26.848915",
|
||||
+ "result": True,
|
||||
+ "duration": 0.363,
|
||||
+ "__run_num__": 1,
|
||||
+ "changes": {}
|
||||
+ }
|
||||
+ },
|
||||
+ ret)
|
||||
+
|
||||
def test_call_success(self):
|
||||
'''
|
||||
test module calling inside containers
|
||||
@@ -694,6 +772,9 @@ class DockerngTestCase(TestCase):
|
||||
return_value={
|
||||
'retcode': 0
|
||||
})
|
||||
+ docker_config_mock = MagicMock(
|
||||
+ return_value=''
|
||||
+ )
|
||||
client = Mock()
|
||||
client.put_archive = Mock()
|
||||
|
||||
@@ -704,6 +785,7 @@ class DockerngTestCase(TestCase):
|
||||
dockerng_mod.__salt__, {
|
||||
'dockerng.run_all': docker_run_all_mock,
|
||||
'dockerng.copy_to': docker_copy_to_mock,
|
||||
+ 'config.option': docker_config_mock
|
||||
}),
|
||||
patch.dict(
|
||||
dockerng_mod.__context__, {
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
163
add-ssh-option-to-salt-ssh.patch
Normal file
163
add-ssh-option-to-salt-ssh.patch
Normal file
@ -0,0 +1,163 @@
|
||||
From c4c6610bf7314cc4c6ecf656bef341e2d1ca1587 Mon Sep 17 00:00:00 2001
|
||||
From: Matei Albu <malbu@suse.de>
|
||||
Date: Mon, 19 Dec 2016 16:54:52 +0100
|
||||
Subject: [PATCH] Add --ssh-option to salt-ssh
|
||||
|
||||
--ssh-option can be used to pass -o options to the ssh client.
|
||||
(cherry picked from commit 16f21e5)
|
||||
|
||||
Add spaces around =
|
||||
|
||||
Fix salt-ssh err when -ssh-option is missing
|
||||
---
|
||||
salt/client/ssh/__init__.py | 7 ++++++-
|
||||
salt/client/ssh/shell.py | 19 ++++++++++++++++---
|
||||
salt/utils/parsers.py | 18 +++++++++++++-----
|
||||
3 files changed, 35 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py
|
||||
index 23ec948fe0..bbef9d8de1 100644
|
||||
--- a/salt/client/ssh/__init__.py
|
||||
+++ b/salt/client/ssh/__init__.py
|
||||
@@ -295,6 +295,9 @@ class SSH(object):
|
||||
'remote_port_forwards': self.opts.get(
|
||||
'ssh_remote_port_forwards'
|
||||
),
|
||||
+ 'ssh_options': self.opts.get(
|
||||
+ 'ssh_options'
|
||||
+ )
|
||||
}
|
||||
if self.opts.get('rand_thin_dir'):
|
||||
self.defaults['thin_dir'] = os.path.join(
|
||||
@@ -693,6 +696,7 @@ class Single(object):
|
||||
identities_only=False,
|
||||
sudo_user=None,
|
||||
remote_port_forwards=None,
|
||||
+ ssh_options=None,
|
||||
**kwargs):
|
||||
# Get mine setting and mine_functions if defined in kwargs (from roster)
|
||||
self.mine = mine
|
||||
@@ -749,7 +753,8 @@ class Single(object):
|
||||
'mods': self.mods,
|
||||
'identities_only': identities_only,
|
||||
'sudo_user': sudo_user,
|
||||
- 'remote_port_forwards': remote_port_forwards}
|
||||
+ 'remote_port_forwards': remote_port_forwards,
|
||||
+ 'ssh_options': ssh_options}
|
||||
# Pre apply changeable defaults
|
||||
self.minion_opts = {
|
||||
'grains_cache': True,
|
||||
diff --git a/salt/client/ssh/shell.py b/salt/client/ssh/shell.py
|
||||
index f78cb623e1..613660fe34 100644
|
||||
--- a/salt/client/ssh/shell.py
|
||||
+++ b/salt/client/ssh/shell.py
|
||||
@@ -64,7 +64,8 @@ class Shell(object):
|
||||
mods=None,
|
||||
identities_only=False,
|
||||
sudo_user=None,
|
||||
- remote_port_forwards=None):
|
||||
+ remote_port_forwards=None,
|
||||
+ ssh_options=None):
|
||||
self.opts = opts
|
||||
# ssh <ipv6>, but scp [<ipv6]:/path
|
||||
self.host = host.strip('[]')
|
||||
@@ -78,6 +79,7 @@ class Shell(object):
|
||||
self.mods = mods
|
||||
self.identities_only = identities_only
|
||||
self.remote_port_forwards = remote_port_forwards
|
||||
+ self.ssh_options = ssh_options
|
||||
|
||||
def get_error(self, errstr):
|
||||
'''
|
||||
@@ -169,6 +171,12 @@ class Shell(object):
|
||||
ret.append('-o {0} '.format(option))
|
||||
return ''.join(ret)
|
||||
|
||||
+ def _ssh_opts(self):
|
||||
+ if self.ssh_options:
|
||||
+ return ' '.join(['-o {0}'.format(opt)
|
||||
+ for opt in self.ssh_options])
|
||||
+ return ''
|
||||
+
|
||||
def _copy_id_str_old(self):
|
||||
'''
|
||||
Return the string to execute ssh-copy-id
|
||||
@@ -176,11 +184,12 @@ class Shell(object):
|
||||
if self.passwd:
|
||||
# Using single quotes prevents shell expansion and
|
||||
# passwords containing '$'
|
||||
- return "{0} {1} '{2} -p {3} {4}@{5}'".format(
|
||||
+ return "{0} {1} '{2} -p {3} {4} {5}@{6}'".format(
|
||||
'ssh-copy-id',
|
||||
'-i {0}.pub'.format(self.priv),
|
||||
self._passwd_opts(),
|
||||
self.port,
|
||||
+ self._ssh_opts(),
|
||||
self.user,
|
||||
self.host)
|
||||
return None
|
||||
@@ -193,11 +202,12 @@ class Shell(object):
|
||||
if self.passwd:
|
||||
# Using single quotes prevents shell expansion and
|
||||
# passwords containing '$'
|
||||
- return "{0} {1} {2} -p {3} {4}@{5}".format(
|
||||
+ return "{0} {1} {2} -p {3} {4} {5}@{6}".format(
|
||||
'ssh-copy-id',
|
||||
'-i {0}.pub'.format(self.priv),
|
||||
self._passwd_opts(),
|
||||
self.port,
|
||||
+ self._ssh_opts(),
|
||||
self.user,
|
||||
self.host)
|
||||
return None
|
||||
@@ -229,6 +239,9 @@ class Shell(object):
|
||||
if ssh != 'scp' and self.remote_port_forwards:
|
||||
command.append(' '.join(['-R {0}'.format(item)
|
||||
for item in self.remote_port_forwards.split(',')]))
|
||||
+ if self.ssh_options:
|
||||
+ command.append(self._ssh_opts())
|
||||
+
|
||||
command.append(cmd)
|
||||
|
||||
return ' '.join(command)
|
||||
diff --git a/salt/utils/parsers.py b/salt/utils/parsers.py
|
||||
index 6330ed6596..c38506f3c5 100644
|
||||
--- a/salt/utils/parsers.py
|
||||
+++ b/salt/utils/parsers.py
|
||||
@@ -2828,11 +2828,11 @@ class SaltSSHOptionParser(six.with_metaclass(OptionParserMeta,
|
||||
help='Pass a JID to be used instead of generating one.'
|
||||
)
|
||||
|
||||
- ports_group = optparse.OptionGroup(
|
||||
- self, 'Port Forwarding Options',
|
||||
- 'Parameters for setting up SSH port forwarding.'
|
||||
+ ssh_group = optparse.OptionGroup(
|
||||
+ self, 'SSH Options',
|
||||
+ 'Parameters for the SSH client.'
|
||||
)
|
||||
- ports_group.add_option(
|
||||
+ ssh_group.add_option(
|
||||
'--remote-port-forwards',
|
||||
dest='ssh_remote_port_forwards',
|
||||
help='Setup remote port forwarding using the same syntax as with '
|
||||
@@ -2840,7 +2840,15 @@ class SaltSSHOptionParser(six.with_metaclass(OptionParserMeta,
|
||||
'forwarding definitions will be translated into multiple '
|
||||
'-R parameters.'
|
||||
)
|
||||
- self.add_option_group(ports_group)
|
||||
+ ssh_group.add_option(
|
||||
+ '--ssh-option',
|
||||
+ dest='ssh_options',
|
||||
+ action='append',
|
||||
+ help='Equivalent to the -o ssh command option. Passes options to '
|
||||
+ 'the SSH client in the format used in the client configuration file. '
|
||||
+ 'Can be used multiple times.'
|
||||
+ )
|
||||
+ self.add_option_group(ssh_group)
|
||||
|
||||
auth_group = optparse.OptionGroup(
|
||||
self, 'Authentication Options',
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
116
add-yum-plugin.patch
Normal file
116
add-yum-plugin.patch
Normal file
@ -0,0 +1,116 @@
|
||||
From a0523ac82a1dcca7a7c77f9b3816f237f211b94e Mon Sep 17 00:00:00 2001
|
||||
From: Bo Maryniuk <bo@suse.de>
|
||||
Date: Thu, 29 Sep 2016 17:00:14 +0200
|
||||
Subject: [PATCH] Add YUM plugin
|
||||
|
||||
* Add plugin for Yum-Salt integration
|
||||
* Add configuration for the yumnotify plugin
|
||||
* Fixes wrong 'enabled' opts for yumnotify plugin
|
||||
---
|
||||
scripts/yum/plugins/README.md | 20 ++++++++++++++
|
||||
scripts/yum/plugins/yumnotify.conf | 2 ++
|
||||
scripts/yum/plugins/yumnotify.py | 55 ++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 77 insertions(+)
|
||||
create mode 100644 scripts/yum/plugins/README.md
|
||||
create mode 100644 scripts/yum/plugins/yumnotify.conf
|
||||
create mode 100644 scripts/yum/plugins/yumnotify.py
|
||||
|
||||
diff --git a/scripts/yum/plugins/README.md b/scripts/yum/plugins/README.md
|
||||
new file mode 100644
|
||||
index 0000000000..cb3abd2260
|
||||
--- /dev/null
|
||||
+++ b/scripts/yum/plugins/README.md
|
||||
@@ -0,0 +1,20 @@
|
||||
+## What it is
|
||||
+
|
||||
+Plugin which provides a notification mechanism to Salt, if Yum is
|
||||
+used outside of it.
|
||||
+
|
||||
+## Installation
|
||||
+
|
||||
+Configuration files are going to:
|
||||
+
|
||||
+ `/etc/yum/pluginconf.d/[name].conf`
|
||||
+
|
||||
+Plugin itself goes to:
|
||||
+
|
||||
+ `/usr/share/yum-plugins/[name].conf`
|
||||
+
|
||||
+## Permissions
|
||||
+
|
||||
+User: root
|
||||
+Group: root
|
||||
+Mode: 644
|
||||
diff --git a/scripts/yum/plugins/yumnotify.conf b/scripts/yum/plugins/yumnotify.conf
|
||||
new file mode 100644
|
||||
index 0000000000..8e4d76c728
|
||||
--- /dev/null
|
||||
+++ b/scripts/yum/plugins/yumnotify.conf
|
||||
@@ -0,0 +1,2 @@
|
||||
+[main]
|
||||
+enabled=1
|
||||
diff --git a/scripts/yum/plugins/yumnotify.py b/scripts/yum/plugins/yumnotify.py
|
||||
new file mode 100644
|
||||
index 0000000000..268e1e9531
|
||||
--- /dev/null
|
||||
+++ b/scripts/yum/plugins/yumnotify.py
|
||||
@@ -0,0 +1,55 @@
|
||||
+# Copyright (c) 2016 SUSE Linux LLC
|
||||
+# All Rights Reserved.
|
||||
+#
|
||||
+# Author: Bo Maryniuk <bo@suse.de>
|
||||
+
|
||||
+from yum.plugins import TYPE_CORE
|
||||
+from yum import config
|
||||
+import os
|
||||
+import hashlib
|
||||
+
|
||||
+CK_PATH = "/var/cache/salt/minion/rpmdb.cookie"
|
||||
+RPM_PATH = "/var/lib/rpm/Packages"
|
||||
+
|
||||
+requires_api_version = '2.5'
|
||||
+plugin_type = TYPE_CORE
|
||||
+
|
||||
+
|
||||
+def _get_mtime():
|
||||
+ """
|
||||
+ Get the modified time of the RPM Database.
|
||||
+
|
||||
+ Returns:
|
||||
+ Unix ticks
|
||||
+ """
|
||||
+ return os.path.exists(RPM_PATH) and int(os.path.getmtime(RPM_PATH)) or 0
|
||||
+
|
||||
+
|
||||
+def _get_checksum():
|
||||
+ """
|
||||
+ Get the checksum of the RPM Database.
|
||||
+
|
||||
+ Returns:
|
||||
+ hexdigest
|
||||
+ """
|
||||
+ digest = hashlib.md5()
|
||||
+ with open(RPM_PATH, "rb") as rpm_db_fh:
|
||||
+ while True:
|
||||
+ buff = rpm_db_fh.read(0x1000)
|
||||
+ if not buff:
|
||||
+ break
|
||||
+ digest.update(buff)
|
||||
+ return digest.hexdigest()
|
||||
+
|
||||
+
|
||||
+def posttrans_hook(conduit):
|
||||
+ """
|
||||
+ Hook after the package installation transaction.
|
||||
+
|
||||
+ :param conduit:
|
||||
+ :return:
|
||||
+ """
|
||||
+ # Integrate Yum with Salt
|
||||
+ if 'SALT_RUNNING' not in os.environ:
|
||||
+ with open(CK_PATH, 'w') as ck_fh:
|
||||
+ ck_fh.write('{chksum} {mtime}\n'.format(chksum=_get_checksum(), mtime=_get_mtime()))
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 484b0fa0250b4adc0da34d033ebc5e019e3e1240 Mon Sep 17 00:00:00 2001
|
||||
From 2616f36c3a1131a73546449d33d917783f6f1f7b Mon Sep 17 00:00:00 2001
|
||||
From: Bo Maryniuk <bo@suse.de>
|
||||
Date: Mon, 9 May 2016 10:33:44 +0200
|
||||
Subject: [PATCH 07/17] Add zypp-notify plugin
|
||||
Subject: [PATCH] Add zypp-notify plugin
|
||||
|
||||
* Add unit test to the libzypp drift detector plugin
|
||||
---
|
||||
@ -17,7 +17,7 @@ Subject: [PATCH 07/17] Add zypp-notify plugin
|
||||
|
||||
diff --git a/scripts/zypper/plugins/commit/README.md b/scripts/zypper/plugins/commit/README.md
|
||||
new file mode 100644
|
||||
index 0000000..01c8917
|
||||
index 0000000000..01c8917c8e
|
||||
--- /dev/null
|
||||
+++ b/scripts/zypper/plugins/commit/README.md
|
||||
@@ -0,0 +1,3 @@
|
||||
@ -26,7 +26,7 @@ index 0000000..01c8917
|
||||
+Plugins here are required to interact with SUSE Manager in conjunction of SaltStack and Zypper.
|
||||
diff --git a/scripts/zypper/plugins/commit/zyppnotify b/scripts/zypper/plugins/commit/zyppnotify
|
||||
new file mode 100755
|
||||
index 0000000..268298b
|
||||
index 0000000000..268298b108
|
||||
--- /dev/null
|
||||
+++ b/scripts/zypper/plugins/commit/zyppnotify
|
||||
@@ -0,0 +1,59 @@
|
||||
@ -91,7 +91,7 @@ index 0000000..268298b
|
||||
+DriftDetector().main()
|
||||
diff --git a/tests/unit/zypp_plugins_test.py b/tests/unit/zypp_plugins_test.py
|
||||
new file mode 100644
|
||||
index 0000000..550403c
|
||||
index 0000000000..550403cc24
|
||||
--- /dev/null
|
||||
+++ b/tests/unit/zypp_plugins_test.py
|
||||
@@ -0,0 +1,51 @@
|
||||
@ -148,7 +148,7 @@ index 0000000..550403c
|
||||
+ run_tests(ZyppPluginsTestCase, needs_daemon=False)
|
||||
diff --git a/tests/zypp_plugin.py b/tests/zypp_plugin.py
|
||||
new file mode 100644
|
||||
index 0000000..218f703
|
||||
index 0000000000..218f703811
|
||||
--- /dev/null
|
||||
+++ b/tests/zypp_plugin.py
|
||||
@@ -0,0 +1,64 @@
|
||||
@ -217,5 +217,6 @@ index 0000000..218f703
|
||||
+ '''
|
||||
+ self.closed = True
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
26
avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch
Normal file
26
avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From b338b21fe340ee4efa0045894315fcf20be1dc49 Mon Sep 17 00:00:00 2001
|
||||
From: Silvio Moioli <smoioli@suse.de>
|
||||
Date: Wed, 14 Dec 2016 10:33:39 +0100
|
||||
Subject: [PATCH] Avoid failures on SLES 12 SP2 because of new systemd
|
||||
TaskMax limit (bsc#985112)
|
||||
|
||||
---
|
||||
pkg/salt-master.service | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/pkg/salt-master.service b/pkg/salt-master.service
|
||||
index 59be50301a..ecd3edd467 100644
|
||||
--- a/pkg/salt-master.service
|
||||
+++ b/pkg/salt-master.service
|
||||
@@ -6,6 +6,7 @@ After=network.target
|
||||
LimitNOFILE=16384
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/salt-master
|
||||
+TasksMax=infinity
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
From f212d9ae3ecca09808de8a770b1099d94189a2df Mon Sep 17 00:00:00 2001
|
||||
From 79f9f4c06813d70cd03ad32c6c8ef8fec1656e88 Mon Sep 17 00:00:00 2001
|
||||
From: Mihai Dinca <mdinca@suse.de>
|
||||
Date: Fri, 14 Oct 2016 09:04:47 +0200
|
||||
Subject: [PATCH 15/17] Change travis configuration file to use salt-toaster
|
||||
Subject: [PATCH] Change travis configuration file to use salt-toaster
|
||||
|
||||
---
|
||||
.travis.yml | 47 +++++++++++++++++++----------------------------
|
||||
1 file changed, 19 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/.travis.yml b/.travis.yml
|
||||
index 7b4c8ce..3101efb 100644
|
||||
index 7b4c8ce0e5..3101efb372 100644
|
||||
--- a/.travis.yml
|
||||
+++ b/.travis.yml
|
||||
@@ -1,35 +1,26 @@
|
||||
@ -67,5 +67,6 @@ index 7b4c8ce..3101efb 100644
|
||||
- on_failure: change
|
||||
+script: make $TARGET PYTEST_CFG=$PYTEST_CFG
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 166ee0f5747234024a89a0a68667dec5db98cac7 Mon Sep 17 00:00:00 2001
|
||||
From df521307c4bff21ab7891e0086fc4dc8b7c2207c Mon Sep 17 00:00:00 2001
|
||||
From: Bo Maryniuk <bo@suse.de>
|
||||
Date: Mon, 18 Jan 2016 16:28:48 +0100
|
||||
Subject: [PATCH 03/17] Check if byte strings are properly encoded in UTF-8
|
||||
Subject: [PATCH] Check if byte strings are properly encoded in UTF-8
|
||||
|
||||
Rename keywords arguments variable to a default name.
|
||||
---
|
||||
@ -9,10 +9,10 @@ Rename keywords arguments variable to a default name.
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py
|
||||
index f3e9d68..b2a4e0b 100644
|
||||
index 53837e5e73..75e529c3f9 100644
|
||||
--- a/salt/modules/zypper.py
|
||||
+++ b/salt/modules/zypper.py
|
||||
@@ -360,9 +360,9 @@ def info_installed(*names, **kwargs):
|
||||
@@ -366,9 +366,9 @@ def info_installed(*names, **kwargs):
|
||||
summary, description.
|
||||
|
||||
:param errors:
|
||||
@ -25,7 +25,7 @@ index f3e9d68..b2a4e0b 100644
|
||||
|
||||
Valid attributes are:
|
||||
ignore, report
|
||||
@@ -375,7 +375,8 @@ def info_installed(*names, **kwargs):
|
||||
@@ -381,7 +381,8 @@ def info_installed(*names, **kwargs):
|
||||
salt '*' pkg.info_installed <package1> <package2> <package3> ...
|
||||
salt '*' pkg.info_installed <package1> attr=version,vendor
|
||||
salt '*' pkg.info_installed <package1> <package2> <package3> ... attr=version,vendor
|
||||
@ -35,8 +35,8 @@ index f3e9d68..b2a4e0b 100644
|
||||
'''
|
||||
ret = dict()
|
||||
for pkg_name, pkg_nfo in __salt__['lowpkg.info'](*names, **kwargs).items():
|
||||
@@ -386,7 +387,7 @@ def info_installed(*names, **kwargs):
|
||||
# Check, if string is encoded in a proper UTF-8
|
||||
@@ -395,7 +396,7 @@ def info_installed(*names, **kwargs):
|
||||
else:
|
||||
value_ = value.decode('UTF-8', 'ignore').encode('UTF-8', 'ignore')
|
||||
if value != value_:
|
||||
- value = kwargs.get('errors') and value_ or 'N/A (invalid UTF-8)'
|
||||
@ -45,5 +45,6 @@ index f3e9d68..b2a4e0b 100644
|
||||
if key == 'source_rpm':
|
||||
t_nfo['source'] = value
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From c52d045e4b292baf95e68b6c61c6162d536cf500 Mon Sep 17 00:00:00 2001
|
||||
From 7eeddadbf5ad309045b77762ac9f2f526af83b03 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Calmer <mc@suse.de>
|
||||
Date: Fri, 4 Mar 2016 09:51:22 +0100
|
||||
Subject: [PATCH 04/17] do not generate a date in a comment to prevent rebuilds
|
||||
Subject: [PATCH] do not generate a date in a comment to prevent rebuilds
|
||||
(bsc#969407)
|
||||
|
||||
---
|
||||
@ -9,10 +9,10 @@ Subject: [PATCH 04/17] do not generate a date in a comment to prevent rebuilds
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index c0fd278..dbcccb6 100755
|
||||
index f9e9437e71..2356b2ada1 100755
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -659,8 +659,7 @@ class Clean(clean):
|
||||
@@ -667,8 +667,7 @@ class Clean(clean):
|
||||
|
||||
|
||||
INSTALL_VERSION_TEMPLATE = '''\
|
||||
@ -23,5 +23,6 @@ index c0fd278..dbcccb6 100755
|
||||
from salt.version import SaltStackVersion
|
||||
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
26
fix-case-in-os_family-for-suse.patch
Normal file
26
fix-case-in-os_family-for-suse.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From 036be5f7300bbf6c5ef3967b5cc935fd678cd1e1 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Calmer <mc@suse.de>
|
||||
Date: Thu, 23 Feb 2017 12:01:05 +0100
|
||||
Subject: [PATCH] fix case in os_family for Suse
|
||||
|
||||
---
|
||||
salt/modules/service.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/salt/modules/service.py b/salt/modules/service.py
|
||||
index bb7133ee99..49186e4c9d 100644
|
||||
--- a/salt/modules/service.py
|
||||
+++ b/salt/modules/service.py
|
||||
@@ -53,7 +53,7 @@ def __virtual__():
|
||||
if __grains__['kernel'] != 'Linux':
|
||||
return (False, 'Non Linux OSes are not supported')
|
||||
# SUSE >=12.0 uses systemd
|
||||
- if __grains__.get('os_family', '') == 'SUSE':
|
||||
+ if __grains__.get('os_family', '') == 'Suse':
|
||||
try:
|
||||
# osrelease might be in decimal format (e.g. "12.1"), or for
|
||||
# SLES might include service pack (e.g. "11 SP3"), so split on
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
196
fix-regression-in-file.get_managed-add-unit-tests.patch
Normal file
196
fix-regression-in-file.get_managed-add-unit-tests.patch
Normal file
@ -0,0 +1,196 @@
|
||||
From 89fd1a83d282a10728077a08466627271a052733 Mon Sep 17 00:00:00 2001
|
||||
From: Erik Johnson <palehose@gmail.com>
|
||||
Date: Wed, 1 Mar 2017 10:19:33 -0600
|
||||
Subject: [PATCH] Fix regression in file.get_managed, add unit tests
|
||||
|
||||
This is no longer needed since we're invoking the state module directly
|
||||
and not via the state compiler.
|
||||
|
||||
* Fix regression in file.get_managed when skip_verify=True
|
||||
* Add integration tests for remote file sources
|
||||
* Remove next(iter()) extraction
|
||||
---
|
||||
salt/modules/file.py | 6 +--
|
||||
salt/states/archive.py | 11 ----
|
||||
tests/integration/states/file.py | 105 +++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 108 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/salt/modules/file.py b/salt/modules/file.py
|
||||
index 8f0c6914b6..381800bc1a 100644
|
||||
--- a/salt/modules/file.py
|
||||
+++ b/salt/modules/file.py
|
||||
@@ -3745,13 +3745,13 @@ def get_managed(
|
||||
if cached_dest and (source_hash or skip_verify):
|
||||
htype = source_sum.get('hash_type', 'sha256')
|
||||
cached_sum = get_hash(cached_dest, form=htype)
|
||||
- if cached_sum != source_sum['hsum']:
|
||||
- cache_refetch = True
|
||||
- elif skip_verify:
|
||||
+ if skip_verify:
|
||||
# prev: if skip_verify or cached_sum == source_sum['hsum']:
|
||||
# but `cached_sum == source_sum['hsum']` is elliptical as prev if
|
||||
sfn = cached_dest
|
||||
source_sum = {'hsum': cached_sum, 'hash_type': htype}
|
||||
+ elif cached_sum != source_sum['hsum']:
|
||||
+ cache_refetch = True
|
||||
|
||||
# If we didn't have the template or remote file, let's get it
|
||||
# Similarly when the file has been updated and the cache has to be refreshed
|
||||
diff --git a/salt/states/archive.py b/salt/states/archive.py
|
||||
index c5df213620..46146e971e 100644
|
||||
--- a/salt/states/archive.py
|
||||
+++ b/salt/states/archive.py
|
||||
@@ -897,17 +897,6 @@ def extracted(name,
|
||||
ret['comment'] = '\n'.join([str(x) for x in file_result])
|
||||
return ret
|
||||
|
||||
- # Get actual state result. The state.single return is a single-element
|
||||
- # dictionary with the state's unique ID at the top level, and its value
|
||||
- # being the state's return dictionary. next(iter(dict_name)) will give
|
||||
- # us the value of the first key, so
|
||||
- # file_result[next(iter(file_result))] will give us the results of the
|
||||
- # state.single we just ran.
|
||||
- try:
|
||||
- file_result = file_result[next(iter(file_result))]
|
||||
- except AttributeError:
|
||||
- pass
|
||||
-
|
||||
try:
|
||||
if not file_result['result']:
|
||||
log.debug('failed to download {0}'.format(source_match))
|
||||
diff --git a/tests/integration/states/file.py b/tests/integration/states/file.py
|
||||
index d63f318064..faa83d00e8 100644
|
||||
--- a/tests/integration/states/file.py
|
||||
+++ b/tests/integration/states/file.py
|
||||
@@ -9,15 +9,22 @@ from __future__ import absolute_import
|
||||
from distutils.version import LooseVersion
|
||||
import errno
|
||||
import glob
|
||||
+import logging
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import shutil
|
||||
+import socket
|
||||
import stat
|
||||
import tempfile
|
||||
import textwrap
|
||||
+import threading
|
||||
+import tornado.ioloop
|
||||
+import tornado.web
|
||||
import filecmp
|
||||
|
||||
+log = logging.getLogger(__name__)
|
||||
+
|
||||
# Import 3rd-party libs
|
||||
from salt.ext.six.moves import range # pylint: disable=import-error,redefined-builtin
|
||||
|
||||
@@ -2392,6 +2399,104 @@ class FileTest(integration.ModuleCase, integration.SaltReturnAssertsMixIn):
|
||||
if check_file:
|
||||
self.run_function('file.remove', [file])
|
||||
|
||||
+
|
||||
+PORT = 9999
|
||||
+FILE_SOURCE = 'http://localhost:{0}/grail/scene33'.format(PORT)
|
||||
+FILE_HASH = 'd2feb3beb323c79fc7a0f44f1408b4a3'
|
||||
+STATE_DIR = os.path.join(integration.FILES, 'file', 'base')
|
||||
+
|
||||
+
|
||||
+class RemoteFileTest(integration.ModuleCase, integration.SaltReturnAssertsMixIn):
|
||||
+ '''
|
||||
+ Uses a local tornado webserver to test http(s) file.managed states with and
|
||||
+ without skip_verify
|
||||
+ '''
|
||||
+ @classmethod
|
||||
+ def webserver(cls):
|
||||
+ '''
|
||||
+ method to start tornado static web app
|
||||
+ '''
|
||||
+ application = tornado.web.Application([
|
||||
+ (r'/(.*)', tornado.web.StaticFileHandler, {'path': STATE_DIR})
|
||||
+ ])
|
||||
+ application.listen(PORT)
|
||||
+ tornado.ioloop.IOLoop.instance().start()
|
||||
+
|
||||
+ @classmethod
|
||||
+ def setUpClass(cls):
|
||||
+ '''
|
||||
+ start tornado app on thread and wait until it is running
|
||||
+ '''
|
||||
+ cls.server_thread = threading.Thread(target=cls.webserver)
|
||||
+ cls.server_thread.daemon = True
|
||||
+ cls.server_thread.start()
|
||||
+ # check if tornado app is up
|
||||
+ port_closed = True
|
||||
+ while port_closed:
|
||||
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
+ result = sock.connect_ex(('127.0.0.1', PORT))
|
||||
+ if result == 0:
|
||||
+ port_closed = False
|
||||
+
|
||||
+ @classmethod
|
||||
+ def tearDownClass(cls):
|
||||
+ tornado.ioloop.IOLoop.instance().stop()
|
||||
+ cls.server_thread.join()
|
||||
+
|
||||
+ def setUp(self):
|
||||
+ fd_, self.name = tempfile.mkstemp(dir=integration.TMP)
|
||||
+ try:
|
||||
+ os.close(fd_)
|
||||
+ except OSError as exc:
|
||||
+ if exc.errno != errno.EBADF:
|
||||
+ raise exc
|
||||
+ # Remove the file that mkstemp just created so that the states can test
|
||||
+ # creating a new file instead of a diff from a zero-length file.
|
||||
+ self.tearDown()
|
||||
+
|
||||
+ def tearDown(self):
|
||||
+ try:
|
||||
+ os.remove(self.name)
|
||||
+ except OSError as exc:
|
||||
+ if exc.errno != errno.ENOENT:
|
||||
+ raise exc
|
||||
+
|
||||
+ def test_file_managed_http_source_no_hash(self):
|
||||
+ '''
|
||||
+ Test a remote file with no hash
|
||||
+ '''
|
||||
+ ret = self.run_state('file.managed',
|
||||
+ name=self.name,
|
||||
+ source=FILE_SOURCE,
|
||||
+ skip_verify=False)
|
||||
+ log.debug('ret = %s', ret)
|
||||
+ # This should fail because no hash was provided
|
||||
+ self.assertSaltFalseReturn(ret)
|
||||
+
|
||||
+ def test_file_managed_http_source(self):
|
||||
+ '''
|
||||
+ Test a remote file with no hash
|
||||
+ '''
|
||||
+ ret = self.run_state('file.managed',
|
||||
+ name=self.name,
|
||||
+ source=FILE_SOURCE,
|
||||
+ source_hash=FILE_HASH,
|
||||
+ skip_verify=False)
|
||||
+ log.debug('ret = %s', ret)
|
||||
+ self.assertSaltTrueReturn(ret)
|
||||
+
|
||||
+ def test_file_managed_http_source_skip_verify(self):
|
||||
+ '''
|
||||
+ Test a remote file using skip_verify
|
||||
+ '''
|
||||
+ ret = self.run_state('file.managed',
|
||||
+ name=self.name,
|
||||
+ source=FILE_SOURCE,
|
||||
+ skip_verify=True)
|
||||
+ log.debug('ret = %s', ret)
|
||||
+ self.assertSaltTrueReturn(ret)
|
||||
+
|
||||
+
|
||||
if __name__ == '__main__':
|
||||
from integration import run_tests
|
||||
run_tests(FileTest)
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e915b72abc48bfa3b3a511c3803153fa44cace23 Mon Sep 17 00:00:00 2001
|
||||
From 54fa5d2b6d47d242e98e9a7f4cc597e03084d4d2 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Calmer <mc@suse.de>
|
||||
Date: Tue, 21 Jun 2016 13:12:48 +0200
|
||||
Subject: [PATCH 09/17] fix salt --summary to count not responding minions
|
||||
Subject: [PATCH] fix salt --summary to count not responding minions
|
||||
correctly (bsc#972311)
|
||||
|
||||
In case a minion is not responding a dict is returned instead of a string.
|
||||
@ -10,10 +10,10 @@ In case a minion is not responding a dict is returned instead of a string.
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/salt/cli/salt.py b/salt/cli/salt.py
|
||||
index 6b18b6f..2fea2f3 100644
|
||||
index 1fc9a83508..88ac65e7c2 100644
|
||||
--- a/salt/cli/salt.py
|
||||
+++ b/salt/cli/salt.py
|
||||
@@ -264,7 +264,9 @@ class SaltCMD(parsers.SaltCMDOptionParser):
|
||||
@@ -281,7 +281,9 @@ class SaltCMD(parsers.SaltCMDOptionParser):
|
||||
not_connected_minions = []
|
||||
failed_minions = []
|
||||
for each_minion in ret:
|
||||
@ -25,5 +25,6 @@ index 6b18b6f..2fea2f3 100644
|
||||
isinstance(minion_ret, string_types)
|
||||
and minion_ret.startswith("Minion did not return")
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
From e955cae5e0ba5fb5348edad433a01f11f1ca887a Mon Sep 17 00:00:00 2001
|
||||
From 7bbbd3b6ebaf3988a4f97b905040b56be065f201 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Calmer <mc@suse.de>
|
||||
Date: Fri, 29 Jul 2016 10:50:21 +0200
|
||||
Subject: [PATCH 10/17] Run salt-api as user salt (bsc#990029)
|
||||
Subject: [PATCH] Run salt-api as user salt (bsc#990029)
|
||||
|
||||
---
|
||||
pkg/salt-api.service | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pkg/salt-api.service b/pkg/salt-api.service
|
||||
index c3e67d5..9be2cb8 100644
|
||||
index c3e67d510c..9be2cb8ee6 100644
|
||||
--- a/pkg/salt-api.service
|
||||
+++ b/pkg/salt-api.service
|
||||
@@ -3,8 +3,8 @@ Description=The Salt API
|
||||
@ -23,5 +23,6 @@ index c3e67d5..9be2cb8 100644
|
||||
ExecStart=/usr/bin/salt-api
|
||||
TimeoutStopSec=3
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e5db5dcfecab4f1d2e93386ad8c7e579393280d7 Mon Sep 17 00:00:00 2001
|
||||
From d1d0fec1dd0fbf6a67c313718975ceb72c10cd2f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de>
|
||||
Date: Wed, 20 Jan 2016 11:01:06 +0100
|
||||
Subject: [PATCH 02/17] Run salt master as dedicated salt user
|
||||
Subject: [PATCH] Run salt master as dedicated salt user
|
||||
|
||||
---
|
||||
conf/master | 3 ++-
|
||||
@ -9,7 +9,7 @@ Subject: [PATCH 02/17] Run salt master as dedicated salt user
|
||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/conf/master b/conf/master
|
||||
index ed09126..ee98e51 100644
|
||||
index 3930c9832d..f58eb496bf 100644
|
||||
--- a/conf/master
|
||||
+++ b/conf/master
|
||||
@@ -25,7 +25,8 @@
|
||||
@ -23,7 +23,7 @@ index ed09126..ee98e51 100644
|
||||
# The port used by the communication interface. The ret (return) port is the
|
||||
# interface used for the file server, authentication, job returns, etc.
|
||||
diff --git a/pkg/salt-common.logrotate b/pkg/salt-common.logrotate
|
||||
index 3cd0023..8d970c0 100644
|
||||
index 3cd002308e..8d970c0a64 100644
|
||||
--- a/pkg/salt-common.logrotate
|
||||
+++ b/pkg/salt-common.logrotate
|
||||
@@ -1,4 +1,5 @@
|
||||
@ -49,5 +49,6 @@ index 3cd0023..8d970c0 100644
|
||||
missingok
|
||||
rotate 7
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
3
salt-2016.11.3.tar.gz
Normal file
3
salt-2016.11.3.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9d5849f38a858288ebc6ef790ced86ae724e61b06e3ee27e6cecf3f6c1ecbc51
|
||||
size 9163351
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5d4c822719d7fb2d79b0103cd9b015d251300890f8aa174e16b73fcfd6eb22f9
|
||||
size 8354090
|
91
salt.changes
91
salt.changes
@ -1,3 +1,94 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Mar 3 09:36:17 UTC 2017 - bmaryniuk@suse.com
|
||||
|
||||
- Update to 2016.11.3
|
||||
See https://docs.saltstack.com/en/develop/topics/releases/2016.11.3.html
|
||||
for full changelog
|
||||
|
||||
- Use correct package names for PyYAML and MarkupSafe (tbechtold@suse.com)
|
||||
|
||||
- Changed:
|
||||
* add-ssh-option-to-salt-ssh.patch
|
||||
|
||||
- Added:
|
||||
* add-options-for-dockerng.patch
|
||||
* fix-case-in-os_family-for-suse.patch
|
||||
* fix-regression-in-file.get_managed-add-unit-tests.patch
|
||||
* translate-variable-arguments-if-they-contain-hidden-.patch
|
||||
|
||||
- Removed:
|
||||
* add-buildargs-option-to-dockerng.build.patch
|
||||
* docker-buildargs-require-minimal-dockerpy-1.6.0-and-.patch
|
||||
* fix-a-typo-for-master-comments.patch
|
||||
* fix-error-parsing.patch
|
||||
* fix-leading-dots-on-sanitized-hostname.patch
|
||||
* fix-timezone-handling-for-rpm-installtime-bsc-101707.patch
|
||||
* increasing-timeouts-for-running-integrations-tests.patch
|
||||
* prevent-crash-on-unknown-to-the-repo-package.patch
|
||||
* prevents-oserror-exception-in-case-path-doesn-t-exis.patch
|
||||
* snapper-module-improvements.patch
|
||||
* support-dryrun-for-dockerng.sls_build.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 16 14:41:48 UTC 2017 - bmaryniuk@suse.com
|
||||
|
||||
- Update to 2016.11.2
|
||||
See https://docs.saltstack.com/en/develop/topics/releases/2016.11.2.html
|
||||
for full changelog
|
||||
|
||||
- Bugfixes:
|
||||
* keep fix for migrating salt home directory (bsc#1022562)
|
||||
* Fix salt-minion update on RHEL (bsc#1022841)
|
||||
* Prevents 'OSError' exception in case certain job cache path
|
||||
doesn't exist (bsc#1023535)
|
||||
|
||||
- Added:
|
||||
* add-a-salt-minion-service-control-file.patch
|
||||
* add-buildargs-option-to-dockerng.build.patch
|
||||
* add-ssh-option-to-salt-ssh.patch
|
||||
* add-yum-plugin.patch
|
||||
* avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch
|
||||
* change-travis-configuration-file-to-use-salt-toaster.patch
|
||||
* docker-buildargs-require-minimal-dockerpy-1.6.0-and-.patch
|
||||
* fix-a-typo-for-master-comments.patch
|
||||
* fix-error-parsing.patch
|
||||
* fix-leading-dots-on-sanitized-hostname.patch
|
||||
* fix-timezone-handling-for-rpm-installtime-bsc-101707.patch
|
||||
* increasing-timeouts-for-running-integrations-tests.patch
|
||||
* prevent-crash-on-unknown-to-the-repo-package.patch
|
||||
* prevents-oserror-exception-in-case-path-doesn-t-exis.patch
|
||||
* snapper-module-improvements.patch
|
||||
* support-dryrun-for-dockerng.sls_build.patch
|
||||
|
||||
- Renamed:
|
||||
* 0001-tserong-suse.com-We-don-t-have-python-systemd-so-not.patch ->
|
||||
tserong-suse.com-we-don-t-have-python-systemd-so-not.patch
|
||||
* 0002-Run-salt-master-as-dedicated-salt-user.patch ->
|
||||
run-salt-master-as-dedicated-salt-user.patch
|
||||
* 0003-Check-if-byte-strings-are-properly-encoded-in-UTF-8.patch ->
|
||||
check-if-byte-strings-are-properly-encoded-in-utf-8.patch
|
||||
* 0004-do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch ->
|
||||
do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch
|
||||
* 0007-Add-zypp-notify-plugin.patch ->
|
||||
add-zypp-notify-plugin.patch
|
||||
* 0009-fix-salt-summary-to-count-not-responding-minions-cor.patch ->
|
||||
fix-salt-summary-to-count-not-responding-minions-cor.patch
|
||||
* 0010-Run-salt-api-as-user-salt-bsc-990029.patch ->
|
||||
run-salt-api-as-user-salt-bsc-990029.patch
|
||||
* 0013-Setting-up-OS-grains-for-SLES-Expanded-Support-SUSE-.patch ->
|
||||
setting-up-os-grains-for-sles-expanded-support-suse-.patch
|
||||
|
||||
- Removed:
|
||||
* 0005-Use-SHA256-hash-type-by-default.patch
|
||||
* 0006-Create-salt-proxy-instantiated-service-file.patch
|
||||
* 0008-snapper-execution-module.patch
|
||||
* 0011-Fix-snapper_test-for-python26.patch
|
||||
* 0012-Fix-pkg.upgrade-for-zypper.patch
|
||||
* 0014-acl.delfacl-fix-position-of-X-option-to-setfacl.patch
|
||||
* 0015-Change-travis-configuration-file-to-use-salt-toaster.patch
|
||||
* 0016-Fix-pkg.latest_version-when-latest-already-installed.patch
|
||||
* 0017-Including-resolver-params-for-Zypper-debug-solver.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Nov 2 13:44:18 UTC 2016 - kkaempf@suse.com
|
||||
|
||||
|
139
salt.spec
139
salt.spec
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package salt
|
||||
#
|
||||
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -37,11 +37,11 @@
|
||||
%bcond_with builddocs
|
||||
|
||||
Name: salt
|
||||
Version: 2016.3.4
|
||||
Version: 2016.11.3
|
||||
Release: 0
|
||||
Summary: A parallel remote execution system
|
||||
License: Apache-2.0
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Url: http://saltstack.org/
|
||||
# Git: https://github.com/openSUSE/salt.git
|
||||
Source0: https://pypi.io/packages/source/s/%{name}/%{name}-%{version}.tar.gz
|
||||
@ -53,61 +53,62 @@ Source5: travis.yml
|
||||
|
||||
# PATCH-FIX-OPENSUSE use-forking-daemon.patch tserong@suse.com -- We don't have python-systemd, so notify can't work
|
||||
# We do not upstream this patch because this is something that we have to fix on our side
|
||||
Patch1: 0001-tserong-suse.com-We-don-t-have-python-systemd-so-not.patch
|
||||
Patch1: tserong-suse.com-we-don-t-have-python-systemd-so-not.patch
|
||||
# PATCH-FIX-OPENSUSE use-salt-user-for-master.patch -- Run salt master as dedicated salt user
|
||||
# We do not upstream this patch because this is suse custom configuration
|
||||
Patch2: 0002-Run-salt-master-as-dedicated-salt-user.patch
|
||||
Patch2: run-salt-master-as-dedicated-salt-user.patch
|
||||
# PATCH-FIX-OPENSUSE https://github.com/saltstack/salt/pull/30424
|
||||
# We do not upstream this patch because it has been fixed upstream
|
||||
# (see: https://trello.com/c/wh96lCD4/1528-get-rid-of-0003-check-if-byte-strings-are-properly-encoded-in-utf-8-patch-in-the-salt-package)
|
||||
Patch3: 0003-Check-if-byte-strings-are-properly-encoded-in-UTF-8.patch
|
||||
Patch3: check-if-byte-strings-are-properly-encoded-in-utf-8.patch
|
||||
# PATCH-FIX-OPENSUSE prevent rebuilds in OBS
|
||||
# We do not upstream this patch because the issue is on our side
|
||||
Patch4: 0004-do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch
|
||||
# PATCH-FIX-OPENSUSE - Upstream default hash type is set to MD5, while we require SHA256 (bsc#955373)
|
||||
# PR https://github.com/saltstack/salt/pull/35341 (15.08.2016 - not merged yet)
|
||||
Patch5: 0005-Use-SHA256-hash-type-by-default.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/31798
|
||||
# PR already merged. This will be gone in the next version
|
||||
Patch6: 0006-Create-salt-proxy-instantiated-service-file.patch
|
||||
Patch4: do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch
|
||||
# PATCH-FIX-OPENSUSE Generate events from the Salt minion,
|
||||
# if Zypper has been used outside the Salt infrastructure
|
||||
# We do not upstream this because this is for SUSE only (15.08.2016)
|
||||
Patch7: 0007-Add-zypp-notify-plugin.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch8: 0008-snapper-execution-module.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch9: 0009-fix-salt-summary-to-count-not-responding-minions-cor.patch
|
||||
# We do not upstream this because this is for SUSE only (15.08.2016) if Zypper has been used outside the Salt infrastructure
|
||||
Patch5: add-zypp-notify-plugin.patch
|
||||
# PATCH-FIX_OPENSUSE
|
||||
Patch10: 0010-Run-salt-api-as-user-salt-bsc-990029.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch11: 0011-Fix-snapper_test-for-python26.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch12: 0012-Fix-pkg.upgrade-for-zypper.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch13: 0013-Setting-up-OS-grains-for-SLES-Expanded-Support-SUSE-.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch14: 0014-acl.delfacl-fix-position-of-X-option-to-setfacl.patch
|
||||
Patch6: run-salt-api-as-user-salt-bsc-990029.patch
|
||||
# PATCH-FIX_OPENSUSE
|
||||
Patch15: 0015-Change-travis-configuration-file-to-use-salt-toaster.patch
|
||||
# PATCH-FIX_UPSTREAM
|
||||
Patch16: 0016-Fix-pkg.latest_version-when-latest-already-installed.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/37430
|
||||
Patch17: 0017-Including-resolver-params-for-Zypper-debug-solver.patch
|
||||
Patch7: change-travis-configuration-file-to-use-salt-toaster.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/37856 (pending to include in 2016.11)
|
||||
Patch8: setting-up-os-grains-for-sles-expanded-support-suse-.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/34165
|
||||
Patch9: fix-salt-summary-to-count-not-responding-minions-cor.patch
|
||||
# PATCH-FIX_OPENSUSE
|
||||
Patch10: avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch
|
||||
# PATCH-FIX_OPENSUSE
|
||||
Patch11: add-yum-plugin.patch
|
||||
# PATCH-FIX_OPENSUSE
|
||||
Patch12: add-ssh-option-to-salt-ssh.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/38806
|
||||
Patch13: add-a-salt-minion-service-control-file.patch
|
||||
# PATCH-FIX-OPENSUSE
|
||||
Patch14: add-options-for-dockerng.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/39591
|
||||
Patch15: fix-case-in-os_family-for-suse.patch
|
||||
# PATCH-FIX_OPENSUSE
|
||||
Patch16: translate-variable-arguments-if-they-contain-hidden-.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/39762
|
||||
Patch17: fix-regression-in-file.get_managed-add-unit-tests.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
BuildRequires: logrotate
|
||||
BuildRequires: python
|
||||
BuildRequires: python-devel
|
||||
# requirements/base.txt
|
||||
%if 0%{?rhel}
|
||||
BuildRequires: python-jinja2
|
||||
%else
|
||||
BuildRequires: python-Jinja2
|
||||
%endif
|
||||
BuildRequires: python-MarkupSafe
|
||||
BuildRequires: python-PyYAML
|
||||
BuildRequires: python-futures >= 2.0
|
||||
BuildRequires: python-markupsafe
|
||||
BuildRequires: python-msgpack-python > 0.3
|
||||
BuildRequires: python-psutil
|
||||
BuildRequires: python-requests >= 1.0.0
|
||||
BuildRequires: python-tornado >= 4.2.1
|
||||
BuildRequires: python-yaml
|
||||
# requirements/opt.txt (not all)
|
||||
# BuildRequires: python-MySQL-python
|
||||
# BuildRequires: python-timelib
|
||||
@ -160,14 +161,19 @@ Requires: python
|
||||
Requires: python-certifi
|
||||
%endif
|
||||
# requirements/base.txt
|
||||
%if 0%{?rhel}
|
||||
Requires: python-jinja2
|
||||
Requires: yum
|
||||
%else
|
||||
Requires: python-Jinja2
|
||||
%endif
|
||||
Requires: python-MarkupSafe
|
||||
Requires: python-PyYAML
|
||||
Requires: python-futures >= 2.0
|
||||
Requires: python-markupsafe
|
||||
Requires: python-msgpack-python > 0.3
|
||||
Requires: python-psutil
|
||||
Requires: python-requests >= 1.0.0
|
||||
Requires: python-tornado >= 4.2.1
|
||||
Requires: python-yaml
|
||||
%if 0%{?suse_version}
|
||||
# required for zypper.py
|
||||
Requires: rpm-python
|
||||
@ -217,6 +223,10 @@ BuildRequires: bash
|
||||
BuildRequires: zsh
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel}
|
||||
BuildRequires: yum
|
||||
%endif
|
||||
|
||||
%description
|
||||
Salt is a distributed remote execution system used to execute commands and
|
||||
query data. It was developed in order to bring the best solutions found in
|
||||
@ -227,7 +237,7 @@ servers, handle them quickly and through a simple and manageable interface.
|
||||
|
||||
%package api
|
||||
Summary: The api for Salt a parallel remote execution system
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}-master = %{version}-%{release}
|
||||
Requires: python-CherryPy >= 3.2.2
|
||||
@ -237,7 +247,7 @@ salt-api is a modular interface on top of Salt that can provide a variety of ent
|
||||
|
||||
%package cloud
|
||||
Summary: Generic cloud provisioning tool for Saltstack
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}-master = %{version}-%{release}
|
||||
Requires: python-apache-libcloud
|
||||
@ -263,7 +273,7 @@ This contains the documentation of salt, it is an offline version of http://docs
|
||||
|
||||
%package master
|
||||
Summary: The management component of Saltstack both protocols zmq and raet supported
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
%if 0%{?suse_version}
|
||||
Recommends: python-pygit2 >= 0.20.3
|
||||
@ -295,8 +305,9 @@ than serially.
|
||||
|
||||
%package minion
|
||||
Summary: The client component for Saltstack
|
||||
Group: System/Monitoring
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Group: System/Management
|
||||
Requires(pre): %{name} = %{version}-%{release}
|
||||
|
||||
%if %{with systemd}
|
||||
%{?systemd_requires}
|
||||
%else
|
||||
@ -314,7 +325,7 @@ Listens to the salt master and execute the commands.
|
||||
|
||||
%package raet
|
||||
Summary: Raet Support for Saltstack
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: python-enum34
|
||||
Requires: python-ioflo >= 1.1.7
|
||||
@ -336,7 +347,7 @@ for trust to be established.
|
||||
|
||||
%package proxy
|
||||
Summary: Component for salt that enables controlling arbitrary devices
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
%if %{with systemd}
|
||||
%{?systemd_requires}
|
||||
@ -359,7 +370,7 @@ security reasons, will not.
|
||||
|
||||
%package syndic
|
||||
Summary: The syndic component for saltstack
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}-master = %{version}-%{release}
|
||||
%if %{with systemd}
|
||||
@ -380,7 +391,7 @@ the management of multiple masters at a time..
|
||||
|
||||
%package ssh
|
||||
Summary: Management component for Saltstack with ssh protocol
|
||||
Group: System/Monitoring
|
||||
Group: System/Management
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}-master = %{version}-%{release}
|
||||
%if 0%{?suse_version}
|
||||
@ -453,13 +464,14 @@ cp %{S:5} ./.travis.yml
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
|
||||
# This is SUSE-only patch
|
||||
%if 0%{?suse_version}
|
||||
%patch7 -p1
|
||||
%patch5 -p1
|
||||
%endif
|
||||
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
@ -507,6 +519,7 @@ install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/queues
|
||||
install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/roots
|
||||
install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/syndics
|
||||
install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/tokens
|
||||
install -Dd -m 0750 %{buildroot}/var/lib/salt
|
||||
install -Dd -m 0750 %{buildroot}/srv/salt
|
||||
install -Dd -m 0750 %{buildroot}/srv/pillar
|
||||
install -Dd -m 0750 %{buildroot}/srv/spm
|
||||
@ -532,10 +545,18 @@ install -Dd -m 0750 %{buildroot}%{_prefix}/lib/zypp/plugins/commit
|
||||
%{__install} scripts/zypper/plugins/commit/zyppnotify %{buildroot}%{_prefix}/lib/zypp/plugins/commit/zyppnotify
|
||||
%endif
|
||||
|
||||
# Install Yum plugins only on RH machines
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
install -Dd %{buildroot}%{_prefix}/share/yum-plugins
|
||||
install -Dd %{buildroot}/etc/yum/pluginconf.d
|
||||
%{__install} scripts/yum/plugins/yumnotify.py %{buildroot}%{_prefix}/share/yum-plugins
|
||||
%{__install} scripts/yum/plugins/yumnotify.conf %{buildroot}/etc/yum/pluginconf.d
|
||||
%endif
|
||||
|
||||
## install init and systemd scripts
|
||||
%if %{with systemd}
|
||||
install -Dpm 0644 pkg/salt-master.service %{buildroot}%{_unitdir}/salt-master.service
|
||||
install -Dpm 0644 pkg/salt-minion.service %{buildroot}%{_unitdir}/salt-minion.service
|
||||
install -Dpm 0644 pkg/suse/salt-minion.service %{buildroot}%{_unitdir}/salt-minion.service
|
||||
install -Dpm 0644 pkg/salt-syndic.service %{buildroot}%{_unitdir}/salt-syndic.service
|
||||
install -Dpm 0644 pkg/salt-api.service %{buildroot}%{_unitdir}/salt-api.service
|
||||
install -Dpm 0644 pkg/salt-proxy@.service %{buildroot}%{_unitdir}/salt-proxy@.service
|
||||
@ -601,8 +622,9 @@ python setup.py test --runtests-opts=-u
|
||||
%endif
|
||||
|
||||
%pre
|
||||
getent passwd salt | grep srv\/salt >/dev/null && usermod -d /var/lib/salt salt
|
||||
getent group salt >/dev/null || %{_sbindir}/groupadd -r salt
|
||||
getent passwd salt >/dev/null || %{_sbindir}/useradd -r -g salt -d /srv/salt -s /bin/false -c "salt-master daemon" salt
|
||||
getent passwd salt >/dev/null || %{_sbindir}/useradd -r -g salt -d /var/lib/salt -s /bin/false -c "salt-master daemon" salt
|
||||
|
||||
%post
|
||||
%if %{with systemd}
|
||||
@ -617,11 +639,6 @@ dbus-uuidgen --ensure
|
||||
%else
|
||||
%if 0%{?suse_version}
|
||||
%stop_on_removal salt-proxy
|
||||
%else
|
||||
if [ $1 -eq 0 ] ; then
|
||||
/sbin/service salt-proxy stop >/dev/null 2>&1
|
||||
/sbin/chkconfig --del salt-proxy
|
||||
fi
|
||||
%endif
|
||||
%endif
|
||||
|
||||
@ -879,6 +896,12 @@ fi
|
||||
%{_prefix}/lib/zypp/plugins/commit/zyppnotify
|
||||
%endif
|
||||
|
||||
# Install Yum plugins only on RH machines
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%{_prefix}/share/yum-plugins/
|
||||
/etc/yum/pluginconf.d/yumnotify.conf
|
||||
%endif
|
||||
|
||||
%if %{with systemd}
|
||||
%{_unitdir}/salt-minion.service
|
||||
%else
|
||||
@ -922,6 +945,7 @@ fi
|
||||
%dir %attr(0750, salt, salt) %{_sysconfdir}/salt/pki/master/minions_denied/
|
||||
%dir %attr(0750, salt, salt) %{_sysconfdir}/salt/pki/master/minions_pre/
|
||||
%dir %attr(0750, salt, salt) %{_sysconfdir}/salt/pki/master/minions_rejected/
|
||||
%dir %attr(0755, salt, salt) /var/lib/salt
|
||||
%dir %attr(0755, root, salt) /srv/salt
|
||||
%dir %attr(0755, root, salt) /srv/pillar
|
||||
%dir %attr(0750, salt, salt) %{_localstatedir}/cache/salt/master/
|
||||
@ -961,6 +985,7 @@ fi
|
||||
%if %{with systemd}
|
||||
/usr/lib/tmpfiles.d/salt.conf
|
||||
%endif
|
||||
%{_mandir}/man1/salt.1.*
|
||||
|
||||
%if %{with docs}
|
||||
%files doc
|
||||
|
28
setting-up-os-grains-for-sles-expanded-support-suse-.patch
Normal file
28
setting-up-os-grains-for-sles-expanded-support-suse-.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 5a07f204d45b2b86d8bc0279527723e030cc4e21 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
||||
<psuarezhernandez@suse.com>
|
||||
Date: Fri, 30 Sep 2016 13:06:52 +0100
|
||||
Subject: [PATCH] Setting up OS grains for SLES Expanded Support (SUSE's
|
||||
Red Hat compatible platform)
|
||||
|
||||
core.py: quote style fixed
|
||||
---
|
||||
salt/grains/core.py | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/salt/grains/core.py b/salt/grains/core.py
|
||||
index 6a42cc734f..fce35cb313 100644
|
||||
--- a/salt/grains/core.py
|
||||
+++ b/salt/grains/core.py
|
||||
@@ -1049,6 +1049,7 @@ _OS_NAME_MAP = {
|
||||
'sles': 'SUSE',
|
||||
'slesexpand': 'RES',
|
||||
'void': 'Void',
|
||||
+ 'slesexpand': 'RES',
|
||||
'linuxmint': 'Mint',
|
||||
}
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
91
translate-variable-arguments-if-they-contain-hidden-.patch
Normal file
91
translate-variable-arguments-if-they-contain-hidden-.patch
Normal file
@ -0,0 +1,91 @@
|
||||
From 7313bf5574a72557a6389b9a991316d0b2c6f848 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Calmer <mc@suse.de>
|
||||
Date: Wed, 1 Mar 2017 15:37:04 +0100
|
||||
Subject: [PATCH] translate variable arguments if they contain hidden
|
||||
keywords (bsc#1025896)
|
||||
|
||||
- includes a test
|
||||
---
|
||||
salt/states/module.py | 30 ++++++++++++++++++++++--------
|
||||
tests/unit/states/module_test.py | 14 ++++++++++++++
|
||||
2 files changed, 36 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/salt/states/module.py b/salt/states/module.py
|
||||
index 686546832f..adc6e12c9d 100644
|
||||
--- a/salt/states/module.py
|
||||
+++ b/salt/states/module.py
|
||||
@@ -218,16 +218,30 @@ def run(name, **kwargs):
|
||||
ret['result'] = False
|
||||
return ret
|
||||
|
||||
- if aspec.varargs and aspec.varargs in kwargs:
|
||||
- varargs = kwargs.pop(aspec.varargs)
|
||||
+ if aspec.varargs:
|
||||
+ if aspec.varargs == 'name':
|
||||
+ rarg = 'm_name'
|
||||
+ elif aspec.varargs == 'fun':
|
||||
+ rarg = 'm_fun'
|
||||
+ elif aspec.varargs == 'names':
|
||||
+ rarg = 'm_names'
|
||||
+ elif aspec.varargs == 'state':
|
||||
+ rarg = 'm_state'
|
||||
+ elif aspec.varargs == 'saltenv':
|
||||
+ rarg = 'm_saltenv'
|
||||
+ else:
|
||||
+ rarg = aspec.varargs
|
||||
|
||||
- if not isinstance(varargs, list):
|
||||
- msg = "'{0}' must be a list."
|
||||
- ret['comment'] = msg.format(aspec.varargs)
|
||||
- ret['result'] = False
|
||||
- return ret
|
||||
+ if rarg in kwargs:
|
||||
+ varargs = kwargs.pop(rarg)
|
||||
+
|
||||
+ if not isinstance(varargs, list):
|
||||
+ msg = "'{0}' must be a list."
|
||||
+ ret['comment'] = msg.format(aspec.varargs)
|
||||
+ ret['result'] = False
|
||||
+ return ret
|
||||
|
||||
- args.extend(varargs)
|
||||
+ args.extend(varargs)
|
||||
|
||||
nkwargs = {}
|
||||
if aspec.keywords and aspec.keywords in kwargs:
|
||||
diff --git a/tests/unit/states/module_test.py b/tests/unit/states/module_test.py
|
||||
index 0c025e3861..20dda73938 100644
|
||||
--- a/tests/unit/states/module_test.py
|
||||
+++ b/tests/unit/states/module_test.py
|
||||
@@ -38,6 +38,10 @@ class ModuleStateTest(TestCase):
|
||||
varargs=None,
|
||||
keywords=None,
|
||||
defaults=False)
|
||||
+ bspec = ArgSpec(args=[],
|
||||
+ varargs='names',
|
||||
+ keywords='kwargs',
|
||||
+ defaults=None)
|
||||
|
||||
def test_module_run_module_not_available(self):
|
||||
'''
|
||||
@@ -69,6 +73,16 @@ class ModuleStateTest(TestCase):
|
||||
comment = 'The following arguments are missing: world hello'
|
||||
self.assertEqual(ret['comment'], comment)
|
||||
|
||||
+ @patch('salt.utils.args.get_function_argspec', MagicMock(return_value=bspec))
|
||||
+ def test_module_run_hidden_varargs(self):
|
||||
+ '''
|
||||
+ Tests the return of module.run state when hidden varargs are used with
|
||||
+ wrong type.
|
||||
+ '''
|
||||
+ ret = module.run(CMD, m_names = 'anyname')
|
||||
+ comment = "'names' must be a list."
|
||||
+ self.assertEqual(ret['comment'], comment)
|
||||
+
|
||||
|
||||
if __name__ == '__main__':
|
||||
from integration import run_tests
|
||||
--
|
||||
2.11.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 945e87477d66ada90e914e95acd5ff529477012a Mon Sep 17 00:00:00 2001
|
||||
From a9f1be35b0c158fcdd460dcc8c501fe039d97258 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de>
|
||||
Date: Wed, 20 Jan 2016 11:00:15 +0100
|
||||
Subject: [PATCH 01/17] tserong@suse.com -- We don't have python-systemd, so
|
||||
Subject: [PATCH] tserong@suse.com -- We don't have python-systemd, so
|
||||
notify can't work
|
||||
|
||||
---
|
||||
@ -9,7 +9,7 @@ Subject: [PATCH 01/17] tserong@suse.com -- We don't have python-systemd, so
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pkg/salt-master.service b/pkg/salt-master.service
|
||||
index 1f4650f..59be503 100644
|
||||
index 1f4650f872..59be50301a 100644
|
||||
--- a/pkg/salt-master.service
|
||||
+++ b/pkg/salt-master.service
|
||||
@@ -4,8 +4,7 @@ After=network.target
|
||||
@ -23,5 +23,6 @@ index 1f4650f..59be503 100644
|
||||
|
||||
[Install]
|
||||
--
|
||||
2.10.1
|
||||
2.11.0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user