Further work on __proxy__

This commit is contained in:
C. R. Oldham 2015-10-05 13:57:12 -06:00
parent 286b08a0f5
commit d337f4329e
5 changed files with 60 additions and 35 deletions

View file

@ -133,6 +133,7 @@ def minion_mods(
opts,
context=None,
utils=None,
proxy=None,
whitelist=None,
include_errors=False,
initial_load=False,
@ -178,12 +179,15 @@ def minion_mods(
context = {}
if utils is None:
utils = {}
if proxy is None:
proxy = {}
if not whitelist:
whitelist = opts.get('whitelist_modules', None)
ret = LazyLoader(_module_dirs(opts, 'modules', 'module'),
opts,
tag='module',
pack={'__context__': context, '__utils__': utils},
pack={'__context__': context, '__utils__': utils,
'__proxy__': proxy},
whitelist=whitelist,
loaded_base_name=loaded_base_name)
@ -252,16 +256,20 @@ def engines(opts, functions, runners):
pack=pack)
def proxy(opts, functions, whitelist=None, loaded_base_name=None):
def proxy(opts, functions=None, returners=None, whitelist=None):
'''
Returns the proxy module for this salt-proxy-minion
'''
return LazyLoader(_module_dirs(opts, 'proxy', 'proxy'),
opts,
tag='proxy',
whitelist=whitelist,
pack={'__proxy__': functions},
loaded_base_name=loaded_base_name)
# This is where we should set directories so proxy modules can be loaded from /srv/<something>
ret = LazyLoader(_module_dirs(opts, 'proxy', 'proxy'),
opts,
tag='proxy',
pack={'__salt__': functions,
'__ret__': returners})
ret.pack['__proxy__'] = ret
return ret
def returners(opts, functions, whitelist=None, context=None):

View file

@ -531,10 +531,10 @@ class SMinion(MinionBase):
self.utils = salt.loader.utils(self.opts)
self.functions = salt.loader.minion_mods(self.opts, utils=self.utils,
include_errors=True)
self.proxy = salt.loader.proxy(self.opts, None)
self.returners = salt.loader.returners(self.opts, self.functions)
self.proxy = salt.loader.proxy(self.opts, self.functions, self.returners, None)
# TODO: remove
self.function_errors = {} # Keep the funcs clean
self.returners = salt.loader.returners(self.opts, self.functions)
self.states = salt.loader.states(self.opts, self.functions, self.utils)
self.rend = salt.loader.render(self.opts, self.functions)
self.matcher = Matcher(self.opts, self.functions)
@ -853,7 +853,7 @@ class Minion(MinionBase):
)
self.event_publisher.handle_publish([event])
def _load_modules(self, force_refresh=False, notify=False):
def _load_modules(self, force_refresh=False, notify=False, proxy=None):
'''
Return the functions and the returners loaded up from the loader
module
@ -879,7 +879,7 @@ class Minion(MinionBase):
self.utils = salt.loader.utils(self.opts)
if self.opts.get('multimaster', False):
s_opts = copy.deepcopy(self.opts)
functions = salt.loader.minion_mods(s_opts, utils=self.utils,
functions = salt.loader.minion_mods(s_opts, utils=self.utils, proxy=proxy,
loaded_base_name=self.loaded_base_name, notify=notify)
else:
functions = salt.loader.minion_mods(self.opts, utils=self.utils, notify=notify)
@ -2513,19 +2513,22 @@ class ProxyMinion(Minion):
# We need to do this again, because we are going to throw out a lot of grains.
self.opts['grains'] = salt.loader.grains(self.opts)
self.opts['proxymodule'] = salt.loader.proxy(self.opts, None, loaded_base_name=fq_proxyname)
self.functions, self.returners, self.function_errors = self._load_modules()
self.proxy = salt.loader.proxy(self.opts)
self.functions, self.returners, self.function_errors = self._load_modules(proxy=self.proxy)
self.functions.pack['__proxy__'] = self.proxy
self.proxy.pack['__salt__'] = self.functions
self.proxy.pack['__ret__'] = self.returners
if ('{0}.init'.format(fq_proxyname) not in self.opts['proxymodule']
or '{0}.shutdown'.format(fq_proxyname) not in self.opts['proxymodule']):
if ('{0}.init'.format(fq_proxyname) not in self.proxy
or '{0}.shutdown'.format(fq_proxyname) not in self.proxy):
log.error('Proxymodule {0} is missing an init() or a shutdown() or both.'.format(fq_proxyname))
log.error('Check your proxymodule. Salt-proxy aborted.')
self._running = False
raise SaltSystemExit(code=-1)
proxy_fn = self.opts['proxymodule'].loaded_base_name + '.init'
self.opts['proxymodule'][proxy_fn](self.opts)
proxy_init_fn = self.proxy[fq_proxyname+'.init']
proxy_init_fn(self.opts)
# reload ?!?
self.serial = salt.payload.Serial(self.opts)
self.mod_opts = self._prep_mod_opts()

View file

@ -19,22 +19,22 @@ def __virtual__():
'''
Only work on proxy
'''
if 'proxymodule' in __opts__:
if 'proxy' in __opts__:
return __virtualname__
return False
def list_pkgs(versions_as_list=False, **kwargs):
return __opts__['proxymodule']['rest_sample.package_list']()
return __proxy__['rest_sample.package_list']()
def install(name=None, refresh=False, fromrepo=None,
pkgs=None, sources=None, **kwargs):
return __opts__['proxymodule']['rest_sample.package_install'](name, **kwargs)
return __proxy__['rest_sample.package_install'](name, **kwargs)
def remove(name=None, pkgs=None, **kwargs):
return __opts__['proxymodule']['rest_sample.package_remove'](name)
return __proxy__['rest_sample.package_remove'](name)
def version(*names, **kwargs):
@ -51,7 +51,7 @@ def version(*names, **kwargs):
salt '*' pkg.version <package1> <package2> <package3> ...
'''
if len(names) == 1:
return str(__opts__['proxymodule']['rest_sample.package_status'](names))
return str(__proxy__['rest_sample.package_status'](names))
def installed(
@ -64,7 +64,7 @@ def installed(
sources=None,
**kwargs):
p = __opts__['proxymodule']['rest_sample.package_status'](name)
p = __proxy__['rest_sample.package_status'](name)
if version is None:
if 'ret' in p:
return str(p['ret'])

View file

@ -40,8 +40,21 @@ def get_all():
salt '*' service.get_all
'''
proxy_fn = 'rest_sample'+ '.service_list'
return __opts__['proxymodule'][proxy_fn]()
proxy_fn = 'rest_sample.service_list'
return __proxy__[proxy_fn]()
def list_():
'''
Return a list of all available services
CLI Example:
.. code-block:: bash
salt '*' service.list
'''
return get_all()
def list_():
@ -72,8 +85,8 @@ def start(name, sig=None):
salt '*' service.start <service name>
'''
proxy_fn = 'rest_sample'+ '.service_start'
return __opts__['proxymodule'][proxy_fn](name)
proxy_fn = 'rest_sample.service_start'
return __proxy__[proxy_fn](name)
def stop(name, sig=None):
@ -88,8 +101,8 @@ def stop(name, sig=None):
salt '*' service.stop <service name>
'''
proxy_fn = 'rest_sample'+ '.service_stop'
return __opts__['proxymodule'][proxy_fn](name)
proxy_fn = 'rest_sample.service_stop'
return __proxy__[proxy_fn](name)
def restart(name, sig=None):
@ -105,8 +118,8 @@ def restart(name, sig=None):
salt '*' service.restart <service name>
'''
proxy_fn = 'rest_sample'+ '.service_restart'
return __opts__['proxymodule'][proxy_fn](name)
proxy_fn = 'rest_sample.service_restart'
return __proxy__[proxy_fn](name)
def status(name, sig=None):
@ -123,8 +136,8 @@ def status(name, sig=None):
salt '*' service.status <service name>
'''
proxy_fn = 'rest_sample' + '.service_status'
resp = __opts__['proxymodule'][proxy_fn](name)
proxy_fn = 'rest_sample.service_status'
resp = __proxy__[proxy_fn](name)
if resp['comment'] == 'stopped':
return False
if resp['comment'] == 'running':

View file

@ -1539,7 +1539,8 @@ class State(object):
initial_ret={'full': state_func_name},
expected_extra_kws=STATE_INTERNAL_KEYWORDS
)
import pydevd
pydevd.settrace('172.16.207.1', port=65500, stdoutToServer=True, stderrToServer=True)
inject_globals = {
# Pass a copy of the running dictionary, the low state chunks and
# the current state dictionaries.