diff options
Diffstat (limited to 'framework/src/onos/tools/package/karaf-assembly')
-rwxr-xr-x | framework/src/onos/tools/package/karaf-assembly/onos-assembly.py | 80 | ||||
-rw-r--r-- | framework/src/onos/tools/package/karaf-assembly/pom.xml | 84 |
2 files changed, 164 insertions, 0 deletions
diff --git a/framework/src/onos/tools/package/karaf-assembly/onos-assembly.py b/framework/src/onos/tools/package/karaf-assembly/onos-assembly.py new file mode 100755 index 00000000..1e394bf6 --- /dev/null +++ b/framework/src/onos/tools/package/karaf-assembly/onos-assembly.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +''' + Builds synthetic feature file that includes all core, provider, and application + features, so that we can pre-stage all bundles required to run ONOS off-line. +''' + +import os +import xml.etree.ElementTree as ET + +FEATURE_TAG = '{http://karaf.apache.org/xmlns/features/v1.2.0}feature' +STAGED_REPOS = 'target/staged-repos.xml' + +if 'ONOS_ROOT' in os.environ: + ONOS_ROOT = os.environ['ONOS_ROOT'] +else: + # fallback to working directory if ONOS_ROOT is not set + ONOS_ROOT = os.getcwd() + +def findFeatureFiles(path=ONOS_ROOT): + #only descend into target directories that have pom + for root, dirs, files in os.walk(path): + if 'pom.xml' not in files: + if 'target' in dirs: + #pruning target dir with no pom.xml + dirs.remove('target') + if '/target' in root: + if '/classes/' in root: + #filter out features.xml for maven-plugin + continue + for f in files: + if f.endswith('features.xml'): + yield os.path.join(root, f) + +def featuresFromFile(file): + features = [] + tree = ET.parse(file) + root = tree.getroot() + for feature in root.findall(FEATURE_TAG): + features.append(feature.attrib['name']) + return features + +if __name__ == '__main__': + outputTree = ET.Element('features') + uberFeature = ET.Element('feature', attrib={'name' : 'onos-uber-synthetic'}) + for file in findFeatureFiles(): + features = featuresFromFile(file) + if len(features) > 0: + ET.SubElement(outputTree, 'repository').text = 'file:%s' % file + for feature in features: + ET.SubElement(uberFeature, 'feature').text = feature + outputTree.append(uberFeature) + + outputFile = os.path.join(os.path.dirname(os.path.realpath(__file__)), STAGED_REPOS) + outputDir = os.path.dirname(outputFile) + if not os.path.exists(outputDir): + os.mkdir(outputDir) + ET.ElementTree(outputTree).write(outputFile) + + import sys + if '-d' in sys.argv: + # -------- TODO for debug only -------- + def indent(elem, level=0): + #function borrowed from: http://effbot.org/zone/element-lib.htm#prettyprint + i = "\n" + level*" " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + if not elem.tail or not elem.tail.strip(): + elem.tail = i + for elem in elem: + indent(elem, level+1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + + print 'Writing to file:', outputFile + indent(outputTree) + ET.dump(outputTree) diff --git a/framework/src/onos/tools/package/karaf-assembly/pom.xml b/framework/src/onos/tools/package/karaf-assembly/pom.xml new file mode 100644 index 00000000..4b47c0d1 --- /dev/null +++ b/framework/src/onos/tools/package/karaf-assembly/pom.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + ~ Copyright 2014-2015 Open Networking Laboratory + ~ + ~ 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. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.onosproject</groupId> + <artifactId>onos-base</artifactId> + <version>1</version> + </parent> + + <groupId>org.onosproject</groupId> + <artifactId>onos-assembly</artifactId> + <version>1.0</version> + <packaging>pom</packaging> + + <description>ONOS Apache Karaf assembly definitions</description> + + <build> + <plugins> + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <version>1.8</version> + <executions> + <execution> + <phase>generate-sources</phase> + <configuration> + <target> + <exec executable="python"> + <arg value="${basedir}/onos-assembly.py"/> + </exec> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.karaf.tooling</groupId> + <artifactId>karaf-maven-plugin</artifactId> + <version>3.0.3</version> + + <executions> + <execution> + <id>features-add-to-repo</id> + <phase>generate-resources</phase> + <goals> + <goal>features-add-to-repository</goal> + </goals> + <configuration> + <descriptors> + <descriptor>file:${basedir}/target/staged-repos.xml</descriptor> + </descriptors> + <features> + <feature>onos-uber-synthetic</feature> + </features> + <repository>target/repo</repository> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> |