|
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 os
|
|
Theo Chatzimichos |
02fadf |
import sys
|
|
Theo Chatzimichos |
02fadf |
|
|
|
ac656a |
import yaml
|
|
Christian Boltz |
25cb76 |
from get_roles import read_file_skip_jinja
|
|
|
04eaa2 |
from get_valid_custom_grains import get_countries, get_valid_global_grains
|
|
Theo Chatzimichos |
7cceb8 |
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
def error_msg(sls, key, valid_values):
|
|
|
8c9349 |
if isinstance(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)
|
|
|
ac656a |
print(f'pillar/id/{sls} has invalid value for the "{key}" key. Valid value{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:
|
|
|
ac656a |
print(f'pillar/id/{sls} is missing the "{key}" key')
|
|
Theo Chatzimichos |
02fadf |
return 1
|
|
Theo Chatzimichos |
02fadf |
|
|
|
8c9349 |
if isinstance(valid_values, str):
|
|
Theo Chatzimichos |
02fadf |
if value != valid_values:
|
|
Theo Chatzimichos |
02fadf |
status = error_msg(sls, key, valid_values)
|
|
|
c3f233 |
elif valid_values and value not in valid_values:
|
|
|
c3f233 |
status = error_msg(sls, key, map(str, 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 |
7cceb8 |
valid_global_grains = get_valid_global_grains()
|
|
|
04eaa2 |
all_countries = get_countries()
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
all_ids = sorted(os.listdir('pillar/id'))
|
|
Theo Chatzimichos |
02fadf |
for sls in all_ids:
|
|
Christian Boltz |
2570f4 |
if sls == 'README.md':
|
|
Christian Boltz |
2570f4 |
continue
|
|
Christian Boltz |
2570f4 |
|
|
Christian Boltz |
25cb76 |
content = read_file_skip_jinja("pillar/id/%s" % sls)
|
|
Karol Babioch |
3016f1 |
mygrains = yaml.safe_load(content)['grains']
|
|
Theo Chatzimichos |
02fadf |
|
|
Christian Boltz |
25cb76 |
for key, valid_values in valid_global_grains.items():
|
|
Christian Boltz |
25cb76 |
status = test_custom_grain(mygrains, sls, key, valid_values, status)
|
|
Theo Chatzimichos |
02fadf |
|
|
|
04eaa2 |
if 'country' not in mygrains or mygrains['country'] not in all_countries:
|
|
|
04eaa2 |
status = error_msg(sls, 'country', all_countries)
|
|
Theo Chatzimichos |
02fadf |
|
|
Theo Chatzimichos |
02fadf |
sys.exit(status)
|