summaryrefslogtreecommitdiff
path: root/src/flufigut.py
diff options
context:
space:
mode:
author(no author) <(no author)@88d0365b-309c-4eec-8061-d8e0c04ad69e>2012-09-27 17:50:52 +0000
committer(no author) <(no author)@88d0365b-309c-4eec-8061-d8e0c04ad69e>2012-09-27 17:50:52 +0000
commit66f9e44e868a7ec381e110d0b3b2797d86f4dc17 (patch)
treefd76b6d32d69783c18ce0ccb576fb717b6147a29 /src/flufigut.py
parentadded seperator comments (diff)
renameing of flufig to flufigut finished
git-svn-id: https://svn.spreadspace.org/flufigut/trunk@14 88d0365b-309c-4eec-8061-d8e0c04ad69e
Diffstat (limited to 'src/flufigut.py')
-rwxr-xr-xsrc/flufigut.py119
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 #########################################################