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

Reply via email to