Convenient functions to use a salt infra as an api

class mc_states.saltapi.ImgStepError

.

class mc_states.saltapi.NoRegistryLoaderFound

.

exception mc_states.saltapi.PortConflictError

.

exception mc_states.saltapi.RRError

.

class mc_states.saltapi.RenderError(msg, original=None, ret=None, *args, **kwargs)

.

class mc_states.saltapi.SSHCommandFailed(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHCommandFinished(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHCommandTimeout(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHExecError(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHInterruptError(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHLoginError(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHTimeoutError(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHTransferFailed(message, exec_ret=<object object>)

.

class mc_states.saltapi.SSHVtError(message, exec_ret=<object object>)

.

class mc_states.saltapi.SaltCallFailure(message, exec_ret=<object object>)

.

class mc_states.saltapi.TransformError(msg, original=None, ret=None, *args, **kwargs)

.

mc_states.saltapi.client(fun, *args, **kw)

Execute a salt function on a specific minion using the salt api. This will set automatic timeouts for well known functions. This will also call well known api calls for a specific time.

Special kwargs:

salt_cfgdir
alternative configuration file directory
salt_cfg
alternative configuration file
salt_target
target to exec things on
salt_timeout
timeout for jobs
salt_job_poll
poll interval to wait for job finish result
salt_ttl
cache ttl either 2 seconds or see __CACHED_FUNS preselector
mc_states.saltapi.concat_res_or_rets(ret, cret=None, result_keys=None, output_keys=None, dict_keys=None, omit=None)

Convenient and magical way to merge 2 structures or strings for usage in salt functions.

concatenate string with string
join them (separated with a newline)
concatenate string with dict:
append all output keys from dict in the string separated by a new line and prefixed by the output key identfier
concatenate dict with string:
concatenate (with newlineà) the string in all output keys
concatenate dict with dict:

merge corresponding keys in an intelligent way:

  • result from ret is setted to false if cret’s one is setted to False
  • merge output keys (separate with newline)
  • merge dict keys by updating or creating the corresponding key in ret from cret

>>> from collections import OrderedDict
>>> from mc_states.saltapi import concat_res_or_rets
>>> concat_res_or_rets({}, {'result': False})
{'result': False}
>>> concat_res_or_rets({'result': True}, {'result': False})
{'result': False}
>>> concat_res_or_rets('oo', {'stdout': 'a', 'stderr': 'b'})
'oo\nSTDOUT: a\nSTDERR: b'
>>> concat_res_or_rets('a', 'b')
'a\nb'
>>> concat_res_or_rets(OrderedDict([('stdout', 'a'), ('stderr', 'b')]),
...                    'de')
OrderedDict([('stdout', 'a\nde'), ('stderr', 'b'), ('output', 'de')])
>>> concat_res_or_rets(OrderedDict([('stdout', 'a'), ('stderr', 'b')]),
...                    {'stdout': 'c', 'stderr': 'd'})
OrderedDict([('stdout', 'a\nc'), ('stderr', 'b\nd')])
>>> concat_res_or_rets({'changes': {1: 2, 3: 4, 5: 6}},
...                    {'changes': {1: 3, 3: 4}})
{'changes': {1: 3, 3: 4, 5: 6}}
mc_states.saltapi.get_local_client(cfgdir=None, cfg=None, conn=None, **kwargs)

Get a local client

cfgdir/cfg
args given to localclient