Merge branch '2016.3' into '2016.11'

Conflicts:
  - salt/minion.py
This commit is contained in:
rallytime 2017-03-01 16:07:14 -07:00
commit 776a9431b9
5 changed files with 50 additions and 8 deletions

View file

@ -1765,6 +1765,15 @@ class Minion(MinionBase):
tagify([self.opts['id'], 'start'], 'minion'),
)
def grains_refresh_manual(self):
'''
Perform a manual grains refresh
'''
self.opts['grains'] = salt.loader.grains(
self.opts,
force_refresh=True,
proxy=getattr(self, 'proxy', None))
def module_refresh(self, force_refresh=False, notify=False):
'''
Refresh the functions and returners.
@ -1942,6 +1951,8 @@ class Minion(MinionBase):
elif tag.startswith('manage_beacons'):
self.manage_beacons(tag, data)
elif tag.startswith('grains_refresh'):
if tag == 'grains_refresh_manual':
self.grains_refresh_manual()
if (data.get('force_refresh', False) or
self.grains_cache != self.opts['grains']):
self.pillar_refresh(force_refresh=True)

View file

@ -289,8 +289,8 @@ def setvals(grains, destructive=False, refresh=True):
msg = 'Unable to write to cache file {0}. Check permissions.'
log.error(msg.format(fn_))
if not __opts__.get('local', False):
# Sync the grains
__salt__['saltutil.sync_grains'](refresh=refresh)
# Refresh the grains
__salt__['saltutil.refresh_grains'](refresh=refresh)
# Return the grains we just set to confirm everything was OK
return new_grains
@ -423,7 +423,7 @@ def remove(key, val, delimiter=DEFAULT_TARGET_DELIM):
return setval(key, grains)
def delval(key, destructive=False):
def delval(key, destructive=False, refresh=True):
'''
.. versionadded:: 0.17.0
@ -435,6 +435,9 @@ def delval(key, destructive=False):
destructive
Delete the key, too. Defaults to False.
refresh
Refresh modules and pillar after removing the grain.
CLI Example:
.. code-block:: bash
@ -442,7 +445,7 @@ def delval(key, destructive=False):
salt '*' grains.delval key
'''
setval(key, None, destructive=destructive)
setval(key, None, destructive=destructive, refresh=refresh)
def ls(): # pylint: disable=C0103

View file

@ -310,6 +310,34 @@ def sync_states(saltenv=None, refresh=True):
return ret
def refresh_grains(refresh=True):
'''
.. versionadded:: 2016.3.6,2016.11.4,Nitrogen
Refresh the minion's grains without syncing custom grains modules from
``salt://_grains``.
refresh : True
If ``True``, refresh the available execution modules and recompile
pillar data for the minion. Set to ``False`` to prevent this refresh.
CLI Examples:
.. code-block:: bash
salt '*' saltutil.refresh_grains
'''
try:
ret = __salt__['event.fire']({}, 'grains_refresh_manual')
except Exception:
log.error('Failed to refresh grains', exc_info=True)
return False
if refresh:
refresh_modules()
refresh_pillar()
return ret
def sync_grains(saltenv=None, refresh=True):
'''
.. versionadded:: 0.10.0

View file

@ -448,9 +448,9 @@ def __get_artifact(salt_source):
log.debug(traceback.format_exc())
comment = 'Unable to manage file: {0}'.format(e)
else:
resolved_source = salt_source['target_file']
comment = ''
else:
resolved_source = salt_source['target_file']
comment = ''
return resolved_source, comment

View file

@ -32,7 +32,7 @@ grainsmod.__opts__ = {
grainsmod.__salt__ = {}
@patch.dict(grainsmod.__salt__, {'saltutil.sync_grains': MagicMock()})
@patch.dict(grainsmod.__salt__, {'saltutil.refresh_grains': MagicMock()})
@skipIf(NO_MOCK, NO_MOCK_REASON)
class GrainsModuleTestCase(TestCase):