import os import yaml import re def _all_hosts(): return filter(lambda fn: '.' in fn and not fn.startswith('.') and os.path.isdir(fn),os.listdir(".")) def _load_db(): rules = dict() rules_file = "cosmos-rules.yaml"; if os.path.exists(rules_file): with open(rules_file) as fd: rules.update(yaml.load(fd)) all_hosts = _all_hosts() members = dict() for node_name in all_hosts: for reg,cls in rules.iteritems(): if re.search(reg,node_name): for cls_name in cls.keys(): h = members.get(cls_name,[]) h.append(node_name) members[cls_name] = h members['all'] = all_hosts classes = dict() for node_name in all_hosts: node_classes = dict() for reg,cls in rules.iteritems(): if re.search(reg,node_name): node_classes.update(cls) classes[node_name] = node_classes # Sort member lists for a more easy to read diff for cls in members.keys(): members[cls].sort() return dict(classes=classes,members=members) _db = None def cosmos_db(): global _db if _db is None: _db = _load_db() return _db if __name__ == '__main__': print yaml.dump(cosmos_db())