|
Theo Chatzimichos |
02fadf |
#!/usr/bin/python3
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
# Validates if the pillar/id/$FQDN.sls has correct custom grains
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
import yaml
|
|
Theo Chatzimichos |
02fadf |
import os
|
|
Theo Chatzimichos |
02fadf |
import sys
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
def error_msg(sls, key, valid_values):
|
|
Theo Chatzimichos |
02fadf |
if type(valid_values) == str:
|
|
Theo Chatzimichos |
02fadf |
msg = ' is'
|
|
Theo Chatzimichos |
02fadf |
result = valid_values
|
|
Theo Chatzimichos |
02fadf |
else:
|
|
Theo Chatzimichos |
02fadf |
msg = 's are'
|
|
Theo Chatzimichos |
02fadf |
result = ', '.join(valid_values)
|
|
Theo Chatzimichos |
02fadf |
print('pillar/id/%s has invalid value for the "%s" key. Valid value%s: %s' % (sls, key, msg, result))
|
|
Theo Chatzimichos |
02fadf |
return 1
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
def test_custom_grain(mygrains, sls, key, valid_values, status):
|
|
Theo Chatzimichos |
02fadf |
try:
|
|
Theo Chatzimichos |
02fadf |
value = mygrains[key]
|
|
Theo Chatzimichos |
02fadf |
except KeyError:
|
|
Theo Chatzimichos |
02fadf |
print('pillar/id/%s is missing the "%s" key' % (sls, key))
|
|
Theo Chatzimichos |
02fadf |
return 1
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
if type(valid_values) == str:
|
|
Theo Chatzimichos |
02fadf |
if value != valid_values:
|
|
Theo Chatzimichos |
02fadf |
status = error_msg(sls, key, valid_values)
|
|
Theo Chatzimichos |
02fadf |
else:
|
|
Theo Chatzimichos |
02fadf |
if value not in valid_values:
|
|
Theo Chatzimichos |
02fadf |
status = error_msg(sls, key, valid_values)
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
return status
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
status = 0
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
with open('pillar/valid_custom_grains.yaml', 'r') as f:
|
|
Theo Chatzimichos |
02fadf |
VALID_CUSTOM_GRAINS = yaml.load(f)
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
valid_global_grains = VALID_CUSTOM_GRAINS['global']
|
|
Theo Chatzimichos |
02fadf |
all_localized_grains = VALID_CUSTOM_GRAINS['localized']
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
all_ids = sorted(os.listdir('pillar/id'))
|
|
Theo Chatzimichos |
02fadf |
for sls in all_ids:
|
|
Theo Chatzimichos |
02fadf |
with open("pillar/id/%s" % sls) as f:
|
|
Theo Chatzimichos |
02fadf |
mygrains = yaml.load(f)['grains']
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
for key, valid_values in valid_global_grains.items():
|
|
Theo Chatzimichos |
02fadf |
status = test_custom_grain(mygrains, sls, key, valid_values, status)
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
try:
|
|
Theo Chatzimichos |
02fadf |
valid_localized_grains = all_localized_grains[mygrains['country']]
|
|
Theo Chatzimichos |
02fadf |
for key, valid_values in valid_localized_grains.items():
|
|
Theo Chatzimichos |
02fadf |
status = test_custom_grain(mygrains, sls, key, valid_values, status)
|
|
Theo Chatzimichos |
02fadf |
except KeyError:
|
|
Theo Chatzimichos |
02fadf |
status = error_msg(sls, 'country', all_localized_grains.keys())
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
sys.exit(status)
|