From a005e524ee0d735b51fd386de5f60be08b7c966b Mon Sep 17 00:00:00 2001 From: Rick Bradshow Date: Wed, 2 Mar 2005 20:16:26 +0000 Subject: (Logical change 1.209) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@889 ce84e21b-d406-0410-9b95-82705330c041 --- tools/nodeattr.py | 73 +++++++++++ tools/testing.xml | 382 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 455 insertions(+) (limited to 'tools') diff --git a/tools/nodeattr.py b/tools/nodeattr.py index e69de29bb..db769fdd8 100644 --- a/tools/nodeattr.py +++ b/tools/nodeattr.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +from elementtree.ElementTree import XML, tostring +from pdis.xpath import compile as xcompile +from sys import argv + +outputmode = argv[1] +attr = argv[2] + +#this will need to be extrapolated from the bcfg2.conf file +#but for testing it can stay as is + +xmlfile="testing.xml" +file=open(xmlfile, 'r').readlines() +myxmlfile="" +for line in file: + myxmlfile+=line +metadata=XML(myxmlfile) +nodelist=[] + +(level,searchterm)=attr.split("=") + +if level.lower() == 'image': + xexpression="/*/Client[@image='%s']"%searchterm + path = xcompile(xexpression) + nodelist += [ element.attrib['name'] for element in path.evaluate(metadata) ] +else: + profilelist=[] + if level.lower() == "profile": + profilelist.append(searchterm) + else: + classlist=[] + xexpression="/*/Profile" + path=xcompile(xexpression) + for profile in path.evaluate(metadata): + if level.lower() == 'class': + xexpression="/*/Class[@name='%s']"%searchterm + path=xcompile(xexpression) + if path.evaluate(profile) and profile.attrib['name'] not in profilelist: + profilelist.append(profile.attrib['name']) + else: + xexpression="/*/Class" + path=xcompile(xexpression) + for profclass in path.evaluate(profile): + xepression="/*/Class[@name='%s']"%profclass.attrib['name'] + path = xcompile(xexpression) + for myclass in path.evaluate(metadata): + xexpression="/*/Bundle[@name='%s']"%searchterm + path=xcompile(xexpression) + if path.evaluate(myclass) and myclass.attrib['name'] not in classlist: + classlist.append(myclass.attrib['name']) + xexpression="/*/Profile" + path=xcompile(xexpression) + for profile in path.evaluate(metadata): + for myclass in classlist: + xexpression="/*/Class[@name='%s']"%myclass + path=xcompile(xexpression) + if path.evaluate(profile) and profile.attrib['name'] not in profilelist: + profilelist.append(profile.attrib['name']) + + for profile in profilelist: + xexpression="/*/Client[@profile='%s']"%profile + path = xcompile(xexpression) + nodelist += [ element.attrib['name'] for element in path.evaluate(metadata) ] + +if outputmode == '-c': + print ",".join(nodelist) +if outputmode == '-n': + for node in nodelist: + print node +if outputmode == '-s': + print "not yet implemented" + diff --git a/tools/testing.xml b/tools/testing.xml index e69de29bb..31734fba7 100644 --- a/tools/testing.xml +++ b/tools/testing.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3-1-g7c22