Theo Chatzimichos e53270
#!/usr/bin/python3
Theo Chatzimichos e53270
Theo Chatzimichos e53270
# For description and usage, see the argparse options at the end of the file
Theo Chatzimichos e53270
Theo Chatzimichos e53270
import argparse
Theo Chatzimichos e53270
import yaml
Theo Chatzimichos e53270
import os
Theo Chatzimichos e53270
Theo Chatzimichos e53270
Theo Chatzimichos e53270
def get_roles(with_base=False):
Theo Chatzimichos e53270
    roles = []
Theo Chatzimichos e53270
    if with_base:
Theo Chatzimichos e53270
        roles.append('base')
Theo Chatzimichos e53270
Theo Chatzimichos e53270
    for sls in os.listdir('pillar/id'):
Theo Chatzimichos e53270
        with open("pillar/id/%s" % sls) as f:
Theo Chatzimichos e53270
            try:
Theo Chatzimichos e53270
                _roles = yaml.load(f)['grains']['roles']
Theo Chatzimichos e53270
            except KeyError:
Theo Chatzimichos e53270
                continue
Theo Chatzimichos e53270
            for item in _roles:
Theo Chatzimichos e53270
                roles.append(item)
Theo Chatzimichos e53270
Theo Chatzimichos e53270
    roles = sorted(set(roles))
Theo Chatzimichos e53270
    return roles
Theo Chatzimichos e53270
Theo Chatzimichos e53270
Theo Chatzimichos e53270
def print_roles():
Theo Chatzimichos e53270
    parser = argparse.ArgumentParser('Collects all the roles that are assigned to a minion, and returns them as a python array, a yaml list or a plain list (parsable by bash)')
Theo Chatzimichos e53270
    parser.add_argument('-p', '--python', action='store_true', help='Prints the roles as a python array')
Theo Chatzimichos e53270
    parser.add_argument('-y', '--yaml', action='store_true', help='Prints the roles as a yaml array')
Theo Chatzimichos e53270
    parser.add_argument('--with-base', action='store_true', help='Include the base role at the results')
Theo Chatzimichos e53270
    args = parser.parse_args()
Theo Chatzimichos e53270
Theo Chatzimichos e53270
    roles = get_roles(with_base=args.with_base)
Theo Chatzimichos e53270
    if args.python:
Theo Chatzimichos e53270
        print(roles)
Theo Chatzimichos e53270
    elif args.yaml:
Theo Chatzimichos e53270
        print('roles:')
Theo Chatzimichos e53270
        for role in roles:
Theo Chatzimichos e53270
            print('  - %s' % role)
Theo Chatzimichos e53270
    else:
Theo Chatzimichos e53270
        print(' '.join(roles))
Theo Chatzimichos e53270
Theo Chatzimichos e53270
Theo Chatzimichos e53270
if __name__ == "__main__":
Theo Chatzimichos e53270
    print_roles()