#!/usr/bin/python3
# Collects all the assigned roles of all the minions, and checks if the
# declared {salt,pillar}/role/*.sls files actually match a minion-assigned role
import yaml
import os
import sys
all_roles = ['base']
for sls in os.listdir('pillar/id'):
with open("pillar/id/%s" % sls) as f:
try:
_roles = yaml.load(f)['grains']['roles']
except KeyError:
continue
for item in _roles:
all_roles.append(item)
all_roles = sorted(set(all_roles))
for directory in ['salt', 'pillar']:
for sls in os.listdir('%s/role' % directory):
if sls.endswith('.sls'):
with open('salt/role/%s' % sls) as f:
if sls.split('.sls')[0] not in all_roles:
print ('%s/role/%s not in roles' % (directory, sls))
status = 1
sys.exit(status)