Created
June 6, 2011 23:59
-
-
Save gschueler/1011392 to your computer and use it in GitHub Desktop.
merge multiple rundeck resource provider url contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commons-beanutils-1.8.0.jar | |
dom4j-1.6.1.jar | |
jaxen-1.1.jar | |
log4j-1.2.15.jar | |
rundeck-core-1.3.0.jar | |
snakeyaml-1.7.jar |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.dtolabs.rundeck.core.common.*; | |
import java.util.*; | |
import java.net.URL; | |
def urls=['file:test/test.xml','file:test/test2.yaml'] | |
//precedence based on order | |
def mergeprops=['tags'] | |
def mergeattributes=true | |
def mnodes /*master nodes def*/ | |
urls.each{url-> | |
//download each url to temp file | |
try{ | |
def f=File.createTempFile("resource","temp") | |
f.deleteOnExit() | |
def nurl = new URL(url); | |
def text=nurl.text | |
def bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f))) | |
bw.write(text) | |
bw.flush() | |
bw.close() | |
Nodes tnodes = Nodes.create(f,url.endsWith(".xml")?Nodes.Format.resourcexml:Nodes.Format.resourceyaml) | |
if(null==mnodes){ | |
mnodes=tnodes | |
}else{ | |
//merge nodes into mnodes | |
tnodes.listNodes().each{INodeEntry e-> | |
System.err.println " node: ${e.nodename}" | |
if(!mnodes.hasNode(e.nodename)){ | |
mnodes.putNode(e) | |
System.err.println "Add new node: ${e.nodename}" | |
}else{ | |
INodeEntry orig=mnodes.getNode(e.nodename) | |
//merge tags | |
HashSet tags=new HashSet() | |
if(orig.tags){ | |
tags.addAll(orig.tags) | |
} | |
if(e.tags){ | |
tags.addAll(e.tags) | |
} | |
HashMap attrs = new HashMap() | |
if(orig.attributes){ | |
attrs.putAll(orig.attributes) | |
} | |
if(mergeattributes){ | |
attrs.putAll(e.attributes) | |
} | |
// create updated master node | |
NodeEntryImpl node = new NodeEntryImpl() | |
['nodename','hostname','description','osFamily','osVersion','osArch','osName','username'].each{ nprop-> | |
node[nprop]=orig[nprop] | |
} | |
node.tags=tags | |
node.attributes=attrs | |
mnodes.putNode(node) | |
System.err.println "merge node: ${e.nodename}: ${e}" | |
} | |
} | |
} | |
}catch(Exception e){ | |
System.err.println "Error loading from url ${url}: ${e}" | |
} | |
} | |
System.out.println "Loaded ${urls.size()} URLs: " | |
def gen=new NodesYamlGenerator(System.out) | |
gen.addNodes(mnodes.listNodes()) | |
gen.generate() | |
//System.out.println mnodes.toString() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment