mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
Merge pull request #33837 from lorengordon/masterless-orchestration
Support salt.state orchestration in masterless mode
This commit is contained in:
commit
bf3e7c83b0
@ -69,6 +69,26 @@ apply the states defined in that file.
|
|||||||
with the :mod:`state.sls <salt.modules.state.sls>` execution function. In
|
with the :mod:`state.sls <salt.modules.state.sls>` execution function. In
|
||||||
versions 0.17.0 through 2014.1.0, ``state.sls`` must be used.
|
versions 0.17.0 through 2014.1.0, ``state.sls`` must be used.
|
||||||
|
|
||||||
|
Masterless Orchestration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. versionadded:: Carbon
|
||||||
|
|
||||||
|
To support salt orchestration on masterless minions, the Orchestrate Runner is
|
||||||
|
available as an execution module. The syntax for masterless orchestration is
|
||||||
|
exactly the same, but it uses the ``salt-call`` command and the minion
|
||||||
|
configuration must contain the ``file_mode: local`` option. Alternatively,
|
||||||
|
use ``salt-call --local`` on the command line.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
salt-call --local state.orchestrate orch.webserver
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Masterless orchestration supports only the ``salt.state`` command in an
|
||||||
|
sls file; it does not (currently) support the ``salt.function`` command.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ import salt.utils
|
|||||||
import salt.utils.jid
|
import salt.utils.jid
|
||||||
import salt.utils.url
|
import salt.utils.url
|
||||||
from salt.exceptions import SaltInvocationError
|
from salt.exceptions import SaltInvocationError
|
||||||
|
from salt.runners.state import orchestrate as _orchestrate
|
||||||
|
|
||||||
# Import 3rd-party libs
|
# Import 3rd-party libs
|
||||||
import salt.ext.six as six
|
import salt.ext.six as six
|
||||||
@ -58,6 +59,20 @@ __func_alias__ = {
|
|||||||
}
|
}
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Define the module's virtual name
|
||||||
|
__virtualname__ = 'state'
|
||||||
|
|
||||||
|
|
||||||
|
def __virtual__():
|
||||||
|
'''
|
||||||
|
Set the virtualname
|
||||||
|
'''
|
||||||
|
# Update global namespace with functions that are cloned in this module
|
||||||
|
global _orchestrate
|
||||||
|
_orchestrate = salt.utils.namespaced_function(_orchestrate, globals())
|
||||||
|
|
||||||
|
return __virtualname__
|
||||||
|
|
||||||
|
|
||||||
def _filter_running(runnings):
|
def _filter_running(runnings):
|
||||||
'''
|
'''
|
||||||
@ -107,6 +122,38 @@ def _wait(jid):
|
|||||||
states = _prior_running_states(jid)
|
states = _prior_running_states(jid)
|
||||||
|
|
||||||
|
|
||||||
|
def orchestrate(mods,
|
||||||
|
saltenv='base',
|
||||||
|
test=None,
|
||||||
|
exclude=None,
|
||||||
|
pillar=None,
|
||||||
|
pillarenv=None):
|
||||||
|
'''
|
||||||
|
.. versionadded:: Carbon
|
||||||
|
|
||||||
|
Execute the orchestrate runner from a masterless minion.
|
||||||
|
|
||||||
|
.. seealso:: More Orchestrate documentation
|
||||||
|
|
||||||
|
* :ref:`Full Orchestrate Tutorial <orchestrate-runner>`
|
||||||
|
* :py:mod:`Docs for the ``salt`` state module <salt.states.saltmod>`
|
||||||
|
|
||||||
|
CLI Examples:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
salt-call --local state.orchestrate webserver
|
||||||
|
salt-call --local state.orchestrate webserver saltenv=dev test=True
|
||||||
|
salt-call --local state.orchestrate webserver saltenv=dev pillarenv=aws
|
||||||
|
'''
|
||||||
|
return _orchestrate(mods=mods,
|
||||||
|
saltenv=saltenv,
|
||||||
|
test=test,
|
||||||
|
exclude=exclude,
|
||||||
|
pillar=pillar,
|
||||||
|
pillarenv=pillarenv)
|
||||||
|
|
||||||
|
|
||||||
def running(concurrent=False):
|
def running(concurrent=False):
|
||||||
'''
|
'''
|
||||||
Return a list of strings that contain state return data if a state function
|
Return a list of strings that contain state return data if a state function
|
||||||
|
@ -7,6 +7,15 @@ This state is intended for use from the Salt Master. It provides access to
|
|||||||
sending commands down to minions as well as access to executing master-side
|
sending commands down to minions as well as access to executing master-side
|
||||||
modules. These state functions wrap Salt's :ref:`Python API <python-api>`.
|
modules. These state functions wrap Salt's :ref:`Python API <python-api>`.
|
||||||
|
|
||||||
|
.. versionadded: Carbon
|
||||||
|
|
||||||
|
Support for masterless minions was added to the ``salt.state`` function,
|
||||||
|
so they can run orchestration sls files. This is particularly useful when
|
||||||
|
the rendering of a state is dependent on the execution of another state.
|
||||||
|
Orchestration will render and execute each orchestration block
|
||||||
|
independently, while honoring requisites to ensure the states are applied
|
||||||
|
in the correct order.
|
||||||
|
|
||||||
.. seealso:: More Orchestrate documentation
|
.. seealso:: More Orchestrate documentation
|
||||||
|
|
||||||
* :ref:`Full Orchestrate Tutorial <orchestrate-runner>`
|
* :ref:`Full Orchestrate Tutorial <orchestrate-runner>`
|
||||||
@ -68,6 +77,11 @@ def state(
|
|||||||
tgt
|
tgt
|
||||||
The target specification for the state run.
|
The target specification for the state run.
|
||||||
|
|
||||||
|
.. versionadded: Carbon
|
||||||
|
|
||||||
|
Masterless support: When running on a masterless minion, the ``tgt``
|
||||||
|
is ignored and will always be the local minion.
|
||||||
|
|
||||||
tgt_type | expr_form
|
tgt_type | expr_form
|
||||||
The target type to resolve, defaults to glob
|
The target type to resolve, defaults to glob
|
||||||
|
|
||||||
@ -216,7 +230,21 @@ def state(
|
|||||||
if batch is not None:
|
if batch is not None:
|
||||||
cmd_kw['batch'] = str(batch)
|
cmd_kw['batch'] = str(batch)
|
||||||
|
|
||||||
|
masterless = __opts__['__role'] == 'minion' and \
|
||||||
|
__opts__['file_client'] == 'local'
|
||||||
|
if not masterless:
|
||||||
cmd_ret = __salt__['saltutil.cmd'](tgt, fun, **cmd_kw)
|
cmd_ret = __salt__['saltutil.cmd'](tgt, fun, **cmd_kw)
|
||||||
|
else:
|
||||||
|
if top:
|
||||||
|
cmd_kw['topfn'] = ''.join(cmd_kw.pop('arg'))
|
||||||
|
elif sls:
|
||||||
|
cmd_kw['mods'] = cmd_kw.pop('arg')
|
||||||
|
tmp_ret = __salt__[fun](**cmd_kw)
|
||||||
|
cmd_ret = {__opts__['id']: {
|
||||||
|
'ret': tmp_ret,
|
||||||
|
'out': tmp_ret.get('out', 'highstate') if
|
||||||
|
isinstance(tmp_ret, dict) else 'highstate'
|
||||||
|
}}
|
||||||
|
|
||||||
changes = {}
|
changes = {}
|
||||||
fail = set()
|
fail = set()
|
||||||
|
@ -23,7 +23,7 @@ ensure_in_syspath('../../')
|
|||||||
# Import Salt Libs
|
# Import Salt Libs
|
||||||
from salt.states import saltmod
|
from salt.states import saltmod
|
||||||
|
|
||||||
saltmod.__opts__ = {}
|
saltmod.__opts__ = {'__role': 'master', 'file_client': 'remote'}
|
||||||
saltmod.__salt__ = {'saltutil.cmd': MagicMock()}
|
saltmod.__salt__ = {'saltutil.cmd': MagicMock()}
|
||||||
saltmod.__env__ = {}
|
saltmod.__env__ = {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user