Statistics
| Branch: | Tag: | Revision:

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 :