diff options
-rw-r--r-- | src/examples/elevate2018.yml | 2 | ||||
-rwxr-xr-x | src/flufigut.py | 26 | ||||
-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.j2 | 23 | ||||
-rw-r--r-- | templates/default/kubernetes/flumotion-manager-deploy.yml.j2 | 43 | ||||
-rw-r--r-- | templates/default/kubernetes/flumotion-manager-svc.yml.j2 | 20 | ||||
-rw-r--r-- | templates/default/kubernetes/flumotion-worker-deploy.yml.j2 | 61 |
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/ |