mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
f9ffcb697a
* json encode arguments passed to an execution module function call this fixes problems where you could pass a string to a module function, which thanks to the yaml decoder which is used when parsing command line arguments could change its type entirely. for example: __salt__['test.echo')('{foo: bar}') the test.echo function just returns the argument it's given. however, because it's being called through a salt-call process like this: salt-call --local test.echo {foo: bar} salt thinks it's yaml and therefore yaml decodes it. the return value from the test.echo call above is therefore a dict, not a string. * Prevent crash if pygit2 package is requesting re-compilation of the e… (#32652) * Prevent crash if pygit2 package is requesting re-compilation of the entire library on production systems (no *devel packages) * Fix PEP8: move imports to the top of the file * Move logger up * Add log error message in case if exception is not an ImportError * align OS grains from older SLES with current one (#32649) * Fixing critical bug to remove only the specified Host instead of the entire Host cluster (#32640) * yumpkg: Ignore epoch in version comparison for explict versions without an epoch (#32563) * yumpkg: Ignore epoch in version comparison for explict versions without an epoch Also properly handle comparisions for packages with multiple versions. Resolves #32229 * Don't attempt downgrade for kernel and its subpackages Multiple versions are supported since their paths do not conflict. * Lower log level for pillar cache (#32655) This shouldn't show up on salt-call runs * Don't access deprecated Exception.message attribute. (#32556) * Don't access deprecated Exception.message attribute. To avoid a deprecation warning message in logs. There is a new function salt.exceptions.get_error_message(e) instead. * Fixed module docs test. * Fix for issue 32523 (#32672) * Fix routes for redhat < 6 * Handle a couple of arguments better (Azure) (#32683) * backporting a fix from develop where the use of splay would result in seconds=0 in the schedule.list when there was no seconds specified in the origina schedule * Handle when beacon not configured and we try to enable/disable them (#32692) * Handle the situation when the beacon is not configured and we try to disable it * a couple more missing returns in the enable & disable * Check dependencies type before appling str operations (#32693) * Update external auth documentation to list supported matcher. (#32733) Thanks to #31598, all matchers are supported for eauth configuration. But we still have no way to use compound matchers in eauth configuration. Update the documentation to explicitly express this limitation. * modules.win_dacl: consistent case of dacl constants (#32720) * Document pillar cache options (#32643) * Add note about Pillar data cache requirement for Pillar targeting method * Add `saltutil.refresh_pillar` function to the scheduled Minion jobs * Minor fixes in docs * Add note about relations between `pillar_cache` option and Pillar Targeting to Master config comments with small reformatting * Document Pillar Cache Options for Salt Master * Document Minions Targeting with Mine * Remove `saltutil.refresh_pillar` scheduled persistent job * Properly handle minion failback failure. (#32749) * Properly handle minion failback failure. Initiate minion restart if all masters down on __master_disconnect like minion does on the initial master connect on start. * Fixed unit test * Improve documentation on pygit2 versions (#32779) This adds an explanation of the python-cffi dep added in pygit2 0.21.0, and recommends 0.20.3 for LTS distros. It also links to the salt-pack issue which tracks the progress of adding pygit2 to our Debian and Ubuntu repositories. * Pylint fix
211 lines
6.5 KiB
Python
211 lines
6.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
'''
|
|
:codeauthor: :email:`Bo Maryniuk <bo@suse.de>`
|
|
'''
|
|
|
|
# Import python libs
|
|
from __future__ import absolute_import
|
|
|
|
# Import Salt Testing libs
|
|
from salttesting import TestCase, skipIf
|
|
from salttesting.helpers import ensure_in_syspath
|
|
from salttesting.mock import patch, MagicMock, NO_MOCK, NO_MOCK_REASON
|
|
|
|
ensure_in_syspath('../')
|
|
|
|
# Import Salt libs
|
|
import integration
|
|
from salt.cli import daemons
|
|
|
|
|
|
class LoggerMock(object):
|
|
'''
|
|
Logger data collector
|
|
'''
|
|
|
|
def __init__(self):
|
|
'''
|
|
init
|
|
:return:
|
|
'''
|
|
self.reset()
|
|
|
|
def reset(self):
|
|
'''
|
|
Reset values
|
|
|
|
:return:
|
|
'''
|
|
self.last_message = self.last_type = None
|
|
|
|
def info(self, data):
|
|
'''
|
|
Collects the data from the logger of info type.
|
|
|
|
:param data:
|
|
:return:
|
|
'''
|
|
self.last_message = data
|
|
self.last_type = 'info'
|
|
|
|
def warning(self, data):
|
|
'''
|
|
Collects the data from the logger of warning type.
|
|
|
|
:param data:
|
|
:return:
|
|
'''
|
|
self.last_message = data
|
|
self.last_type = 'warning'
|
|
|
|
|
|
@skipIf(NO_MOCK, NO_MOCK_REASON)
|
|
class DaemonsStarterTestCase(TestCase, integration.SaltClientTestCaseMixIn):
|
|
'''
|
|
Unit test for the daemons starter classes.
|
|
'''
|
|
|
|
def test_master_daemon_hash_type_verified(self):
|
|
'''
|
|
Verify if Master is verifying hash_type config option.
|
|
|
|
:return:
|
|
'''
|
|
def _create_master():
|
|
'''
|
|
Create master instance
|
|
:return:
|
|
'''
|
|
master = daemons.Master()
|
|
master.config = {'user': 'dummy', 'hash_type': alg}
|
|
for attr in ['master', 'start_log_info', 'prepare']:
|
|
setattr(master, attr, MagicMock())
|
|
|
|
return master
|
|
|
|
_logger = LoggerMock()
|
|
with patch('salt.cli.daemons.check_user', MagicMock(return_value=True)):
|
|
with patch('salt.cli.daemons.log', _logger):
|
|
for alg in ['md5', 'sha1']:
|
|
_create_master().start()
|
|
self.assertEqual(_logger.last_type, 'warning')
|
|
self.assertTrue(_logger.last_message)
|
|
self.assertTrue(_logger.last_message.find('Do not use {alg}'.format(alg=alg)) > -1)
|
|
|
|
_logger.reset()
|
|
|
|
for alg in ['sha224', 'sha256', 'sha384', 'sha512']:
|
|
_create_master().start()
|
|
self.assertEqual(_logger.last_type, None)
|
|
self.assertFalse(_logger.last_message)
|
|
|
|
def test_minion_daemon_hash_type_verified(self):
|
|
'''
|
|
Verify if Minion is verifying hash_type config option.
|
|
|
|
:return:
|
|
'''
|
|
|
|
def _create_minion():
|
|
'''
|
|
Create minion instance
|
|
:return:
|
|
'''
|
|
obj = daemons.Minion()
|
|
obj.config = {'user': 'dummy', 'hash_type': alg}
|
|
for attr in ['start_log_info', 'prepare', 'shutdown']:
|
|
setattr(obj, attr, MagicMock())
|
|
setattr(obj, 'minion', MagicMock(restart=False))
|
|
|
|
return obj
|
|
|
|
_logger = LoggerMock()
|
|
with patch('salt.cli.daemons.check_user', MagicMock(return_value=True)):
|
|
with patch('salt.cli.daemons.log', _logger):
|
|
for alg in ['md5', 'sha1']:
|
|
_create_minion().start()
|
|
self.assertEqual(_logger.last_type, 'warning')
|
|
self.assertTrue(_logger.last_message)
|
|
self.assertTrue(_logger.last_message.find('Do not use {alg}'.format(alg=alg)) > -1)
|
|
|
|
_logger.reset()
|
|
|
|
for alg in ['sha224', 'sha256', 'sha384', 'sha512']:
|
|
_create_minion().start()
|
|
self.assertEqual(_logger.last_type, None)
|
|
self.assertFalse(_logger.last_message)
|
|
|
|
def test_proxy_minion_daemon_hash_type_verified(self):
|
|
'''
|
|
Verify if ProxyMinion is verifying hash_type config option.
|
|
|
|
:return:
|
|
'''
|
|
|
|
def _create_proxy_minion():
|
|
'''
|
|
Create proxy minion instance
|
|
:return:
|
|
'''
|
|
obj = daemons.ProxyMinion()
|
|
obj.config = {'user': 'dummy', 'hash_type': alg}
|
|
for attr in ['minion', 'start_log_info', 'prepare', 'shutdown']:
|
|
setattr(obj, attr, MagicMock())
|
|
|
|
return obj
|
|
|
|
_logger = LoggerMock()
|
|
with patch('salt.cli.daemons.check_user', MagicMock(return_value=True)):
|
|
with patch('salt.cli.daemons.log', _logger):
|
|
for alg in ['md5', 'sha1']:
|
|
_create_proxy_minion().start()
|
|
self.assertEqual(_logger.last_type, 'warning')
|
|
self.assertTrue(_logger.last_message)
|
|
self.assertTrue(_logger.last_message.find('Do not use {alg}'.format(alg=alg)) > -1)
|
|
|
|
_logger.reset()
|
|
|
|
for alg in ['sha224', 'sha256', 'sha384', 'sha512']:
|
|
_create_proxy_minion().start()
|
|
self.assertEqual(_logger.last_type, None)
|
|
self.assertFalse(_logger.last_message)
|
|
|
|
def test_syndic_daemon_hash_type_verified(self):
|
|
'''
|
|
Verify if Syndic is verifying hash_type config option.
|
|
|
|
:return:
|
|
'''
|
|
|
|
def _create_syndic():
|
|
'''
|
|
Create syndic instance
|
|
:return:
|
|
'''
|
|
obj = daemons.Syndic()
|
|
obj.config = {'user': 'dummy', 'hash_type': alg}
|
|
for attr in ['syndic', 'start_log_info', 'prepare', 'shutdown']:
|
|
setattr(obj, attr, MagicMock())
|
|
|
|
return obj
|
|
|
|
_logger = LoggerMock()
|
|
with patch('salt.cli.daemons.check_user', MagicMock(return_value=True)):
|
|
with patch('salt.cli.daemons.log', _logger):
|
|
for alg in ['md5', 'sha1']:
|
|
_create_syndic().start()
|
|
self.assertEqual(_logger.last_type, 'warning')
|
|
self.assertTrue(_logger.last_message)
|
|
self.assertTrue(_logger.last_message.find('Do not use {alg}'.format(alg=alg)) > -1)
|
|
|
|
_logger.reset()
|
|
|
|
for alg in ['sha224', 'sha256', 'sha384', 'sha512']:
|
|
_create_syndic().start()
|
|
self.assertEqual(_logger.last_type, None)
|
|
self.assertFalse(_logger.last_message)
|
|
|
|
if __name__ == '__main__':
|
|
from integration import run_tests
|
|
run_tests(DaemonsStarterTestCase, needs_daemon=False)
|