use the cache runner in the cache roster file to get grains

Instead of having to query each file individitually.
This commit is contained in:
Daniel Wallace 2016-10-28 17:37:34 -05:00
parent 4c2d4159fd
commit c3e33c3b99
4 changed files with 9 additions and 24 deletions

View file

@ -227,6 +227,7 @@ additional-builtins=__opts__,
__pillar__,
__grains__,
__context__,
__runner__,
__ret__,
__env__,
__low__,

View file

@ -432,7 +432,7 @@ def fileserver(opts, backends):
pack={'__utils__': utils(opts)})
def roster(opts, whitelist=None):
def roster(opts, runner, whitelist=None):
'''
Returns the roster modules
'''
@ -441,6 +441,7 @@ def roster(opts, whitelist=None):
opts,
tag='roster',
whitelist=whitelist,
pack={'__runner__': runner},
)

View file

@ -50,7 +50,7 @@ class Roster(object):
self.backends = backends
if not backends:
self.backends = ['flat']
self.rosters = salt.loader.roster(opts)
self.rosters = salt.loader.roster(opts, runner=salt.loader.runner(self.opts))
def _gen_back(self):
'''

View file

@ -18,16 +18,11 @@ file. The default for this is:
'''
from __future__ import absolute_import
# Import python libs
import os.path
import msgpack
# Import Salt libs
import salt.loader
import salt.utils
import salt.utils.cloud
import salt.utils.validate.net
from salt import syspaths
def targets(tgt, tgt_type='glob', **kwargs): # pylint: disable=W0613
@ -35,28 +30,16 @@ def targets(tgt, tgt_type='glob', **kwargs): # pylint: disable=W0613
Return the targets from the flat yaml file, checks opts for location but
defaults to /etc/salt/roster
'''
cache = os.path.join(syspaths.CACHE_DIR, 'master', 'minions', tgt, 'data.p')
if not os.path.exists(cache):
return {}
roster_order = __opts__.get('roster_order', (
'public', 'private', 'local'
))
with salt.utils.fopen(cache, 'r') as fh_:
cache_data = msgpack.load(fh_)
ipv4 = cache_data.get('grains', {}).get('ipv4', [])
preferred_ip = extract_ipv4(roster_order, ipv4)
if preferred_ip is None:
return {}
return {
tgt: {
'host': preferred_ip,
}
}
cached_data = __runner__['cache.grains'](tgt=tgt, expr_form=tgt_type)
ret = {}
for server, grains in cached_data.items():
ret[server] = {'host': extract_ipv4(roster_order, grains.get('ipv4', []))}
return ret
def extract_ipv4(roster_order, ipv4):