blob: f93790db7ee7017ecc7d20a1352e4ea8b2d132a7 [file] [log] [blame]
Brian O'Connor0167bd42016-04-29 17:09:10 -07001#!/usr/bin/env python
2#FIXME Add license
3
4import re
Brian O'Connor92ec2132016-05-03 17:30:25 -07005import os
Brian O'Connor0167bd42016-04-29 17:09:10 -07006from zipfile import ZipFile
Brian O'Connor92ec2132016-05-03 17:30:25 -07007from tarfile import TarFile, TarInfo
8from cStringIO import StringIO
9
10VERSION = '1.6.0' #FIXME version, and maybe git commit hash
11BASE = 'onos-%s/' % VERSION
12
13
14written_files = set()
15
16def addFile(tar, dest, file, file_size):
17 if dest not in written_files:
18 info = TarInfo(dest)
19 info.size = file_size
20 tar.addfile(info, fileobj=file)
21 written_files.add(dest)
22
23def addString(tar, dest, string):
24 if dest not in written_files:
25 print dest, string
26 info = TarInfo(dest)
27 info.size = len(string)
28 file = StringIO(string)
29 tar.addfile(info, fileobj=file)
30 file.close()
31 written_files.add(dest)
Brian O'Connor0167bd42016-04-29 17:09:10 -070032
33def stageOnos(output, files=[]):
34 # Note this is not a compressed zip
Brian O'Connor92ec2132016-05-03 17:30:25 -070035 with TarFile(output, 'a') as output:
36 written_files = set(output.getnames())
Brian O'Connor0167bd42016-04-29 17:09:10 -070037 for file in files:
38 if '.zip' in file:
39 with ZipFile(file, 'r') as zip_part:
Brian O'Connor92ec2132016-05-03 17:30:25 -070040 for f in zip_part.infolist():
41 dest = BASE + 'apache-karaf-3.0.5/system/' + f.filename
42 addFile(output, dest, zip_part.open(f), f.file_size)
Brian O'Connor0167bd42016-04-29 17:09:10 -070043 elif '.oar' in file:
44 with ZipFile(file, 'r') as oar:
45 app_xml = oar.open('app.xml').read()
46 app_name = re.search('name="([^"]+)"', app_xml).group(1)
Brian O'Connor92ec2132016-05-03 17:30:25 -070047 dest = BASE + 'apps/%(name)s/%(name)s.oar' % { 'name': app_name}
48 addFile(output, dest, open(file), os.stat(file).st_size)
49 dest = BASE + 'apps/%s/app.xml' % app_name
50 addString(output, dest, app_xml)
51 for f in oar.infolist():
52 filename = f.filename
53 if 'm2' in filename:
54 dest = BASE + 'apache-karaf-3.0.5/system/' + filename[3:]
Brian O'Connor0167bd42016-04-29 17:09:10 -070055 if dest not in written_files:
Brian O'Connor92ec2132016-05-03 17:30:25 -070056 addFile(output, dest, oar.open(f), f.file_size)
Brian O'Connor0167bd42016-04-29 17:09:10 -070057 written_files.add(dest)
58 elif 'features.xml' in file:
Brian O'Connor92ec2132016-05-03 17:30:25 -070059 dest = BASE + 'apache-karaf-3.0.5/system/org/onosproject/onos-features/1.6.0-SNAPSHOT/'
Brian O'Connor0167bd42016-04-29 17:09:10 -070060 dest += 'onos-features-1.6.0-SNAPSHOT-features.xml'
61 with open(file) as f:
Brian O'Connor92ec2132016-05-03 17:30:25 -070062 addFile(output, dest, f, os.stat(file).st_size)
63 # FIXME figure out "active" apps
64 addString(output, BASE + 'apps/org.onosproject.drivers/active', '')
65 addString(output, BASE + 'apps/org.onosproject.openflow-base/active', '')
66 addString(output, BASE + 'apps/org.onosproject.lldp/active', '')
67 addString(output, BASE + 'apps/org.onosproject.host/active', '')
68 addString(output, BASE + 'VERSION', VERSION)
Brian O'Connor0167bd42016-04-29 17:09:10 -070069
70if __name__ == '__main__':
71 import sys
72
73 if len(sys.argv) < 2:
74 print 'USAGE'
75 sys.exit(1)
76
77 output = sys.argv[1]
78 args = sys.argv[2:]
79
Brian O'Connor0167bd42016-04-29 17:09:10 -070080 stageOnos(output, args)