mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Enable __proxy__ availability in states, highstate, and utils. Enable __utils__ availability in proxies. (#38899)
This commit is contained in:
parent
da96221741
commit
f13fb9ef1e
6 changed files with 46 additions and 21 deletions
|
@ -115,8 +115,8 @@ class Engine(SignalHandlingMultiprocessingProcess):
|
|||
self.runners = salt.loader.runner(self.opts)
|
||||
else:
|
||||
self.runners = []
|
||||
self.utils = salt.loader.utils(self.opts)
|
||||
self.funcs = salt.loader.minion_mods(self.opts, utils=self.utils)
|
||||
self.utils = salt.loader.utils(self.opts, proxy=self.proxy)
|
||||
self.funcs = salt.loader.minion_mods(self.opts, utils=self.utils, proxy=self.proxy)
|
||||
|
||||
self.engine = salt.loader.engines(self.opts,
|
||||
self.funcs,
|
||||
|
|
|
@ -286,7 +286,7 @@ def engines(opts, functions, runners, proxy=None):
|
|||
)
|
||||
|
||||
|
||||
def proxy(opts, functions=None, returners=None, whitelist=None):
|
||||
def proxy(opts, functions=None, returners=None, whitelist=None, utils=None):
|
||||
'''
|
||||
Returns the proxy module for this salt-proxy-minion
|
||||
'''
|
||||
|
@ -294,7 +294,7 @@ def proxy(opts, functions=None, returners=None, whitelist=None):
|
|||
_module_dirs(opts, 'proxy', 'proxy'),
|
||||
opts,
|
||||
tag='proxy',
|
||||
pack={'__salt__': functions, '__ret__': returners},
|
||||
pack={'__salt__': functions, '__ret__': returners, '__utils__': utils},
|
||||
)
|
||||
|
||||
ret.pack['__proxy__'] = ret
|
||||
|
@ -302,7 +302,7 @@ def proxy(opts, functions=None, returners=None, whitelist=None):
|
|||
return ret
|
||||
|
||||
|
||||
def returners(opts, functions, whitelist=None, context=None):
|
||||
def returners(opts, functions, whitelist=None, context=None, proxy=None):
|
||||
'''
|
||||
Returns the returner modules
|
||||
'''
|
||||
|
@ -311,11 +311,11 @@ def returners(opts, functions, whitelist=None, context=None):
|
|||
opts,
|
||||
tag='returner',
|
||||
whitelist=whitelist,
|
||||
pack={'__salt__': functions, '__context__': context},
|
||||
pack={'__salt__': functions, '__context__': context, '__proxy__': proxy or {}},
|
||||
)
|
||||
|
||||
|
||||
def utils(opts, whitelist=None, context=None):
|
||||
def utils(opts, whitelist=None, context=None, proxy=proxy):
|
||||
'''
|
||||
Returns the utility modules
|
||||
'''
|
||||
|
@ -324,7 +324,7 @@ def utils(opts, whitelist=None, context=None):
|
|||
opts,
|
||||
tag='utils',
|
||||
whitelist=whitelist,
|
||||
pack={'__context__': context},
|
||||
pack={'__context__': context, '__proxy__': proxy or {}},
|
||||
)
|
||||
|
||||
|
||||
|
@ -455,7 +455,7 @@ def thorium(opts, functions, runners):
|
|||
return ret
|
||||
|
||||
|
||||
def states(opts, functions, utils, serializers, whitelist=None):
|
||||
def states(opts, functions, utils, serializers, whitelist=None, proxy=None):
|
||||
'''
|
||||
Returns the state modules
|
||||
|
||||
|
@ -475,7 +475,7 @@ def states(opts, functions, utils, serializers, whitelist=None):
|
|||
_module_dirs(opts, 'states', 'states'),
|
||||
opts,
|
||||
tag='states',
|
||||
pack={'__salt__': functions},
|
||||
pack={'__salt__': functions, '__proxy__': proxy or {}},
|
||||
whitelist=whitelist,
|
||||
)
|
||||
ret.pack['__states__'] = ret
|
||||
|
@ -484,7 +484,7 @@ def states(opts, functions, utils, serializers, whitelist=None):
|
|||
return ret
|
||||
|
||||
|
||||
def beacons(opts, functions, context=None):
|
||||
def beacons(opts, functions, context=None, proxy=None):
|
||||
'''
|
||||
Load the beacon modules
|
||||
|
||||
|
@ -496,7 +496,7 @@ def beacons(opts, functions, context=None):
|
|||
_module_dirs(opts, 'beacons', 'beacons'),
|
||||
opts,
|
||||
tag='beacons',
|
||||
pack={'__context__': context, '__salt__': functions},
|
||||
pack={'__context__': context, '__salt__': functions, '__proxy__': proxy or {}},
|
||||
)
|
||||
|
||||
|
||||
|
@ -918,7 +918,7 @@ def netapi(opts):
|
|||
)
|
||||
|
||||
|
||||
def executors(opts, functions=None, context=None):
|
||||
def executors(opts, functions=None, context=None, proxy=None):
|
||||
'''
|
||||
Returns the executor modules
|
||||
'''
|
||||
|
@ -926,7 +926,7 @@ def executors(opts, functions=None, context=None):
|
|||
_module_dirs(opts, 'executors', 'executor'),
|
||||
opts,
|
||||
tag='executor',
|
||||
pack={'__salt__': functions, '__context__': context or {}},
|
||||
pack={'__salt__': functions, '__context__': context or {}, '__proxy__': proxy or {}},
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -1124,7 +1124,7 @@ class Minion(MinionBase):
|
|||
|
||||
if grains is None:
|
||||
self.opts['grains'] = salt.loader.grains(self.opts, force_refresh, proxy=proxy)
|
||||
self.utils = salt.loader.utils(self.opts)
|
||||
self.utils = salt.loader.utils(self.opts, proxy=proxy)
|
||||
|
||||
if self.opts.get('multimaster', False):
|
||||
s_opts = copy.deepcopy(self.opts)
|
||||
|
@ -1132,7 +1132,7 @@ class Minion(MinionBase):
|
|||
loaded_base_name=self.loaded_base_name, notify=notify)
|
||||
else:
|
||||
functions = salt.loader.minion_mods(self.opts, utils=self.utils, notify=notify, proxy=proxy)
|
||||
returners = salt.loader.returners(self.opts, functions)
|
||||
returners = salt.loader.returners(self.opts, functions, proxy=proxy)
|
||||
errors = {}
|
||||
if '_errors' in functions:
|
||||
errors = functions['_errors']
|
||||
|
@ -1142,7 +1142,7 @@ class Minion(MinionBase):
|
|||
if modules_max_memory is True:
|
||||
resource.setrlimit(resource.RLIMIT_AS, old_mem_limit)
|
||||
|
||||
executors = salt.loader.executors(self.opts, functions)
|
||||
executors = salt.loader.executors(self.opts, functions, proxy=proxy)
|
||||
|
||||
return functions, returners, errors, executors
|
||||
|
||||
|
@ -3052,6 +3052,9 @@ class ProxyMinion(Minion):
|
|||
# SPM or was manually placed in /srv/salt/_modules etc.
|
||||
self.functions['saltutil.sync_all'](saltenv='base')
|
||||
|
||||
# Pull in the utils
|
||||
self.utils = salt.loader.utils(self.opts)
|
||||
|
||||
# Then load the proxy module
|
||||
self.proxy = salt.loader.proxy(self.opts)
|
||||
|
||||
|
@ -3066,6 +3069,10 @@ class ProxyMinion(Minion):
|
|||
self.proxy.pack['__ret__'] = self.returners
|
||||
self.proxy.pack['__pillar__'] = self.opts['pillar']
|
||||
|
||||
# Reload utils as well (chicken and egg, __utils__ needs __proxy__ and __proxy__ needs __utils__
|
||||
self.utils = salt.loader.utils(self.opts, proxy=self.proxy)
|
||||
self.proxy.pack['__utils__'] = self.utils
|
||||
|
||||
# Start engines here instead of in the Minion superclass __init__
|
||||
# This is because we need to inject the __proxy__ variable but
|
||||
# it is not setup until now.
|
||||
|
|
|
@ -19,3 +19,10 @@ def fix_outage():
|
|||
|
||||
'''
|
||||
return __proxy__['rest_sample.fix_outage']()
|
||||
|
||||
|
||||
def get_test_string():
|
||||
'''
|
||||
Helper function to test cross-calling to the __proxy__ dunder.
|
||||
'''
|
||||
return __proxy__['rest_sample.test_from_state']()
|
||||
|
|
|
@ -200,3 +200,12 @@ def shutdown(opts):
|
|||
For this proxy shutdown is a no-op
|
||||
'''
|
||||
log.debug('rest_sample proxy shutdown() called...')
|
||||
|
||||
|
||||
def test_from_state():
|
||||
'''
|
||||
Test function so we have something to call from a state
|
||||
:return:
|
||||
'''
|
||||
log.debug('test_from_state called')
|
||||
return 'testvalue'
|
||||
|
|
|
@ -656,7 +656,7 @@ class State(object):
|
|||
self._pillar_enc = pillar_enc
|
||||
self.opts['pillar'] = self._gather_pillar()
|
||||
self.state_con = context or {}
|
||||
self.load_modules(proxy=proxy)
|
||||
self.load_modules()
|
||||
self.active = set()
|
||||
self.mod_init = set()
|
||||
self.pre = {}
|
||||
|
@ -856,7 +856,8 @@ class State(object):
|
|||
if self.states_loader == 'thorium':
|
||||
self.states = salt.loader.thorium(self.opts, self.functions, {}) # TODO: Add runners
|
||||
else:
|
||||
self.states = salt.loader.states(self.opts, self.functions, self.utils, self.serializers)
|
||||
self.states = salt.loader.states(self.opts, self.functions, self.utils,
|
||||
self.serializers, proxy=self.proxy)
|
||||
|
||||
def load_modules(self, data=None, proxy=None):
|
||||
'''
|
||||
|
@ -866,7 +867,7 @@ class State(object):
|
|||
self.utils = salt.loader.utils(self.opts)
|
||||
self.functions = salt.loader.minion_mods(self.opts, self.state_con,
|
||||
utils=self.utils,
|
||||
proxy=proxy)
|
||||
proxy=self.proxy)
|
||||
if isinstance(data, dict):
|
||||
if data.get('provider', False):
|
||||
if isinstance(data['provider'], str):
|
||||
|
@ -906,7 +907,7 @@ class State(object):
|
|||
log.error('Error encountered during module reload. Modules were not reloaded.')
|
||||
except TypeError:
|
||||
log.error('Error encountered during module reload. Modules were not reloaded.')
|
||||
self.load_modules(proxy=self.proxy)
|
||||
self.load_modules()
|
||||
if not self.opts.get('local', False) and self.opts.get('multiprocessing', True):
|
||||
self.functions['saltutil.refresh_modules']()
|
||||
|
||||
|
@ -3353,6 +3354,7 @@ class HighState(BaseHighState):
|
|||
mocked=mocked,
|
||||
loader=loader)
|
||||
self.matcher = salt.minion.Matcher(self.opts)
|
||||
self.proxy = proxy
|
||||
|
||||
# tracks all pydsl state declarations globally across sls files
|
||||
self._pydsl_all_decls = {}
|
||||
|
|
Loading…
Add table
Reference in a new issue