Merge pull request #28270 from rallytime/refactor_rabbitmq_plugin_state

Refactor RabbitMQ Plugin State to correctly use test=true and format errors
This commit is contained in:
Erik Johnson 2015-10-27 11:18:34 -06:00
commit a44c8d8dab
4 changed files with 67 additions and 42 deletions

View file

@ -704,8 +704,12 @@ def plugin_is_enabled(name, runas=None):
cmd = '{0} list -m -e'.format(rabbitmq)
if runas is None:
runas = salt.utils.get_user()
ret = __salt__['cmd.run'](cmd, python_shell=False, runas=runas)
return bool(name in ret)
ret = __salt__['cmd.run_all'](cmd, python_shell=False, runas=runas)
if ret['retcode'] != 0:
raise CommandExecutionError(
'RabbitMQ command failed: {0}'.format(ret['stderr'])
)
return bool(name in ret['stdout'])
def enable_plugin(name, runas=None):

View file

@ -12,11 +12,14 @@ Example:
some_plugin:
rabbitmq_plugin.enabled: []
'''
from __future__ import absolute_import
# Import python libs
# Import Python Libs
from __future__ import absolute_import
import logging
# Import Salt Libs
from salt.exceptions import CommandExecutionError
log = logging.getLogger(__name__)
@ -40,25 +43,33 @@ def enabled(name, runas=None):
'''
ret = {'name': name, 'result': True, 'comment': '', 'changes': {}}
result = {}
if __salt__['rabbitmq.plugin_is_enabled'](name, runas=runas):
ret['comment'] = 'Plugin {0} is already enabled'.format(name)
try:
plugin_enabled = __salt__['rabbitmq.plugin_is_enabled'](name, runas=runas)
except CommandExecutionError as err:
ret['result'] = False
ret['comment'] = 'Error: {0}'.format(err)
return ret
if __opts__['test']:
if plugin_enabled:
ret['comment'] = 'Plugin \'{0}\' is already enabled.'.format(name)
return ret
if not __opts__['test']:
try:
__salt__['rabbitmq.enable_plugin'](name, runas=runas)
except CommandExecutionError as err:
ret['result'] = False
ret['comment'] = 'Error: {0}'.format(err)
return ret
ret['changes'].update({'old': '', 'new': name})
if __opts__['test'] and ret['changes']:
ret['result'] = None
ret['comment'] = 'Plugin {0} is set to be enabled'.format(name)
else:
result = __salt__['rabbitmq.enable_plugin'](name, runas=runas)
if 'Error' in result:
ret['result'] = False
ret['comment'] = result['Error']
elif 'Enabled' in result:
ret['comment'] = result['Enabled']
ret['changes'] = {'old': '', 'new': name}
ret['comment'] = 'Plugin \'{0}\' is set to be enabled.'.format(name)
return ret
ret['comment'] = 'Plugin \'{0}\' was enabled.'.format(name)
return ret
@ -73,23 +84,31 @@ def disabled(name, runas=None):
'''
ret = {'name': name, 'result': True, 'comment': '', 'changes': {}}
result = {}
if not __salt__['rabbitmq.plugin_is_enabled'](name, runas=runas):
ret['comment'] = 'Plugin {0} is not enabled'.format(name)
try:
plugin_enabled = __salt__['rabbitmq.plugin_is_enabled'](name, runas=runas)
except CommandExecutionError as err:
ret['result'] = False
ret['comment'] = 'Error: {0}'.format(err)
return ret
if __opts__['test']:
if not plugin_enabled:
ret['comment'] = 'Plugin \'{0}\' is already disabled.'.format(name)
return ret
if not __opts__['test']:
try:
__salt__['rabbitmq.disable_plugin'](name, runas=runas)
except CommandExecutionError as err:
ret['result'] = False
ret['comment'] = 'Error: {0}'.format(err)
return ret
ret['changes'].update({'old': name, 'new': ''})
if __opts__['test'] and ret['changes']:
ret['result'] = None
ret['comment'] = 'Plugin {0} is set to be disabled'.format(name)
else:
result = __salt__['rabbitmq.disable_plugin'](name, runas=runas)
if 'Error' in result:
ret['result'] = False
ret['comment'] = result['Error']
elif 'Disabled' in result:
ret['comment'] = result['Disabled']
ret['changes'] = {'new': '', 'old': name}
ret['comment'] = 'Plugin \'{0}\' is set to be disabled.'.format(name)
return ret
ret['comment'] = 'Plugin \'{0}\' was disabled.'.format(name)
return ret

View file

@ -351,9 +351,9 @@ class RabbitmqTestCase(TestCase):
'''
Test if it return whether the plugin is enabled.
'''
mock_run = MagicMock(return_value='saltstack')
mock_run = MagicMock(return_value={'retcode': 0, 'stdout': 'saltstack'})
mock_pkg = MagicMock(return_value='')
with patch.dict(rabbitmq.__salt__, {'cmd.run': mock_run,
with patch.dict(rabbitmq.__salt__, {'cmd.run_all': mock_run,
'pkg.version': mock_pkg}):
self.assertTrue(rabbitmq.plugin_is_enabled('salt'))

View file

@ -46,13 +46,14 @@ class RabbitmqPluginTestCase(TestCase):
mock = MagicMock(side_effect=[True, False])
with patch.dict(rabbitmq_plugin.__salt__,
{'rabbitmq.plugin_is_enabled': mock}):
comt = ('Plugin some_plugin is already enabled')
ret.update({'comment': comt})
comment = 'Plugin \'some_plugin\' is already enabled.'
ret.update({'comment': comment})
self.assertDictEqual(rabbitmq_plugin.enabled(name), ret)
with patch.dict(rabbitmq_plugin.__opts__, {'test': True}):
comt = ('Plugin some_plugin is set to be enabled')
ret.update({'comment': comt, 'result': None})
comment = 'Plugin \'some_plugin\' is set to be enabled.'
changes = {'new': 'some_plugin', 'old': ''}
ret.update({'comment': comment, 'result': None, 'changes': changes})
self.assertDictEqual(rabbitmq_plugin.enabled(name), ret)
# 'disabled' function tests: 1
@ -71,13 +72,14 @@ class RabbitmqPluginTestCase(TestCase):
mock = MagicMock(side_effect=[False, True])
with patch.dict(rabbitmq_plugin.__salt__,
{'rabbitmq.plugin_is_enabled': mock}):
comt = ('Plugin some_plugin is not enabled')
ret.update({'comment': comt})
comment = 'Plugin \'some_plugin\' is already disabled.'
ret.update({'comment': comment})
self.assertDictEqual(rabbitmq_plugin.disabled(name), ret)
with patch.dict(rabbitmq_plugin.__opts__, {'test': True}):
comt = ('Plugin some_plugin is set to be disabled')
ret.update({'comment': comt, 'result': None})
comment = 'Plugin \'some_plugin\' is set to be disabled.'
changes = {'new': '', 'old': 'some_plugin'}
ret.update({'comment': comment, 'result': None, 'changes': changes})
self.assertDictEqual(rabbitmq_plugin.disabled(name), ret)