Statistics
| Branch: | Tag: | Revision:

root / snf-image-helper / decode-properties.py @ 473f4fa5

History | View | Annotate | Download (1.7 kB)

1
#!/usr/bin/env python
2

    
3
"""Decode a json encoded string with properties
4

5
This program decodes a json encoded properties string and outputs it in a
6
bash sourcable way. The properties are passed to the program through a JSON
7
string either read from a file or from standard input and are outputed to a
8
target file.
9
"""
10

    
11
import sys
12
import os
13
import subprocess
14
import json
15
from StringIO import StringIO
16
from optparse import OptionParser
17

    
18
def parse_arguments(input_args):
19
    usage = "Usage: %prog [options] <output_file>"
20
    parser = OptionParser(usage=usage)
21
    parser.add_option("-i", "--input",
22
                        action="store",type='string', dest="input_file",
23
                        help="get input from FILE instead of stdin",
24
                        metavar="FILE")
25

    
26
    opts, args = parser.parse_args(input_args)
27

    
28
    if len(args) != 1:
29
        parser.error('output file is missing')
30
    output_file = args[0]
31
   
32
    if opts.input_file is not None:
33
        if not os.path.isfile(opts.input_file):
34
            parser.error('input file does not exist')
35
 
36
    return (opts.input_file, output_file)
37

    
38

    
39
def main():
40
    (input_file, output_file) = parse_arguments(sys.argv[1:])
41

    
42
    infh = sys.stdin if input_file is None else open(input_file, 'r')
43
    outfh = open(output_file, 'w')
44

    
45
    properties = json.load(infh)
46
    for key, value in properties.items():
47
        os.environ['SNF_IMAGE_PROPERTY_' + key] = value
48

    
49
    output = StringIO(subprocess.check_output(['bash', '-c', 'set']))
50
    for line in iter(output):
51
        if line.startswith('SNF_IMAGE_PROPERTY_'):
52
            outfh.write(line)
53

    
54
    infh.close()
55
    outfh.close()
56
    return 0
57

    
58

    
59
if __name__ == "__main__":
60
    sys.exit(main())
61

    
62
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :