Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:Update
salt.4663
0033-Add-master_tops-support-in-salt-ssh.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0033-Add-master_tops-support-in-salt-ssh.patch of Package salt.4663
From b459456161c99ab40618c630590a542c668fa735 Mon Sep 17 00:00:00 2001 From: Matei Albu <malbu@suse.de> Date: Thu, 1 Dec 2016 14:38:51 +0100 Subject: [PATCH 33/38] Add master_tops support in salt-ssh (cherry picked from commit 7037fa1) Add/remove newlines Needed for the lint check to pass. (cherry picked from commit 65a0f10) --- salt/client/ssh/state.py | 35 +++++++++++++++++++++++++++++++++++ salt/state.py | 10 +++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/salt/client/ssh/state.py b/salt/client/ssh/state.py index a737c77..5134a51 100644 --- a/salt/client/ssh/state.py +++ b/salt/client/ssh/state.py @@ -4,6 +4,7 @@ Create ssh executor system ''' from __future__ import absolute_import # Import python libs +import logging import os import tarfile import tempfile @@ -22,6 +23,8 @@ import salt.state import salt.loader import salt.minion +log = logging.getLogger(__name__) + class SSHState(salt.state.State): ''' @@ -65,6 +68,7 @@ class SSHHighState(salt.state.BaseHighState): salt.state.BaseHighState.__init__(self, opts) self.state = SSHState(opts, pillar, wrapper) self.matcher = salt.minion.Matcher(self.opts) + self.tops = salt.loader.tops(self.opts) def load_dynamic(self, matches): ''' @@ -72,6 +76,37 @@ class SSHHighState(salt.state.BaseHighState): ''' return + def _ext_nodes(self): + ''' + Evaluate master_tops locally + ''' + if 'id' not in self.opts: + log.error('Received call for external nodes without an id') + return {} + if not salt.utils.verify.valid_id(self.opts, self.opts['id']): + return {} + # Evaluate all configured master_tops interfaces + + grains = {} + ret = {} + + if 'grains' in self.opts: + grains = self.opts['grains'] + for fun in self.tops: + if fun not in self.opts.get('master_tops', {}): + continue + try: + ret.update(self.tops[fun](opts=self.opts, grains=grains)) + except Exception as exc: + # If anything happens in the top generation, log it and move on + log.error( + 'Top function {0} failed with error {1} for minion ' + '{2}'.format( + fun, exc, self.opts['id'] + ) + ) + return ret + def lowstate_file_refs(chunks, extras=''): ''' diff --git a/salt/state.py b/salt/state.py index 7ea76c2..c1d62b7 100644 --- a/salt/state.py +++ b/salt/state.py @@ -2625,7 +2625,7 @@ class BaseHighState(object): if isinstance(item, six.string_types): matches[saltenv].append(item) _filter_matches(match, data, self.opts['nodegroups']) - ext_matches = self.client.ext_nodes() + ext_matches = self._ext_nodes() for saltenv in ext_matches: if saltenv in matches: matches[saltenv] = list( @@ -2635,6 +2635,14 @@ class BaseHighState(object): # pylint: enable=cell-var-from-loop return matches + def _ext_nodes(self): + ''' + Get results from an external node classifier. + Override it if the execution of the external node clasifier + needs customization. + ''' + return self.client.ext_nodes() + def load_dynamic(self, matches): ''' If autoload_dynamic_modules is True then automatically load the -- 2.10.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor