From dab1d03d81c538966d03fb9318a4588a9e803b44 Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Sat, 24 Mar 2012 11:20:07 -0500 Subject: Allow to run directly from a git checkout (#1037) Signed-off-by: Sol Jerome --- src/lib/Bcfg2/Server/Admin/Query.py | 72 +++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/lib/Bcfg2/Server/Admin/Query.py (limited to 'src/lib/Bcfg2/Server/Admin/Query.py') diff --git a/src/lib/Bcfg2/Server/Admin/Query.py b/src/lib/Bcfg2/Server/Admin/Query.py new file mode 100644 index 000000000..3dd326645 --- /dev/null +++ b/src/lib/Bcfg2/Server/Admin/Query.py @@ -0,0 +1,72 @@ +import sys +import logging +import Bcfg2.Logger +import Bcfg2.Server.Admin + + +class Query(Bcfg2.Server.Admin.MetadataCore): + __shorthelp__ = "Query clients" + __longhelp__ = (__shorthelp__ + "\n\nbcfg2-admin query [-n] [-c] " + "[-f filename] g=group p=profile") + __usage__ = ("bcfg2-admin query [options] \n\n" + " %-25s%s\n" + " %-25s%s\n" + " %-25s%s\n" % + ("-n", + "query results delimited with newlines", + "-c", + "query results delimited with commas", + "-f filename", + "write query to file")) + + def __init__(self, setup): + Bcfg2.Server.Admin.MetadataCore.__init__(self, setup) + logging.root.setLevel(100) + Bcfg2.Logger.setup_logging(100, to_console=False, to_syslog=False) + + def __call__(self, args): + Bcfg2.Server.Admin.MetadataCore.__call__(self, args) + clients = list(self.metadata.clients.keys()) + filename_arg = False + filename = None + for arg in args: + if filename_arg == True: + filename = arg + filename_arg = False + continue + if arg in ['-n', '-c']: + continue + if arg in ['-f']: + filename_arg = True + continue + try: + k, v = arg.split('=') + except: + print("Unknown argument %s" % arg) + continue + if k == 'p': + nc = self.metadata.get_client_names_by_profiles(v.split(',')) + elif k == 'g': + nc = self.metadata.get_client_names_by_groups(v.split(',')) + # add probed groups (if present) + for conn in self.bcore.connectors: + if isinstance(conn, Bcfg2.Server.Plugins.Probes.Probes): + for c, glist in list(conn.cgroups.items()): + for g in glist: + if g in v.split(','): + nc.append(c) + else: + print("One of g= or p= must be specified") + raise SystemExit(1) + clients = [c for c in clients if c in nc] + if '-n' in args: + for client in clients: + print(client) + else: + print(','.join(clients)) + if '-f' in args: + f = open(filename, "w") + for client in clients: + f.write(client + "\n") + f.close() + print("Wrote results to %s" % (filename)) -- cgit v1.2.3-1-g7c22