Brian O'Connor

Adding onos_stage.py and onos_feature.py for feature generation and onos-package

Change-Id: I67cb1ec9c09a194c41707ff55121dcdc54e3e4ea
...@@ -19,6 +19,19 @@ python_binary( ...@@ -19,6 +19,19 @@ python_binary(
19 visibility = ['PUBLIC'], 19 visibility = ['PUBLIC'],
20 ) 20 )
21 21
22 +python_binary(
23 + name = 'onos-stage',
24 + main = 'onos_stage.py',
25 + deps = [],
26 + visibility = ['PUBLIC'],
27 +)
28 +
29 +python_binary(
30 + name = 'onos-feature',
31 + main = 'onos_feature.py',
32 + deps = [],
33 + visibility = ['PUBLIC'],
34 +)
22 35
23 python_binary( 36 python_binary(
24 name = 'pack_war', 37 name = 'pack_war',
......
1 +#!/usr/bin/env python
2 +#FIXME Add license
3 +
4 +from zipfile import ZipFile
5 +
6 +def generateOar(output, files=[]):
7 + # Note this is not a compressed zip
8 + with ZipFile(output, 'w') as zip:
9 + for file, mvnCoords in files:
10 + filename = file.split('/')[-1]
11 + if mvnCoords == 'NONE':
12 + dest = filename
13 + else:
14 + parts = mvnCoords.split(':')
15 + if len(parts) > 3:
16 + parts.insert(2, parts.pop()) # move version to the 3rd position
17 + groupId, artifactId, version = parts[0:3]
18 + groupId = groupId.replace('.', '/')
19 + extension = filename.split('.')[-1]
20 + if extension == 'jar':
21 + filename = '%s-%s.jar' % ( artifactId, version )
22 + elif 'features.xml' in filename:
23 + filename = '%s-%s-features.xml' % ( artifactId, version )
24 + dest = '%s/%s/%s/%s' % ( groupId, artifactId, version, filename )
25 + zip.write(file, dest)
26 +
27 +if __name__ == '__main__':
28 + import sys
29 +
30 + if len(sys.argv) < 2:
31 + print 'USAGE'
32 + sys.exit(1)
33 +
34 + output = sys.argv[1]
35 + args = sys.argv[2:]
36 +
37 + if len(args) % 2 != 0:
38 + print 'There must be an even number of args: file mvn_coords'
39 + sys.exit(2)
40 +
41 + files = zip(*[iter(args)]*2)
42 + generateOar(output, files)
1 +#!/usr/bin/env python
2 +#FIXME Add license
3 +
4 +import re
5 +from zipfile import ZipFile
6 +
7 +def stageOnos(output, files=[]):
8 + # Note this is not a compressed zip
9 + with ZipFile(output, 'a') as output:
10 + written_files = set(output.namelist())
11 + for file in files:
12 + if '.zip' in file:
13 + with ZipFile(file, 'r') as zip_part:
14 + for f in zip_part.namelist():
15 + dest = 'apache-karaf-3.0.5/system/' + f
16 + if dest not in written_files:
17 + output.writestr(dest, zip_part.open(f).read())
18 + written_files.add(dest)
19 + elif '.oar' in file:
20 + with ZipFile(file, 'r') as oar:
21 + app_xml = oar.open('app.xml').read()
22 + app_name = re.search('name="([^"]+)"', app_xml).group(1)
23 + dest = 'apps/%(name)s/%(name)s.oar' % { 'name': app_name}
24 + output.write(file, dest)
25 + dest = 'apps/%s/app.xml' % app_name
26 + output.writestr(dest, app_xml)
27 + for f in oar.namelist():
28 + if 'm2' in f:
29 + dest = 'apache-karaf-3.0.5/system/' + f[3:]
30 + if dest not in written_files:
31 + output.writestr(dest, oar.open(f).read())
32 + written_files.add(dest)
33 + elif 'features.xml' in file:
34 + dest = 'apache-karaf-3.0.5/system/org/onosproject/onos-features/1.6.0-SNAPSHOT/'
35 + dest += 'onos-features-1.6.0-SNAPSHOT-features.xml'
36 + with open(file) as f:
37 + output.writestr(dest, f.read())
38 + # filename = file.split('/')[-1]
39 + # if mvnCoords == 'APP':
40 + # dest = filename
41 + # else:
42 + # groupId, artifactId, version = mvnCoords.split(':')
43 + # groupId = groupId.replace('.', '/')
44 + # extension = filename.split('.')[-1]
45 + # if extension == 'jar':
46 + # filename = '%s-%s.jar' % ( artifactId, version )
47 + # elif 'features.xml' in filename:
48 + # filename = '%s-%s-features.xml' % ( artifactId, version )
49 + # dest = 'system/%s/%s/%s/%s' % ( groupId, artifactId, version, filename )
50 + # zip.write(file, dest)
51 + output.writestr('apps/org.onosproject.drivers/active', '')
52 + output.writestr('apps/org.onosproject.openflow-base/active', '')
53 + output.writestr('apps/org.onosproject.lldp/active', '')
54 + output.writestr('apps/org.onosproject.host/active', '')
55 +
56 +if __name__ == '__main__':
57 + import sys
58 +
59 + if len(sys.argv) < 2:
60 + print 'USAGE'
61 + sys.exit(1)
62 +
63 + output = sys.argv[1]
64 + args = sys.argv[2:]
65 +
66 + # if len(args) % 2 != 0:
67 + # print 'There must be an even number of args: file mvn_coords'
68 + # sys.exit(2)
69 +
70 + #files = zip(*[iter(args)]*2)
71 + stageOnos(output, args)