Statistics
| Branch: | Tag: | Revision:

root / snf-image-helper / decode-properties.py @ bc9d337a

History | View | Annotate | Download (2.5 kB)

1 473f4fa5 Nikos Skalkotos
#!/usr/bin/env python
2 473f4fa5 Nikos Skalkotos
3 7e5d635b Nikos Skalkotos
# Copyright (C) 2011 GRNET S.A. 
4 7e5d635b Nikos Skalkotos
#
5 7e5d635b Nikos Skalkotos
# This program is free software; you can redistribute it and/or modify
6 7e5d635b Nikos Skalkotos
# it under the terms of the GNU General Public License as published by
7 7e5d635b Nikos Skalkotos
# the Free Software Foundation; either version 2 of the License, or
8 7e5d635b Nikos Skalkotos
# (at your option) any later version.
9 7e5d635b Nikos Skalkotos
#
10 7e5d635b Nikos Skalkotos
# This program is distributed in the hope that it will be useful, but
11 7e5d635b Nikos Skalkotos
# WITHOUT ANY WARRANTY; without even the implied warranty of
12 7e5d635b Nikos Skalkotos
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 7e5d635b Nikos Skalkotos
# General Public License for more details.
14 7e5d635b Nikos Skalkotos
#
15 7e5d635b Nikos Skalkotos
# You should have received a copy of the GNU General Public License
16 7e5d635b Nikos Skalkotos
# along with this program; if not, write to the Free Software
17 7e5d635b Nikos Skalkotos
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 7e5d635b Nikos Skalkotos
# 02110-1301, USA.
19 7e5d635b Nikos Skalkotos
20 473f4fa5 Nikos Skalkotos
"""Decode a json encoded string with properties
21 473f4fa5 Nikos Skalkotos

22 473f4fa5 Nikos Skalkotos
This program decodes a json encoded properties string and outputs it in a
23 473f4fa5 Nikos Skalkotos
bash sourcable way. The properties are passed to the program through a JSON
24 473f4fa5 Nikos Skalkotos
string either read from a file or from standard input and are outputed to a
25 473f4fa5 Nikos Skalkotos
target file.
26 473f4fa5 Nikos Skalkotos
"""
27 473f4fa5 Nikos Skalkotos
28 473f4fa5 Nikos Skalkotos
import sys
29 473f4fa5 Nikos Skalkotos
import os
30 473f4fa5 Nikos Skalkotos
import subprocess
31 473f4fa5 Nikos Skalkotos
import json
32 473f4fa5 Nikos Skalkotos
from StringIO import StringIO
33 473f4fa5 Nikos Skalkotos
from optparse import OptionParser
34 473f4fa5 Nikos Skalkotos
35 473f4fa5 Nikos Skalkotos
def parse_arguments(input_args):
36 473f4fa5 Nikos Skalkotos
    usage = "Usage: %prog [options] <output_file>"
37 473f4fa5 Nikos Skalkotos
    parser = OptionParser(usage=usage)
38 473f4fa5 Nikos Skalkotos
    parser.add_option("-i", "--input",
39 473f4fa5 Nikos Skalkotos
                        action="store",type='string', dest="input_file",
40 473f4fa5 Nikos Skalkotos
                        help="get input from FILE instead of stdin",
41 473f4fa5 Nikos Skalkotos
                        metavar="FILE")
42 473f4fa5 Nikos Skalkotos
43 473f4fa5 Nikos Skalkotos
    opts, args = parser.parse_args(input_args)
44 473f4fa5 Nikos Skalkotos
45 473f4fa5 Nikos Skalkotos
    if len(args) != 1:
46 473f4fa5 Nikos Skalkotos
        parser.error('output file is missing')
47 473f4fa5 Nikos Skalkotos
    output_file = args[0]
48 473f4fa5 Nikos Skalkotos
   
49 473f4fa5 Nikos Skalkotos
    if opts.input_file is not None:
50 473f4fa5 Nikos Skalkotos
        if not os.path.isfile(opts.input_file):
51 473f4fa5 Nikos Skalkotos
            parser.error('input file does not exist')
52 473f4fa5 Nikos Skalkotos
 
53 473f4fa5 Nikos Skalkotos
    return (opts.input_file, output_file)
54 473f4fa5 Nikos Skalkotos
55 473f4fa5 Nikos Skalkotos
56 473f4fa5 Nikos Skalkotos
def main():
57 473f4fa5 Nikos Skalkotos
    (input_file, output_file) = parse_arguments(sys.argv[1:])
58 473f4fa5 Nikos Skalkotos
59 473f4fa5 Nikos Skalkotos
    infh = sys.stdin if input_file is None else open(input_file, 'r')
60 473f4fa5 Nikos Skalkotos
    outfh = open(output_file, 'w')
61 473f4fa5 Nikos Skalkotos
62 473f4fa5 Nikos Skalkotos
    properties = json.load(infh)
63 473f4fa5 Nikos Skalkotos
    for key, value in properties.items():
64 473f4fa5 Nikos Skalkotos
        os.environ['SNF_IMAGE_PROPERTY_' + key] = value
65 473f4fa5 Nikos Skalkotos
66 38552c68 Nikos Skalkotos
    p = subprocess.Popen(['bash', '-c', 'set'], stdout=subprocess.PIPE)
67 38552c68 Nikos Skalkotos
    output = StringIO(p.communicate()[0]);
68 473f4fa5 Nikos Skalkotos
    for line in iter(output):
69 473f4fa5 Nikos Skalkotos
        if line.startswith('SNF_IMAGE_PROPERTY_'):
70 38552c68 Nikos Skalkotos
            outfh.write('export ' + line)
71 473f4fa5 Nikos Skalkotos
72 473f4fa5 Nikos Skalkotos
    infh.close()
73 473f4fa5 Nikos Skalkotos
    outfh.close()
74 473f4fa5 Nikos Skalkotos
    return 0
75 473f4fa5 Nikos Skalkotos
76 473f4fa5 Nikos Skalkotos
77 473f4fa5 Nikos Skalkotos
if __name__ == "__main__":
78 473f4fa5 Nikos Skalkotos
    sys.exit(main())
79 473f4fa5 Nikos Skalkotos
80 473f4fa5 Nikos Skalkotos
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :