#!/usr/bin/python3 import salt.exceptions def current_state(name): ret = dict() ret['name'] = 'blabla' return ret def enforce_custom_thing(name, foo, bar=True): ''' Enforce the state of a custom thing This state module does a custom thing. It calls out to the execution module ``y_custom_module`` in order to check the current system and perform any needed changes. name The thing to do something to foo A required argument bar : True An argument with a default value ''' ret = { 'name': name, 'changes': {}, 'result': False, 'comment': '', } # Start with basic error-checking. Do all the passed parameters make sense # and agree with each-other? if bar and foo.startswith('Foo'): raise salt.exceptions.SaltInvocationError( 'Argument "foo" cannot start with "Foo" if argument "bar" is True.') # Check the current state of the system. Does anything need to change? current_state = __salt__['custom.current_state'](name) if current_state == foo: ret['result'] = True ret['comment'] = 'System already in the correct state %s' % name return ret # The state of the system does need to be changed. Check if we're running # in ``test=true`` mode. if __opts__['test'] == True: ret['comment'] = 'The state of "{0}" will be changed.'.format(name) ret['changes'] = { 'old': current_state, 'new': 'Description, diff, whatever of the new state', } # Return ``None`` when running with ``test=true``. ret['result'] = None return ret # Finally, make the actual change and return the result. new_state = __salt__['custom.change_state'](name, foo) ret['comment'] = 'The state of "{0}" was changed!'.format(name) ret['changes'] = { 'old': current_state, 'new': new_state, } ret['result'] = True return ret