mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
grains state: allow deleting grain with 'False' value
and destroy a grain previously set to None, with destructive=True:
The f46722aaeb
commit, from Bruno Binet <bruno.binet@gmail.com> was
effectively reverted during my work on nested and complex values support.
This commit get it back, plus the ability to destroy a existing grain that
was previously set to None, plus tests for these.
This commit is contained in:
parent
c92326f5ea
commit
eee2318873
3 changed files with 51 additions and 3 deletions
|
@ -628,7 +628,8 @@ def set(key,
|
|||
elif isinstance(_existing_value, list):
|
||||
_existing_value_type = 'complex'
|
||||
|
||||
if _existing_value_type is not None and _existing_value == val:
|
||||
if _existing_value_type is not None and _existing_value == val \
|
||||
and (val is not None or destructive is not True):
|
||||
ret['comment'] = 'Grain is already set'
|
||||
return ret
|
||||
|
||||
|
|
|
@ -264,13 +264,33 @@ def absent(name,
|
|||
grains.absent
|
||||
'''
|
||||
|
||||
_non_existent_key = 'NonExistentValueMagicNumberSpK3hnufdHfeBUXCfqVK'
|
||||
|
||||
name = re.sub(delimiter, DEFAULT_TARGET_DELIM, name)
|
||||
ret = {'name': name,
|
||||
'changes': {},
|
||||
'result': True,
|
||||
'comment': ''}
|
||||
grain = __salt__['grains.get'](name, None)
|
||||
if grain:
|
||||
grain = __salt__['grains.get'](name, _non_existent_key)
|
||||
if grain is None:
|
||||
if __opts__['test']:
|
||||
ret['result'] = None
|
||||
if destructive is True:
|
||||
ret['comment'] = 'Grain {0} is set to be deleted'\
|
||||
.format(name)
|
||||
ret['changes'] = {'deleted': name}
|
||||
return ret
|
||||
ret = __salt__['grains.set'](name,
|
||||
None,
|
||||
destructive=destructive,
|
||||
force=force)
|
||||
if ret['result']:
|
||||
if destructive is True:
|
||||
ret['comment'] = 'Grain {0} was deleted'\
|
||||
.format(name)
|
||||
ret['changes'] = {'deleted': name}
|
||||
ret['name'] = name
|
||||
elif grain != _non_existent_key:
|
||||
if __opts__['test']:
|
||||
ret['result'] = None
|
||||
if destructive is True:
|
||||
|
|
|
@ -549,6 +549,20 @@ class GrainsTestCase(TestCase):
|
|||
+ "foo: null\n"
|
||||
)
|
||||
|
||||
# Unset grain when its value is False
|
||||
self.setGrains({'a': 'aval', 'foo': False})
|
||||
ret = grains.absent(
|
||||
name='foo')
|
||||
self.assertEqual(ret['result'], True)
|
||||
self.assertEqual(ret['comment'], 'Value for grain foo was set to None')
|
||||
self.assertEqual(ret['changes'], {'grain': 'foo', 'value': None})
|
||||
self.assertEqual(
|
||||
grains.__grains__,
|
||||
{'a': 'aval', 'foo': None})
|
||||
self.assertGrainFileContent("a: aval\n"
|
||||
+ "foo: null\n"
|
||||
)
|
||||
|
||||
# Unset a nested grain
|
||||
self.setGrains({'a': 'aval', 'foo': ['order', {'is': {'nested': 'bar'}}, 'correct']})
|
||||
ret = grains.absent(
|
||||
|
@ -651,6 +665,19 @@ class GrainsTestCase(TestCase):
|
|||
{'a': 'aval'})
|
||||
self.assertGrainFileContent("a: aval\n")
|
||||
|
||||
# Delete a previously unset grain
|
||||
self.setGrains({'a': 'aval', 'foo': None})
|
||||
ret = grains.absent(
|
||||
name='foo',
|
||||
destructive=True)
|
||||
self.assertEqual(ret['result'], True)
|
||||
self.assertEqual(ret['comment'], 'Grain foo was deleted')
|
||||
self.assertEqual(ret['changes'], {'deleted': 'foo'})
|
||||
self.assertEqual(
|
||||
grains.__grains__,
|
||||
{'a': 'aval'})
|
||||
self.assertGrainFileContent("a: aval\n")
|
||||
|
||||
# Delete a nested grain
|
||||
self.setGrains({'a': 'aval', 'foo': ['order', {'is': {'nested': 'bar', 'other': 'value'}}, 'correct']})
|
||||
ret = grains.absent(
|
||||
|
|
Loading…
Add table
Reference in a new issue