Skip to content

Instantly share code, notes, and snippets.

@gtmanfred
Created August 4, 2018 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gtmanfred/854724d07ae240005f326a52bdb62172 to your computer and use it in GitHub Desktop.
Save gtmanfred/854724d07ae240005f326a52bdb62172 to your computer and use it in GitHub Desktop.
diff --git a/salt/roster/flat.py b/salt/roster/flat.py
index 9ccb18bc97..8a7fa46d99 100644
--- a/salt/roster/flat.py
+++ b/salt/roster/flat.py
@@ -4,20 +4,6 @@ Read in the roster from a flat file using the renderer system
'''
from __future__ import absolute_import, print_function, unicode_literals
-# Import python libs
-import fnmatch
-import re
-import copy
-
-# Try to import range from https://github.com/ytoolshed/range
-HAS_RANGE = False
-try:
- import seco.range
- HAS_RANGE = True
-except ImportError:
- pass
-# pylint: enable=import-error
-
# Import Salt libs
import salt.loader
import salt.config
@@ -47,122 +33,4 @@ def targets(tgt, tgt_type='glob', **kwargs):
conditioned_raw = {}
for minion in raw:
conditioned_raw[six.text_type(minion)] = salt.config.apply_sdb(raw[minion])
- rmatcher = RosterMatcher(conditioned_raw, tgt, tgt_type, 'ipv4', opts=__opts__)
- return rmatcher.targets()
-
-
-class RosterMatcher(object):
- '''
- Matcher for the roster data structure
- '''
- def __init__(self, raw, tgt, tgt_type, ipv='ipv4', **kwargs):
- self.tgt = tgt
- self.tgt_type = tgt_type
- self.raw = raw
- self.ipv = ipv
- self.opts = kwargs.get('opts', {})
-
- def targets(self):
- '''
- Execute the correct tgt_type routine and return
- '''
- try:
- return getattr(self, 'ret_{0}_minions'.format(self.tgt_type))()
- except AttributeError:
- return {}
-
- def ret_glob_minions(self):
- '''
- Return minions that match via glob
- '''
- minions = {}
- for minion in self.raw:
- if fnmatch.fnmatch(minion, self.tgt):
- data = self.get_data(minion)
- if data:
- minions[minion] = data.copy()
- return minions
-
- def ret_pcre_minions(self):
- '''
- Return minions that match via pcre
- '''
- minions = {}
- for minion in self.raw:
- if re.match(self.tgt, minion):
- data = self.get_data(minion)
- if data:
- minions[minion] = data.copy()
- return minions
-
- def ret_list_minions(self):
- '''
- Return minions that match via list
- '''
- minions = {}
- if not isinstance(self.tgt, list):
- self.tgt = self.tgt.split(',')
- for minion in self.raw:
- if minion in self.tgt:
- data = self.get_data(minion)
- if data:
- minions[minion] = data.copy()
- return minions
-
- def ret_nodegroup_minions(self):
- '''
- Return minions which match the special list-only groups defined by
- ssh_list_nodegroups
- '''
- minions = {}
- nodegroup = self.opts.get('ssh_list_nodegroups', {}).get(self.tgt, [])
- if not isinstance(nodegroup, list):
- nodegroup = nodegroup.split(',')
- for minion in self.raw:
- if minion in nodegroup:
- data = self.get_data(minion)
- if data:
- minions[minion] = data.copy()
- return minions
-
- def ret_range_minions(self):
- '''
- Return minions that are returned by a range query
- '''
- if HAS_RANGE is False:
- raise RuntimeError("Python lib 'seco.range' is not available")
-
- minions = {}
- range_hosts = _convert_range_to_list(self.tgt, self.opts['range_server'])
-
- for minion in self.raw:
- if minion in range_hosts:
- data = self.get_data(minion)
- if data:
- minions[minion] = data.copy()
- return minions
-
- def get_data(self, minion):
- '''
- Return the configured ip
- '''
- ret = copy.deepcopy(self.opts.get('roster_defaults', {}))
- if isinstance(self.raw[minion], six.string_types):
- ret.update({'host': self.raw[minion]})
- return ret
- elif isinstance(self.raw[minion], dict):
- ret.update(self.raw[minion])
- return ret
- return False
-
-
-def _convert_range_to_list(tgt, range_server):
- '''
- convert a seco.range range into a list target
- '''
- r = seco.range.Range(range_server)
- try:
- return r.expand(tgt)
- except seco.range.RangeException as err:
- log.error('Range server exception: %s', err)
- return []
+ return __utils__['roster_matcher.targets'](conditioned_raw, tgt, tgt_type, 'ipv4')
diff --git a/salt/roster/terraform.py b/salt/roster/terraform.py
index d57f47f145..98150eea37 100644
--- a/salt/roster/terraform.py
+++ b/salt/roster/terraform.py
@@ -52,7 +52,6 @@ import os.path
# Import Salt libs
import salt.utils.files
import salt.utils.json
-from salt.roster.flat import RosterMatcher
log = logging.getLogger(__name__)
@@ -170,5 +169,4 @@ def targets(tgt, tgt_type='glob', **kwargs): # pylint: disable=W0613
raw = _parse_state_file(roster_file)
log.debug('%s hosts in terraform state file', len(raw))
- rmatcher = RosterMatcher(raw, tgt, tgt_type, 'ipv4', opts=__opts__)
- return rmatcher.targets()
+ return __utils__['roster_matcher.targets'](raw, tgt, tgt_type, 'ipv4')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment