From cb16385ddbd8a8a58a5e0b036ddb9db72151cc00 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 29 Nov 2018 15:04:27 -0500 Subject: [PATCH] Add confluent2ansible Utility that wil take a noderange and generate an appropriate ansible hosts file, including carrying over pertinent groups. --- confluent_client/bin/confluent2ansible | 69 ++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 confluent_client/bin/confluent2ansible diff --git a/confluent_client/bin/confluent2ansible b/confluent_client/bin/confluent2ansible new file mode 100644 index 00000000..de9f7b99 --- /dev/null +++ b/confluent_client/bin/confluent2ansible @@ -0,0 +1,69 @@ +#!/usr/bin/env python +import csv +import optparse +import signal +import sys +import os +try: + signal.signal(signal.SIGPIPE, signal.SIG_DFL) +except AttributeError: + pass + +path = os.path.dirname(os.path.realpath(__file__)) +path = os.path.realpath(os.path.join(path, '..', 'lib', 'python')) +if path.startswith('/opt'): + sys.path.append(path) + +import confluent.client as client +import confluent.sortutil as sortutil + + +def lookupdata(data, key): + ret = data.get(key, {}).get('value', '') + if ret is None: + ret = '' + return ret + +def main(): + argparser = optparse.OptionParser( + usage='''\n %prog noderange -o ansible.hosts + \n ''') + argparser.add_option('-o', '--output', + help='Ansible hosts file') + (options, args) = argparser.parse_args() + try: + noderange = args[0] + except IndexError: + argparser.print_help() + sys.exit(1) + if not options.output: + sys.stderr.write('Output file must be specified by -o\n') + sys.exit(1) + sess = client.Command() + databynode = {} + for res in sess.read('/noderange/{0}/attributes/all'.format(noderange)): + for node in res.get('databynode', {}): + if node not in databynode: + databynode[node] = {} + databynode[node].update(res['databynode'][node]) + nodesbygroup = {} + with open(options.output, 'w') as importfile: + for node in sortutil.natural_sort(databynode): + data = databynode[node] + if not data.get('groups', []): + importfile.write(node + '\n') + for g in data.get('groups', []): + if g not in nodesbygroup: + nodesbygroup[g] = set([node]) + else: + nodesbygroup[g].add(node) + for group in sortutil.natural_sort(nodesbygroup): + importfile.write('[{0}]\n'.format(group)) + for node in sortutil.natural_sort(nodesbygroup[group]): + importfile.write('{0}\n'.format(node)) + + + + +if __name__ == '__main__': + main()