mirror of
https://github.com/valitydev/salt.git
synced 2024-11-09 01:36:48 +00:00
Merge pull request #31152 from garethgreenaway/30994_beacon_add_failing_and_other_fixes
fixes to beacon module, state module and friends
This commit is contained in:
commit
f5ab76801b
@ -56,8 +56,10 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for load beacon should be a list of dicts
|
# Configuration for load beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
|
return False, ('Configuration for btmp beacon must '
|
||||||
|
'be a list of dictionaries.')
|
||||||
return False
|
return False
|
||||||
return True
|
return True, 'Valid beacon configuration'
|
||||||
|
|
||||||
|
|
||||||
# TODO: add support for only firing events for specific users and login times
|
# TODO: add support for only firing events for specific users and login times
|
||||||
|
@ -42,9 +42,9 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for diskusage beacon should be a list of dicts
|
# Configuration for diskusage beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for diskusage beacon must be a dictionary.')
|
return False, ('Configuration for diskusage beacon '
|
||||||
return False
|
'must be a dictionary.')
|
||||||
return True
|
return True, 'Valid beacon configuration'
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -95,44 +95,39 @@ def validate(config):
|
|||||||
]
|
]
|
||||||
|
|
||||||
# Configuration for diskusage beacon should be a list of dicts
|
# Configuration for diskusage beacon should be a list of dicts
|
||||||
|
log.debug('config {0}'.format(config))
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for inotify beacon must be a dictionary.')
|
return False, 'Configuration for inotify beacon must be a dictionary.'
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
for config_item in config:
|
for config_item in config:
|
||||||
if not isinstance(config[config_item], dict):
|
if not isinstance(config[config_item], dict):
|
||||||
log.info('Configuration for inotify beacon must '
|
return False, ('Configuration for inotify beacon must '
|
||||||
'be a dictionary of dictionaries.')
|
'be a dictionary of dictionaries.')
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
if not any(j in ['mask', 'recurse', 'auto_add'] for j in config[config_item]):
|
if not any(j in ['mask', 'recurse', 'auto_add'] for j in config[config_item]):
|
||||||
log.info('Configuration for inotify beacon must '
|
return False, ('Configuration for inotify beacon '
|
||||||
'contain mask, recurse or auto_add items.')
|
'must contain mask, recurse or auto_add items.')
|
||||||
return False
|
|
||||||
|
|
||||||
if 'auto_add' in config[config_item]:
|
if 'auto_add' in config[config_item]:
|
||||||
if not isinstance(config[config_item]['auto_add'], bool):
|
if not isinstance(config[config_item]['auto_add'], bool):
|
||||||
log.info('Configuration for inotify beacon '
|
return False, ('Configuration for inotify beacon '
|
||||||
'auto_add must be boolean.')
|
'auto_add must be boolean.')
|
||||||
return False
|
|
||||||
|
|
||||||
if 'recurse' in config[config_item]:
|
if 'recurse' in config[config_item]:
|
||||||
if not isinstance(config[config_item]['recurse'], bool):
|
if not isinstance(config[config_item]['recurse'], bool):
|
||||||
log.info('Configuration for inotify beacon '
|
return False, ('Configuration for inotify beacon '
|
||||||
'recurse must be boolean.')
|
' recurse must be boolean.')
|
||||||
return False
|
|
||||||
|
|
||||||
if 'mask' in config[config_item]:
|
if 'mask' in config[config_item]:
|
||||||
if not isinstance(config[config_item]['mask'], list):
|
if not isinstance(config[config_item]['mask'], list):
|
||||||
log.info('Configuration for inotify beacon '
|
return False, ('Configuration for inotify beacon '
|
||||||
'mask must be list.')
|
' mask must be list.')
|
||||||
return False
|
|
||||||
for mask in config[config_item]['mask']:
|
for mask in config[config_item]['mask']:
|
||||||
if mask not in VALID_MASK:
|
if mask not in VALID_MASK:
|
||||||
log.info('Configuration for inotify beacon '
|
return False, ('Configuration for inotify beacon '
|
||||||
'invalid mask option {0}.'.format(mask))
|
'invalid mask option {0}.'.format(mask))
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -54,10 +54,9 @@ def validate(config):
|
|||||||
else:
|
else:
|
||||||
for item in config:
|
for item in config:
|
||||||
if not isinstance(config[item], dict):
|
if not isinstance(config[item], dict):
|
||||||
log.info('Configuration for journald beacon must '
|
return False, ('Configuration for journald beacon must '
|
||||||
'be a dictionary of dictionaries.')
|
'be a dictionary of dictionaries.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -33,33 +33,28 @@ def validate(config):
|
|||||||
|
|
||||||
# Configuration for load beacon should be a list of dicts
|
# Configuration for load beacon should be a list of dicts
|
||||||
if not isinstance(config, list):
|
if not isinstance(config, list):
|
||||||
log.info('Configuration for load beacon must be a list.')
|
return False, ('Configuration for load beacon must be a list.')
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
for config_item in config:
|
for config_item in config:
|
||||||
if not isinstance(config_item, dict):
|
if not isinstance(config_item, dict):
|
||||||
log.info('Configuration for load beacon must '
|
return False, ('Configuration for load beacon must '
|
||||||
'be a list of dictionaries.')
|
'be a list of dictionaries.')
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
if not any(j in ['1m', '5m', '15m'] for j in config_item.keys()):
|
if not any(j in ['1m', '5m', '15m'] for j in config_item.keys()):
|
||||||
log.info('Configuration for load beacon must '
|
return False, ('Configuration for load beacon must '
|
||||||
'contain 1m, 5m and 15m items.')
|
'contain 1m, 5m and 15m items.')
|
||||||
return False
|
|
||||||
|
|
||||||
for item in config_item:
|
for item in config_item:
|
||||||
if not isinstance(config_item[item], list):
|
if not isinstance(config_item[item], list):
|
||||||
log.info('Configuration for load beacon: '
|
return False, ('Configuration for load beacon: '
|
||||||
'1m, 5m and 15m items must be '
|
'1m, 5m and 15m items must be '
|
||||||
'a list of two items.')
|
'a list of two items.')
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
if len(config_item[item]) != 2:
|
if len(config_item[item]) != 2:
|
||||||
log.info('Configuration for load beacon: '
|
return False, ('Configuration for load beacon: '
|
||||||
'1m, 5m and 15m items must be '
|
'1m, 5m and 15m items must be '
|
||||||
'a list of two items.')
|
'a list of two items.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -48,20 +48,17 @@ def validate(config):
|
|||||||
|
|
||||||
# Configuration for load beacon should be a list of dicts
|
# Configuration for load beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for load beacon must be a dictionary.')
|
return False, ('Configuration for load beacon must be a dictionary.')
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
for item in config:
|
for item in config:
|
||||||
if not isinstance(config[item], dict):
|
if not isinstance(config[item], dict):
|
||||||
log.info('Configuration for load beacon must '
|
return False, ('Configuration for load beacon must '
|
||||||
'be a dictionary of dictionaries.')
|
'be a dictionary of dictionaries.')
|
||||||
return False
|
|
||||||
else:
|
else:
|
||||||
if not any(j in VALID_ITEMS for j in config[item]):
|
if not any(j in VALID_ITEMS for j in config[item]):
|
||||||
log.info('Invalid configuration item in '
|
return False, ('Invalid configuration item in '
|
||||||
'Beacon configuration.')
|
'Beacon configuration.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -38,9 +38,8 @@ def validate(config):
|
|||||||
Validate the beacon configuration
|
Validate the beacon configuration
|
||||||
'''
|
'''
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for rest_example beacon must be a dictionary.')
|
return False, ('Configuration for rest_example beacon must be a dictionary.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -18,9 +18,8 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for ps beacon should be a list of dicts
|
# Configuration for ps beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for ps beacon must be a dictionary.')
|
return False, ('Configuration for ps beacon must be a dictionary.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -20,9 +20,8 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for service beacon should be a list of dicts
|
# Configuration for service beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for service beacon must be a dictionary.')
|
return False, ('Configuration for service beacon must be a dictionary.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -47,9 +47,8 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for sh beacon should be a list of dicts
|
# Configuration for sh beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for sh beacon must be a dictionary.')
|
return False, ('Configuration for sh beacon must be a dictionary.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -32,9 +32,9 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for twilio_txt_msg beacon should be a list of dicts
|
# Configuration for twilio_txt_msg beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for twilio_txt_msg beacon must be a dictionary.')
|
return False, ('Configuration for twilio_txt_msg beacon '
|
||||||
return False
|
'must be a dictionary.')
|
||||||
return True
|
return True, 'Valid beacon configuration'
|
||||||
|
|
||||||
|
|
||||||
def beacon(config):
|
def beacon(config):
|
||||||
|
@ -61,9 +61,8 @@ def validate(config):
|
|||||||
'''
|
'''
|
||||||
# Configuration for wtmp beacon should be a list of dicts
|
# Configuration for wtmp beacon should be a list of dicts
|
||||||
if not isinstance(config, dict):
|
if not isinstance(config, dict):
|
||||||
log.info('Configuration for wtmp beacon must be a dictionary.')
|
return False, ('Configuration for wtmp beacon must be a dictionary.')
|
||||||
return False
|
return True, 'Valid beacon configuration'
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: add support for only firing events for specific users and login times
|
# TODO: add support for only firing events for specific users and login times
|
||||||
|
@ -100,14 +100,19 @@ def add(name, beacon_data, **kwargs):
|
|||||||
|
|
||||||
# Attempt to validate
|
# Attempt to validate
|
||||||
if hasattr(beacon_module, 'validate'):
|
if hasattr(beacon_module, 'validate'):
|
||||||
valid = beacon_module.validate(beacon_data)
|
_beacon_data = beacon_data
|
||||||
|
if 'enabled' in _beacon_data:
|
||||||
|
del _beacon_data['enabled']
|
||||||
|
valid, vcomment = beacon_module.validate(_beacon_data)
|
||||||
else:
|
else:
|
||||||
log.info('Beacon {0} does not have a validate'
|
log.info('Beacon {0} does not have a validate'
|
||||||
' function, skipping validation.'.format(name))
|
' function, skipping validation.'.format(name))
|
||||||
valid = True
|
valid = True
|
||||||
|
|
||||||
if not valid:
|
if not valid:
|
||||||
ret['comment'] = 'Beacon {0} configuration invalid, not adding.'.format(name)
|
ret['result'] = False
|
||||||
|
ret['comment'] = ('Beacon {0} configuration invalid, '
|
||||||
|
'not adding.\n{1}'.format(name, vcomment))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -164,14 +169,19 @@ def modify(name, beacon_data, **kwargs):
|
|||||||
|
|
||||||
# Attempt to validate
|
# Attempt to validate
|
||||||
if hasattr(beacon_module, 'validate'):
|
if hasattr(beacon_module, 'validate'):
|
||||||
valid = beacon_module.validate(beacon_data)
|
_beacon_data = beacon_data
|
||||||
|
if 'enabled' in _beacon_data:
|
||||||
|
del _beacon_data['enabled']
|
||||||
|
valid, vcomment = beacon_module.validate(_beacon_data)
|
||||||
else:
|
else:
|
||||||
log.info('Beacon {0} does not have a validate'
|
log.info('Beacon {0} does not have a validate'
|
||||||
' function, skipping validation.'.format(name))
|
' function, skipping validation.'.format(name))
|
||||||
valid = True
|
valid = True
|
||||||
|
|
||||||
if not valid:
|
if not valid:
|
||||||
ret['comment'] = 'Beacon {0} configuration invalid, not modifying.'.format(name)
|
ret['result'] = False
|
||||||
|
ret['comment'] = ('Beacon {0} configuration invalid, '
|
||||||
|
'not adding.\n{1}'.format(name, vcomment))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
_current = current_beacons[name]
|
_current = current_beacons[name]
|
||||||
|
@ -30,6 +30,9 @@ Management of the Salt beacons
|
|||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
import logging
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def present(name,
|
def present(name,
|
||||||
**kwargs):
|
**kwargs):
|
||||||
@ -66,8 +69,11 @@ def present(name,
|
|||||||
ret['comment'] = result['comment']
|
ret['comment'] = result['comment']
|
||||||
return ret
|
return ret
|
||||||
else:
|
else:
|
||||||
ret['comment'].append('Modifying {0} in beacons'.format(name))
|
if 'changes' in result:
|
||||||
ret['changes'] = result['changes']
|
ret['comment'].append('Modifying {0} in beacons'.format(name))
|
||||||
|
ret['changes'] = result['changes']
|
||||||
|
else:
|
||||||
|
ret['comment'].append(result['comment'])
|
||||||
else:
|
else:
|
||||||
if 'test' in __opts__ and __opts__['test']:
|
if 'test' in __opts__ and __opts__['test']:
|
||||||
kwargs['test'] = True
|
kwargs['test'] = True
|
||||||
|
Loading…
Reference in New Issue
Block a user