summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/examples/elevate2018.yml2
-rwxr-xr-xsrc/flufigut.py26
-rw-r--r--templates/default/flumotion/aac-encode.xml.j2 (renamed from templates/default/flumotion/aac-encode.xml)0
-rw-r--r--templates/default/flumotion/audio-resample.xml.j2 (renamed from templates/default/flumotion/audio-resample.xml)0
-rw-r--r--templates/default/flumotion/audiotest.xml.j2 (renamed from templates/default/flumotion/audiotest.xml)0
-rw-r--r--templates/default/flumotion/decklink.xml.j2 (renamed from templates/default/flumotion/decklink.xml)0
-rw-r--r--templates/default/flumotion/flv-mux.xml.j2 (renamed from templates/default/flumotion/flv-mux.xml)0
-rw-r--r--templates/default/flumotion/h264-encode.xml.j2 (renamed from templates/default/flumotion/h264-encode.xml)0
-rw-r--r--templates/default/flumotion/http-stream.xml.j2 (renamed from templates/default/flumotion/http-stream.xml)0
-rw-r--r--templates/default/flumotion/mjpeg-encode.xml.j2 (renamed from templates/default/flumotion/mjpeg-encode.xml)0
-rw-r--r--templates/default/flumotion/mkv-mux.xml.j2 (renamed from templates/default/flumotion/mkv-mux.xml)0
-rw-r--r--templates/default/flumotion/mp3-encode.xml.j2 (renamed from templates/default/flumotion/mp3-encode.xml)0
-rw-r--r--templates/default/flumotion/mp3-mux.xml.j2 (renamed from templates/default/flumotion/mp3-mux.xml)0
-rw-r--r--templates/default/flumotion/mpeg2-encode.xml.j2 (renamed from templates/default/flumotion/mpeg2-encode.xml)0
-rw-r--r--templates/default/flumotion/mpegts-mux.xml.j2 (renamed from templates/default/flumotion/mpegts-mux.xml)0
-rw-r--r--templates/default/flumotion/ogg-mux.xml.j2 (renamed from templates/default/flumotion/ogg-mux.xml)0
-rw-r--r--templates/default/flumotion/opus-encode.xml.j2 (renamed from templates/default/flumotion/opus-encode.xml)0
-rw-r--r--templates/default/flumotion/planet.xml.j2 (renamed from templates/default/flumotion/planet.xml)16
-rw-r--r--templates/default/flumotion/porter.xml.j2 (renamed from templates/default/flumotion/porter.xml)0
-rw-r--r--templates/default/flumotion/raw-encode.xml.j2 (renamed from templates/default/flumotion/raw-encode.xml)0
-rw-r--r--templates/default/flumotion/recorder.xml.j2 (renamed from templates/default/flumotion/recorder.xml)0
-rw-r--r--templates/default/flumotion/repeater.xml.j2 (renamed from templates/default/flumotion/repeater.xml)0
-rw-r--r--templates/default/flumotion/soundcard.xml.j2 (renamed from templates/default/flumotion/soundcard.xml)0
-rw-r--r--templates/default/flumotion/video-resize.xml.j2 (renamed from templates/default/flumotion/video-resize.xml)0
-rw-r--r--templates/default/flumotion/videotest.xml.j2 (renamed from templates/default/flumotion/videotest.xml)0
-rw-r--r--templates/default/flumotion/vorbis-encode.xml.j2 (renamed from templates/default/flumotion/vorbis-encode.xml)0
-rw-r--r--templates/default/flumotion/vp8-encode.xml.j2 (renamed from templates/default/flumotion/vp8-encode.xml)1
-rw-r--r--templates/default/flumotion/webm-mux.xml.j2 (renamed from templates/default/flumotion/webm-mux.xml)0
-rw-r--r--templates/default/flumotion/worker.xml.j2 (renamed from templates/default/flumotion/worker.xml)0
-rw-r--r--templates/default/kubernetes/flumotion-manager-cm.yml.j223
-rw-r--r--templates/default/kubernetes/flumotion-manager-deploy.yml.j243
-rw-r--r--templates/default/kubernetes/flumotion-manager-svc.yml.j220
-rw-r--r--templates/default/kubernetes/flumotion-worker-deploy.yml.j261
33 files changed, 176 insertions, 16 deletions
diff --git a/src/examples/elevate2018.yml b/src/examples/elevate2018.yml
index 3cec69f..5e605f0 100644
--- a/src/examples/elevate2018.yml
+++ b/src/examples/elevate2018.yml
@@ -5,7 +5,7 @@ globals:
description: "Live from Elevate Festival 2018"
manager:
machine: dione
- host: 109.73.158.69
+ host: 172.18.200.1
port: 8642
transport: tcp
admin:
diff --git a/src/flufigut.py b/src/flufigut.py
index 31f4ff2..9c95c97 100755
--- a/src/flufigut.py
+++ b/src/flufigut.py
@@ -518,7 +518,7 @@ class Planet:
def toXML(self, template_dir, output_file):
loader = jinja2.FileSystemLoader(os.path.join(template_dir, self._desc.globals['templates'], 'flumotion'))
env = jinja2.Environment(loader=loader, line_statement_prefix='%%')
- template = env.get_template('planet.xml')
+ template = env.get_template('planet.xml.j2')
planet_xml = template.render(globals=self._desc.globals, atmosphere=self.atmosphere, flow=self.flow)
with open(output_file, 'wb') as f:
@@ -551,15 +551,30 @@ class K8sDeployment:
def __delete_namespace(self, v1):
try:
opts = kubernetes.client.V1DeleteOptions()
- v1.delete_namespace(self._namespace, opts)
+ v1.delete_namespace(self._namespace, opts, grace_period_seconds=0)
except kubernetes.client.rest.ApiException as e:
if e.status == 404:
pass
- def deploy(self):
+ def __gen_object(self, tmpl_env, template_file):
+ tmpl = tmpl_env.get_template(template_file + '.j2')
+ object_yaml = tmpl.render(namespace=self._namespace, desc=self._desc, planet=self._planet)
+ return yaml.load(object_yaml)
+
+ def deploy(self, template_dir):
v1 = kubernetes.client.CoreV1Api()
+ appsV1 = kubernetes.client.AppsV1Api()
self.__create_namespace(v1)
- pass
+
+ loader = jinja2.FileSystemLoader(os.path.join(template_dir, self._desc.globals['templates'], 'kubernetes'))
+ tmpl_env = jinja2.Environment(loader=loader, line_statement_prefix='%%')
+
+ v1.create_namespaced_service(self._namespace, self.__gen_object(tmpl_env, 'flumotion-manager-svc.yml'))
+ # TODO: add planet.xml from self._planet
+ v1.create_namespaced_config_map(self._namespace, self.__gen_object(tmpl_env, 'flumotion-manager-cm.yml'))
+ appsV1.create_namespaced_deployment(self._namespace, self.__gen_object(tmpl_env, 'flumotion-manager-deploy.yml'))
+
+ # TODO: add workers
def wipe(self):
v1 = kubernetes.client.CoreV1Api()
@@ -628,9 +643,8 @@ if __name__ == '__main__':
# print("****************************************************")
k8s = K8sDeployment(d, p)
- k8s.deploy()
- time.sleep(5)
k8s.wipe()
+ k8s.deploy('../templates')
except Exception as e:
print("ERROR: while running app: %s" % e)
diff --git a/templates/default/flumotion/aac-encode.xml b/templates/default/flumotion/aac-encode.xml.j2
index 950f144..950f144 100644
--- a/templates/default/flumotion/aac-encode.xml
+++ b/templates/default/flumotion/aac-encode.xml.j2
diff --git a/templates/default/flumotion/audio-resample.xml b/templates/default/flumotion/audio-resample.xml.j2
index 7182b01..7182b01 100644
--- a/templates/default/flumotion/audio-resample.xml
+++ b/templates/default/flumotion/audio-resample.xml.j2
diff --git a/templates/default/flumotion/audiotest.xml b/templates/default/flumotion/audiotest.xml.j2
index 9e0f208..9e0f208 100644
--- a/templates/default/flumotion/audiotest.xml
+++ b/templates/default/flumotion/audiotest.xml.j2
diff --git a/templates/default/flumotion/decklink.xml b/templates/default/flumotion/decklink.xml.j2
index cc82727..cc82727 100644
--- a/templates/default/flumotion/decklink.xml
+++ b/templates/default/flumotion/decklink.xml.j2
diff --git a/templates/default/flumotion/flv-mux.xml b/templates/default/flumotion/flv-mux.xml.j2
index be77ddb..be77ddb 100644
--- a/templates/default/flumotion/flv-mux.xml
+++ b/templates/default/flumotion/flv-mux.xml.j2
diff --git a/templates/default/flumotion/h264-encode.xml b/templates/default/flumotion/h264-encode.xml.j2
index a3c6edc..a3c6edc 100644
--- a/templates/default/flumotion/h264-encode.xml
+++ b/templates/default/flumotion/h264-encode.xml.j2
diff --git a/templates/default/flumotion/http-stream.xml b/templates/default/flumotion/http-stream.xml.j2
index d0cce33..d0cce33 100644
--- a/templates/default/flumotion/http-stream.xml
+++ b/templates/default/flumotion/http-stream.xml.j2
diff --git a/templates/default/flumotion/mjpeg-encode.xml b/templates/default/flumotion/mjpeg-encode.xml.j2
index da8947e..da8947e 100644
--- a/templates/default/flumotion/mjpeg-encode.xml
+++ b/templates/default/flumotion/mjpeg-encode.xml.j2
diff --git a/templates/default/flumotion/mkv-mux.xml b/templates/default/flumotion/mkv-mux.xml.j2
index 0be8da0..0be8da0 100644
--- a/templates/default/flumotion/mkv-mux.xml
+++ b/templates/default/flumotion/mkv-mux.xml.j2
diff --git a/templates/default/flumotion/mp3-encode.xml b/templates/default/flumotion/mp3-encode.xml.j2
index 10255df..10255df 100644
--- a/templates/default/flumotion/mp3-encode.xml
+++ b/templates/default/flumotion/mp3-encode.xml.j2
diff --git a/templates/default/flumotion/mp3-mux.xml b/templates/default/flumotion/mp3-mux.xml.j2
index f7ac81d..f7ac81d 100644
--- a/templates/default/flumotion/mp3-mux.xml
+++ b/templates/default/flumotion/mp3-mux.xml.j2
diff --git a/templates/default/flumotion/mpeg2-encode.xml b/templates/default/flumotion/mpeg2-encode.xml.j2
index 05a56c4..05a56c4 100644
--- a/templates/default/flumotion/mpeg2-encode.xml
+++ b/templates/default/flumotion/mpeg2-encode.xml.j2
diff --git a/templates/default/flumotion/mpegts-mux.xml b/templates/default/flumotion/mpegts-mux.xml.j2
index 8d8be6a..8d8be6a 100644
--- a/templates/default/flumotion/mpegts-mux.xml
+++ b/templates/default/flumotion/mpegts-mux.xml.j2
diff --git a/templates/default/flumotion/ogg-mux.xml b/templates/default/flumotion/ogg-mux.xml.j2
index 8827be1..8827be1 100644
--- a/templates/default/flumotion/ogg-mux.xml
+++ b/templates/default/flumotion/ogg-mux.xml.j2
diff --git a/templates/default/flumotion/opus-encode.xml b/templates/default/flumotion/opus-encode.xml.j2
index 531bd84..531bd84 100644
--- a/templates/default/flumotion/opus-encode.xml
+++ b/templates/default/flumotion/opus-encode.xml.j2
diff --git a/templates/default/flumotion/planet.xml b/templates/default/flumotion/planet.xml.j2
index 9c4e31a..2f99c0e 100644
--- a/templates/default/flumotion/planet.xml
+++ b/templates/default/flumotion/planet.xml.j2
@@ -14,44 +14,44 @@
<atmosphere>
{% for name, component in atmosphere.items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
</atmosphere>
<flow name="{{ globals.name }}">
<!-- raw-input, resizing and resampling -->
{% for name, component in flow['inputs'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
<!-- encoding -->
<!-- audio -->
{% for name, component in flow['encoders-audio'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
<!-- video -->
{% for name, component in flow['encoders-video'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
<!-- muxing -->
{% for name, component in flow['muxers'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
<!-- repeater -->
{% for name, component in flow['repeaters'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
<!-- streaming -->
{% for name, component in flow['streamers'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
<!-- recording -->
{% for name, component in flow['recorders'].items() %}
-{% include '%s.xml' % component.type %}
+{% include '%s.xml.j2' % component.type %}
{% endfor %}
</flow>
diff --git a/templates/default/flumotion/porter.xml b/templates/default/flumotion/porter.xml.j2
index 86b72b3..86b72b3 100644
--- a/templates/default/flumotion/porter.xml
+++ b/templates/default/flumotion/porter.xml.j2
diff --git a/templates/default/flumotion/raw-encode.xml b/templates/default/flumotion/raw-encode.xml.j2
index c5e1c61..c5e1c61 100644
--- a/templates/default/flumotion/raw-encode.xml
+++ b/templates/default/flumotion/raw-encode.xml.j2
diff --git a/templates/default/flumotion/recorder.xml b/templates/default/flumotion/recorder.xml.j2
index b2fce9e..b2fce9e 100644
--- a/templates/default/flumotion/recorder.xml
+++ b/templates/default/flumotion/recorder.xml.j2
diff --git a/templates/default/flumotion/repeater.xml b/templates/default/flumotion/repeater.xml.j2
index aa469ec..aa469ec 100644
--- a/templates/default/flumotion/repeater.xml
+++ b/templates/default/flumotion/repeater.xml.j2
diff --git a/templates/default/flumotion/soundcard.xml b/templates/default/flumotion/soundcard.xml.j2
index 23df8a4..23df8a4 100644
--- a/templates/default/flumotion/soundcard.xml
+++ b/templates/default/flumotion/soundcard.xml.j2
diff --git a/templates/default/flumotion/video-resize.xml b/templates/default/flumotion/video-resize.xml.j2
index 7f858b9..7f858b9 100644
--- a/templates/default/flumotion/video-resize.xml
+++ b/templates/default/flumotion/video-resize.xml.j2
diff --git a/templates/default/flumotion/videotest.xml b/templates/default/flumotion/videotest.xml.j2
index 342d645..342d645 100644
--- a/templates/default/flumotion/videotest.xml
+++ b/templates/default/flumotion/videotest.xml.j2
diff --git a/templates/default/flumotion/vorbis-encode.xml b/templates/default/flumotion/vorbis-encode.xml.j2
index 83471fd..83471fd 100644
--- a/templates/default/flumotion/vorbis-encode.xml
+++ b/templates/default/flumotion/vorbis-encode.xml.j2
diff --git a/templates/default/flumotion/vp8-encode.xml b/templates/default/flumotion/vp8-encode.xml.j2
index 79dfdc9..dfb07d7 100644
--- a/templates/default/flumotion/vp8-encode.xml
+++ b/templates/default/flumotion/vp8-encode.xml.j2
@@ -1,4 +1,3 @@
-
<component name="{{ name }}"
type="pipeline-converter"
label="{{ component.desc }}"
diff --git a/templates/default/flumotion/webm-mux.xml b/templates/default/flumotion/webm-mux.xml.j2
index ac58f13..ac58f13 100644
--- a/templates/default/flumotion/webm-mux.xml
+++ b/templates/default/flumotion/webm-mux.xml.j2
diff --git a/templates/default/flumotion/worker.xml b/templates/default/flumotion/worker.xml.j2
index b6f4667..b6f4667 100644
--- a/templates/default/flumotion/worker.xml
+++ b/templates/default/flumotion/worker.xml.j2
diff --git a/templates/default/kubernetes/flumotion-manager-cm.yml.j2 b/templates/default/kubernetes/flumotion-manager-cm.yml.j2
new file mode 100644
index 0000000..d29cff6
--- /dev/null
+++ b/templates/default/kubernetes/flumotion-manager-cm.yml.j2
@@ -0,0 +1,23 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ namespace: {{ namespace }}
+ name: flumotion-manager
+ labels:
+ app: flumotion
+ type: manager
+data:
+ planet.xml: |
+ <?xml version="1.0"?>
+ <planet>
+ <manager name="planet">
+ <host>0.0.0.0</host>
+ <port>8642</port>
+ <transport>tcp</transport>
+ <component name="manager-bouncer" type="htpasswdcrypt-bouncer">
+ <property name="data">
+ user:PSfNpHTkpTx1M
+ </property>
+ </component>
+ </manager>
+ </planet>
diff --git a/templates/default/kubernetes/flumotion-manager-deploy.yml.j2 b/templates/default/kubernetes/flumotion-manager-deploy.yml.j2
new file mode 100644
index 0000000..4d86e89
--- /dev/null
+++ b/templates/default/kubernetes/flumotion-manager-deploy.yml.j2
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ namespace: {{ namespace }}
+ name: flumotion-manager
+ labels:
+ app: flumotion
+ type: manager
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: flumotion
+ type: manager
+ strategy:
+ type: Recreate
+ revisionHistoryLimit: 5
+ template:
+ metadata:
+ labels:
+ app: flumotion
+ type: manager
+ spec:
+ nodeName: dione
+ containers:
+ - name: flumotion
+ image: spreadspace/flumotion:manager
+ imagePullPolicy: Always
+ args:
+ - --verbose
+ - /etc/flumotion/planet.xml
+ volumeMounts:
+ - name: home
+ mountPath: /srv
+ - name: planet-config
+ mountPath: /etc/flumotion
+ volumes:
+ - name: home
+ emptyDir:
+ medium: Memory
+ - name: planet-config
+ configMap:
+ name: flumotion-manager
diff --git a/templates/default/kubernetes/flumotion-manager-svc.yml.j2 b/templates/default/kubernetes/flumotion-manager-svc.yml.j2
new file mode 100644
index 0000000..5d0dac7
--- /dev/null
+++ b/templates/default/kubernetes/flumotion-manager-svc.yml.j2
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ namespace: {{ namespace }}
+ name: flumotion-manager
+ labels:
+ app: flumotion
+ type: manager
+spec:
+ selector:
+ app: flumotion
+ type: manager
+ clusterIP: {{ desc.globals.manager.host }}
+ ports:
+ - name: ssl
+ port: 7531
+ protocol: TCP
+ - name: plain
+ port: 8642
+ protocol: TCP
diff --git a/templates/default/kubernetes/flumotion-worker-deploy.yml.j2 b/templates/default/kubernetes/flumotion-worker-deploy.yml.j2
new file mode 100644
index 0000000..ea040d0
--- /dev/null
+++ b/templates/default/kubernetes/flumotion-worker-deploy.yml.j2
@@ -0,0 +1,61 @@
+apiVersion: apps/v1beta2
+kind: Deployment
+metadata:
+ namespace: {{ namespace }}
+ name: flumotion-worker-{{ worker_name }}
+ labels:
+ app: flumotion
+ type: worker
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: flumotion
+ type: worker
+ strategy:
+ type: Recreate
+ revisionHistoryLimit: 5
+ template:
+ metadata:
+ labels:
+ app: flumotion
+ type: worker
+ spec:
+ nodeName: dione
+ containers:
+ - name: flumotion
+ image: spreadspace/flumotion:worker
+ imagePullPolicy: Always
+ args:
+ - --verbose
+ - -H flumotion-manager
+ - -P 8642
+ - -T tcp
+ - -n {{ worker_name }}
+ - -u user
+ - -p test
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - name: home
+ mountPath: /srv
+ - name: decklink-devices
+ mountPath: /dev/blackmagic
+ - name: decklink-libs
+ subPath: libDeckLinkAPI.so
+ mountPath: /usr/lib/libDeckLinkAPI.so
+ - name: decklink-libs
+ subPath: libDeckLinkPreviewAPI.so
+ mountPath: /usr/lib/libDeckLinkPreviewAPI.so
+ volumes:
+ - name: home
+ emptyDir:
+ medium: Memory
+ - name: decklink-devices
+ hostPath:
+ type: Directory
+ path: /dev/blackmagic
+ - name: decklink-libs
+ hostPath:
+ type: Directory
+ path: /usr/lib/