From 2d8004000d032c7c004acc59d613e72dddd96975 Mon Sep 17 00:00:00 2001 From: Allen Lin37 Date: Fri, 17 Feb 2017 10:44:25 -0500 Subject: [PATCH] Adding nodeattrib to list and update attributes --- confluent_client/bin/nodeattrib | 133 ++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 confluent_client/bin/nodeattrib diff --git a/confluent_client/bin/nodeattrib b/confluent_client/bin/nodeattrib new file mode 100644 index 00000000..93b72fa7 --- /dev/null +++ b/confluent_client/bin/nodeattrib @@ -0,0 +1,133 @@ +#!/usr/bin/env python +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2017 Lenovo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +__author__ = 'alin37' + +import optparse +import os +import sys + +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 + + +def attrrequested(attr, attrlist, seenattributes): + for candidate in attrlist: + truename = candidate + if candidate.startswith('hm'): + candidate = candidate.replace('hm', 'hardwaremanagement', 1) + if candidate == attr: + seenattributes.add(truename) + return True + elif '.' not in candidate and attr.startswith(candidate + '.'): + seenattributes.add(truename) + return True + return False +argparser = optparse.OptionParser( + usage='''Usage: %prog [options] noderange [list of attributes]\n \ + %prog [options] noderange attribute1=value1,attribute2=value,... ''') +argparser.add_option('-b', '--blame', action='store_true', + help='Show information about how attributes inherited') +(options, args) = argparser.parse_args() + +showtype = 'all' +requestargs=None +try: + noderange = args[0] + nodelist = '/noderange/{0}/nodes/'.format(noderange) +except IndexError: + nodelist = '/nodes/' +session = client.Command() +exitcode = 0 + +if len(args) > 1: + if args[1] == 'all': + showtype = 'all' + elif args[1] == 'current': + showtype = 'current' + elif "=" in args[1]: + try: + if len(args[1:]) > 1: + for val in args[1:].split(','): + val = val.split('=') + exitcode=session.simple_noderange_command(noderange, 'attributes/all'.format(noderange), val[1], val[0]) + else: + val=args[1].split('=') + exitcode=session.simple_noderange_command(noderange, 'attributes/all'.format(noderange),val[1],val[0]) + except: + sys.stderr.write('Error: {0} not a valid expression\n'.format(str (args[1:]))) + exitcode = 1 + sys.exit(exitcode) + else: + requestargs = args[1:] + +if len(args) > 0: + seenattributes = set([]) + for res in session.read('/noderange/{0}/attributes/{1}'.format(noderange,showtype)): + if 'error' in res: + print "found error" + sys.stderr.write(res['error'] + '\n') + exitcode = 1 + continue + for node in res['databynode']: + for attr in res['databynode'][node]: + seenattributes.add(attr) + currattr = res['databynode'][node][attr] + if requestargs is None or attrrequested(attr, args[1:], seenattributes): + if 'value' in currattr: + if currattr['value'] is not None: + attrout = '{0}: {1}: {2}'.format( + node, attr, currattr['value']) + else: + attrout = '{0}: {1}:'.format(node, attr) + elif 'isset' in currattr: + if currattr['isset']: + attrout = '{0}: {1}: ********'.format(node, attr) + else: + attrout = '{0}: {1}:'.format(node, attr) + if options.blame: + blamedata = [] + if 'inheritedfrom' in currattr: + blamedata.append('inherited from group {0}'.format( + currattr['inheritedfrom'] + )) + if 'expression' in currattr: + blamedata.append( + 'derived from expression "{0}"'.format( + currattr['expression'])) + if blamedata: + attrout += ' (' + ', '.join(blamedata) + ')' + print attrout + + if not exitcode: + if requestargs: + for attr in args[1:]: + if attr not in seenattributes: + sys.stderr.write('Error: {0} not a valid attribute\n'.format(attr)) + exitcode = 1 +else: + for res in session.read(nodelist): + if 'error' in res: + sys.stderr.write(res['error'] + '\n') + exitcode = 1 + else: + print res['item']['href'].replace('/', '') +sys.exit(exitcode) \ No newline at end of file