summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/package/karaf-assembly
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/tools/package/karaf-assembly')
-rwxr-xr-xframework/src/onos/tools/package/karaf-assembly/onos-assembly.py80
-rw-r--r--framework/src/onos/tools/package/karaf-assembly/pom.xml84
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>