root / snf-image-helper / decode-properties.py @ b873aac3
History | View | Annotate | Download (1.8 kB)
1 | 473f4fa5 | Nikos Skalkotos | #!/usr/bin/env python
|
---|---|---|---|
2 | 473f4fa5 | Nikos Skalkotos | |
3 | 473f4fa5 | Nikos Skalkotos | """Decode a json encoded string with properties
|
4 | 473f4fa5 | Nikos Skalkotos |
|
5 | 473f4fa5 | Nikos Skalkotos | This program decodes a json encoded properties string and outputs it in a
|
6 | 473f4fa5 | Nikos Skalkotos | bash sourcable way. The properties are passed to the program through a JSON
|
7 | 473f4fa5 | Nikos Skalkotos | string either read from a file or from standard input and are outputed to a
|
8 | 473f4fa5 | Nikos Skalkotos | target file.
|
9 | 473f4fa5 | Nikos Skalkotos | """
|
10 | 473f4fa5 | Nikos Skalkotos | |
11 | 473f4fa5 | Nikos Skalkotos | import sys |
12 | 473f4fa5 | Nikos Skalkotos | import os |
13 | 473f4fa5 | Nikos Skalkotos | import subprocess |
14 | 473f4fa5 | Nikos Skalkotos | import json |
15 | 473f4fa5 | Nikos Skalkotos | from StringIO import StringIO |
16 | 473f4fa5 | Nikos Skalkotos | from optparse import OptionParser |
17 | 473f4fa5 | Nikos Skalkotos | |
18 | 473f4fa5 | Nikos Skalkotos | def parse_arguments(input_args): |
19 | 473f4fa5 | Nikos Skalkotos | usage = "Usage: %prog [options] <output_file>"
|
20 | 473f4fa5 | Nikos Skalkotos | parser = OptionParser(usage=usage) |
21 | 473f4fa5 | Nikos Skalkotos | parser.add_option("-i", "--input", |
22 | 473f4fa5 | Nikos Skalkotos | action="store",type='string', dest="input_file", |
23 | 473f4fa5 | Nikos Skalkotos | help="get input from FILE instead of stdin",
|
24 | 473f4fa5 | Nikos Skalkotos | metavar="FILE")
|
25 | 473f4fa5 | Nikos Skalkotos | |
26 | 473f4fa5 | Nikos Skalkotos | opts, args = parser.parse_args(input_args) |
27 | 473f4fa5 | Nikos Skalkotos | |
28 | 473f4fa5 | Nikos Skalkotos | if len(args) != 1: |
29 | 473f4fa5 | Nikos Skalkotos | parser.error('output file is missing')
|
30 | 473f4fa5 | Nikos Skalkotos | output_file = args[0]
|
31 | 473f4fa5 | Nikos Skalkotos | |
32 | 473f4fa5 | Nikos Skalkotos | if opts.input_file is not None: |
33 | 473f4fa5 | Nikos Skalkotos | if not os.path.isfile(opts.input_file): |
34 | 473f4fa5 | Nikos Skalkotos | parser.error('input file does not exist')
|
35 | 473f4fa5 | Nikos Skalkotos | |
36 | 473f4fa5 | Nikos Skalkotos | return (opts.input_file, output_file)
|
37 | 473f4fa5 | Nikos Skalkotos | |
38 | 473f4fa5 | Nikos Skalkotos | |
39 | 473f4fa5 | Nikos Skalkotos | def main(): |
40 | 473f4fa5 | Nikos Skalkotos | (input_file, output_file) = parse_arguments(sys.argv[1:])
|
41 | 473f4fa5 | Nikos Skalkotos | |
42 | 473f4fa5 | Nikos Skalkotos | infh = sys.stdin if input_file is None else open(input_file, 'r') |
43 | 473f4fa5 | Nikos Skalkotos | outfh = open(output_file, 'w') |
44 | 473f4fa5 | Nikos Skalkotos | |
45 | 473f4fa5 | Nikos Skalkotos | properties = json.load(infh) |
46 | 473f4fa5 | Nikos Skalkotos | for key, value in properties.items(): |
47 | 473f4fa5 | Nikos Skalkotos | os.environ['SNF_IMAGE_PROPERTY_' + key] = value
|
48 | 473f4fa5 | Nikos Skalkotos | |
49 | 38552c68 | Nikos Skalkotos | p = subprocess.Popen(['bash', '-c', 'set'], stdout=subprocess.PIPE) |
50 | 38552c68 | Nikos Skalkotos | output = StringIO(p.communicate()[0]);
|
51 | 473f4fa5 | Nikos Skalkotos | for line in iter(output): |
52 | 473f4fa5 | Nikos Skalkotos | if line.startswith('SNF_IMAGE_PROPERTY_'): |
53 | 38552c68 | Nikos Skalkotos | outfh.write('export ' + line)
|
54 | 473f4fa5 | Nikos Skalkotos | |
55 | 473f4fa5 | Nikos Skalkotos | infh.close() |
56 | 473f4fa5 | Nikos Skalkotos | outfh.close() |
57 | 473f4fa5 | Nikos Skalkotos | return 0 |
58 | 473f4fa5 | Nikos Skalkotos | |
59 | 473f4fa5 | Nikos Skalkotos | |
60 | 473f4fa5 | Nikos Skalkotos | if __name__ == "__main__": |
61 | 473f4fa5 | Nikos Skalkotos | sys.exit(main()) |
62 | 473f4fa5 | Nikos Skalkotos | |
63 | 473f4fa5 | Nikos Skalkotos | # vim: set sta sts=4 shiftwidth=4 sw=4 et ai : |