diff options
Diffstat (limited to 'src/flufigut.py')
-rwxr-xr-x | src/flufigut.py | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/flufigut.py b/src/flufigut.py new file mode 100755 index 0000000..c55b0ff --- /dev/null +++ b/src/flufigut.py @@ -0,0 +1,119 @@ +#!/usr/bin/python +# +# flufigut +# +# flufigut, the flumotion configuration utility, is a simple tool +# that generates flumotion configuration files using pyhton jinja2 +# template engine and simplejson. flufigut generates planet.xml +# and worker.xml files from configuration templates and an easy to +# understand representation of the flow structure written in json. +# +# +# Copyright (C) 2012 Christian Pointner <equinox@spreadspace.org> +# Michael Gebetsroither <michael@mgeb.org> +# +# This file is part of flufigut. +# +# flufigut is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# any later version. +# +# flufigut is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with flufigut. If not, see <http://www.gnu.org/licenses/>. +# + +import string +import random +import sys +import simplejson as json +from exceptions import * +from jinja2 import Environment, FileSystemLoader + +### helper functions ############################################ +# +def rand_string(size=8, chars=string.ascii_lowercase + string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for x in range(size)) + +### parse json file ############################################# +# +if len(sys.argv) <= 2: + raise SystemExit("No template name and or config file given") + +cf = open(sys.argv[2], 'r') +config = json.load(cf); +cf.close(); + +### initialization ############################################## +# +data = { 'globals' : config['globals'], 'atmosphere' : {}, 'flow' : {} } +machines = {} + +### generate porter for all streamer/machines ################### +# +idx = 0 +for streamer in config['streamer']: + worker = 'streamer%i'%(idx) + port = streamer['config']['port'] + found = False + for machine in config['globals']['machines'].keys(): + if worker in config['globals']['machines'][machine]: + if machine in machines: + if 'porter' in machines[machine]: + if port in machines[machine]['porter']: + print "Porter: machine %s already uses port %i" % (machine, port) + sys.exit(1) + else: + machines[machine]['porter'] = {} + else: + machines[machine] = { 'porter': {} } + + found = True + machines[machine]['porter'][port] = { + 'socket-path': "porter%i-%s"%(idx, rand_string()), + 'username': rand_string(size=12), + 'password': rand_string(size=12), + } + + data['atmosphere']['porter-%s-%i'%(machine, port)] = { + 'type': "porter", + 'desc': "Porter for %s on port %i"%(machine, port), + 'worker': worker, + 'properties': { + 'port': port, + 'socket-path': machines[machine]['porter'][port]['socket-path'], + 'username': machines[machine]['porter'][port]['username'], + 'password': machines[machine]['porter'][port]['password'], + }, + } + if not found: + print "Streamer %i has no machine assigned" % (idx) + sys.exit(1) + idx+=1 + +### generate input components ################################### +# TODO + +### generate encoder components ################################# +# TODO + +### generate muxer components ################################### +# TODO + +### generate streamer components ################################ +# TODO + +### initialize and render templates ############################# +# +env = Environment(loader=FileSystemLoader('../templates/%s/' % (sys.argv[1]))) +template = env.get_template('planet.xml') +planet = template.render(globals=data['globals'], atmosphere=data['atmosphere'], flow=data['flow']) + +sys.stdout.write(planet.encode("utf8")) + +### end ######################################################### |