Rush has uploaded a new change for review. https://gerrit.wikimedia.org/r/134922
Change subject: data.yaml sanity testing ...................................................................... data.yaml sanity testing Will be greatly improved and changed but for now: ./data_admin.py lint ./data_admin.py sort Change-Id: I3370c14047666390c6755dd5ede943253fcff5c8 --- A modules/admin/data/data_admin.py 1 file changed, 53 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/operations/puppet refs/changes/22/134922/1 diff --git a/modules/admin/data/data_admin.py b/modules/admin/data/data_admin.py new file mode 100644 index 0000000..80a3553 --- /dev/null +++ b/modules/admin/data/data_admin.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +#2014 Chase Pettet +#beginnings of a linter for data.yaml + +import sys +import yaml +import itertools +from collections import Counter +import collections + +def flatten(lists): + """flattens nested arrays""" + return list(itertools.chain.from_iterable(lists)) + +def all_assigned_users(admins): + """unique assigned users + :param admins: hash from valid data.yaml + :returns: list + """ + nested_users_list = map(lambda u: u['members'], admins['groups'].values()) + return list(set(flatten(nested_users_list))) + +def dict_sort(dictionary): + #dumping ordered dict to yaml causes issues, return normal dict + return dict(collections.OrderedDict(sorted(dictionary.items()))) + +def main(): + + data = open('data.yaml', 'r') + admins = yaml.load(data) + + if 'sort' in sys.argv: + print yaml.dump({'groups': dict_sort(admins['groups'])}) + print yaml.dump({'users': dict_sort(admins['users'])}) + + if 'lint' in sys.argv: + all_users = admins['users'].keys() + grouped_users = all_assigned_users(admins) + + #ensure all assigned users exist + non_existent_users = [u for u in grouped_users if u not in all_users] + if non_existent_users: + print "Users assigned that do not exist: %s" % (non_existent_users,) + + #ensure no two groups uses the same gid + gids = filter(None, [v.get('gid', None) for k, v in admins['groups'].iteritems()]) + dupes = [k for k,v in Counter(gids).items() if v>1] + if dupes: + print "Duplicate group GIDs: %s" % (dupes,) + +if __name__ == '__main__': + main() -- To view, visit https://gerrit.wikimedia.org/r/134922 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3370c14047666390c6755dd5ede943253fcff5c8 Gerrit-PatchSet: 1 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Rush <r...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits