From 61b341e40961770b285725cecafbc28de95054fe Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 4 Feb 2018 03:40:13 +0100 Subject: change handling of flags --- src/examples/elevate2018.yml | 28 ++++++---- src/flufigut.py | 65 ++++++++++++---------- templates/default/flumotion/planet.xml.j2 | 12 ++-- templates/default/flumotion/recorder.xml.j2 | 4 ++ .../kubernetes/flumotion-worker-deploy.yml.j2 | 12 ++-- 5 files changed, 67 insertions(+), 54 deletions(-) diff --git a/src/examples/elevate2018.yml b/src/examples/elevate2018.yml index bfa43ca..65cc4b1 100644 --- a/src/examples/elevate2018.yml +++ b/src/examples/elevate2018.yml @@ -38,7 +38,9 @@ globals: dione: capture: "capture-*" default: [ "resize-*", "resample-*", "encode-*" ] - helene: [ "encode-sdi-orig-vp8-*", "encode-sdi-orig-h264-360p25", "mux-*", "http-local1*", "record-*" ] + helene: + record: "record-*" + default: [ "encode-sdi-orig-vp8-*", "encode-sdi-orig-h264-360p25", "mux-*", "http-local1*" ] emc-stats: "repeat-public*" emc-01: "http-public1*" emc-02: "http-public2*" @@ -95,14 +97,16 @@ streams: burst-on-connect: 5 hostname: "elevate-live%i.spreadspace.org" repeater: True -# records: -# av: -# muxes: -# avr: { format: rec, profile: rec } -# directory: /srv/elevate2017/ -# filename: "av-orig %Y-%m-%d %H-%M-%S" -# audio: -# muxes: -# audio-orig: { format: ogg, profile: high } -# directory: /srv/elevate2017/ -# filename: "audio-orig %Y-%m-%d %H-%M-%S" +records: + av: + mux: avr + format: rec + profile: rec + directory: /srv/recordings/elevate-2018 + filename: "av-orig %Y-%m-%d %H-%M-%S" + audio: + mux: audio-orig + format: ogg + profile: high + directory: /srv/recordings/elevate-2018 + filename: "audio-orig %Y-%m-%d %H-%M-%S" diff --git a/src/flufigut.py b/src/flufigut.py index 77980d7..dfcb5e8 100755 --- a/src/flufigut.py +++ b/src/flufigut.py @@ -172,14 +172,14 @@ class Planet: 'name': worker.name, 'subs': {}, 'password': rand_string(size=20), - 'flags': {} + 'flags': [] } if not worker.subname: return self.workers[worker.name]['subs'][worker.subname] = { 'fullname': str(worker), - 'flags': {} + 'flags': [] } return @@ -189,9 +189,15 @@ class Planet: if worker.subname not in self.workers[worker.name]['subs']: self.workers[worker.name]['subs'][worker.subname] = { 'fullname': str(worker), - 'flags': {} + 'flags': [] } + def __set_worker_flags(self, worker, flag): + if flag not in self.workers[worker.name]['flags']: + self.workers[worker.name]['flags'].append(flag) + if worker.subname and flag not in self.workers[worker.name]['subs'][worker.subname]['flags']: + self.workers[worker.name]['subs'][worker.subname]['flags'].append(flag) + def __get_worker(self, comp_name): match_prefix_len = 0 match = None @@ -218,11 +224,6 @@ class Planet: # # inputs - def __set_input_worker_flags(self, worker, input): - self.workers[worker.name]['flags'] = "input-%s" % input['type'] - if worker.subname: - self.workers[worker.name]['subs'][worker.subname]['flags'] = "input-%s" % input['type'] - def __set_input_properties(self, comp_name, props): for prop in props: if prop == 'resolution': @@ -250,7 +251,7 @@ class Planet: if input['master']: master_cnt += 1 - self.__set_input_worker_flags(worker, input) + self.__set_worker_flags(worker, "input-%s" % input['type']) self.__set_input_properties(comp_name, input['properties']) if master_cnt == 0: @@ -530,28 +531,32 @@ class Planet: def _generate_records(self): self.flow['recorders'] = {} - for _, record in self._desc.records.items(): - for mux in record['muxes']: - format = record['muxes'][mux]["format"] - profile = record['muxes'][mux]["profile"] - feeder = 'mux-%s-%s-%s' % (mux, format, profile) - - comp_name = 'record-%s-%s-%s' % (mux, format, profile) - comp_desc = 'recorder for %s %s-%s' % (mux, format, profile) - - self.flow['recorders'][comp_name] = { - 'type': "recorder", - 'desc': comp_desc, - 'worker': str(self.__get_worker(comp_name)), - 'feeder': feeder, - 'properties': {} - } - for prop in record: - if prop != 'muxes': - self.flow['recorders'][comp_name]['properties'][prop] = record[prop] + for record_name, record in self._desc.records.items(): + mux = record['mux'] + format = record['format'] + profile = record['profile'] + feeder = 'mux-%s-%s-%s' % (mux, format, profile) + + comp_name = 'record-%s-%s-%s' % (mux, format, profile) + comp_desc = 'recorder for %s %s-%s' % (mux, format, profile) + worker = self.__get_worker(comp_name) + + self.flow['recorders'][comp_name] = { + 'type': "recorder", + 'desc': comp_desc, + 'worker': str(worker), + 'feeder': feeder, + 'properties': {}, + '_recorder_id': record_name + } + for prop in record: + if prop not in ['mux', 'format', 'profile']: + self.flow['recorders'][comp_name]['properties'][prop] = record[prop] + self.__set_worker_flags(worker, "record-%s" % record_name) # # all + def generate(self): self._generate_inputs() self._generate_muxes() @@ -559,7 +564,7 @@ class Planet: self._generate_records() return self._unassigned_components - def toXML(self, template_dir): + def planet_xml(self, template_dir): 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.j2') @@ -615,7 +620,7 @@ class K8sDeployment: v1.create_namespaced_service(self._namespace, svc) cm = self.__generate_object(tmpl_env, 'flumotion-manager-cm.yml') - cm['data']['planet.xml'] = self._planet.toXML(template_dir) + cm['data']['planet.xml'] = self._planet.planet_xml(template_dir) v1.create_namespaced_config_map(self._namespace, cm) secret = self.__generate_object(tmpl_env, 'flumotion-manager-secret.yml') diff --git a/templates/default/flumotion/planet.xml.j2 b/templates/default/flumotion/planet.xml.j2 index cac9fc0..5c2575c 100644 --- a/templates/default/flumotion/planet.xml.j2 +++ b/templates/default/flumotion/planet.xml.j2 @@ -2,19 +2,19 @@ -{%- if globals.deployment.type == "kubernetes" %} +%% if globals.deployment.type == "kubernetes" 0.0.0.0 -{%- else %} +%% else {{ globals.manager.host }} -{%- endif %} +%% endif {{ globals.manager.port }} {{ globals.manager.transport }} -{%- if globals.deployment.type == "kubernetes" %} +%% if globals.deployment.type == "kubernetes" /srv/secret/htpasswd -{%- else %} +%% else /etc/flumotion/{{ globals.name }}.passwd -{%- endif %} +%% endif diff --git a/templates/default/flumotion/recorder.xml.j2 b/templates/default/flumotion/recorder.xml.j2 index b2fce9e..2634978 100644 --- a/templates/default/flumotion/recorder.xml.j2 +++ b/templates/default/flumotion/recorder.xml.j2 @@ -8,7 +8,11 @@ {{ component.feeder }} %% for name, value in component.properties.items() +%% if globals.deployment.type == "kubernetes" and name == "directory" + /srv/recordings/{{ component._recorder_id }} +%% else {{ value }} +%% endif %% endfor false diff --git a/templates/default/kubernetes/flumotion-worker-deploy.yml.j2 b/templates/default/kubernetes/flumotion-worker-deploy.yml.j2 index 9098866..1c5c003 100644 --- a/templates/default/kubernetes/flumotion-worker-deploy.yml.j2 +++ b/templates/default/kubernetes/flumotion-worker-deploy.yml.j2 @@ -26,7 +26,7 @@ spec: runAsUser: 998 fsGroup: 998 containers: -{% for subname, sub in worker.subs.items() %} +%% for subname, sub in worker.subs.items() - name: {{ subname }} image: spreadspace/flumotion:worker-{{ desc.globals.deployment.parameter.image_version }} imagePullPolicy: Always @@ -48,7 +48,7 @@ spec: volumeMounts: - name: home mountPath: /srv -{% if 'input-decklink' in sub.flags %} +%% if 'input-decklink' in sub.flags - name: decklink-devices mountPath: /dev/blackmagic - name: decklink-libs @@ -59,13 +59,13 @@ spec: mountPath: /usr/lib/libDeckLinkPreviewAPI.so securityContext: privileged: true -{% endif %} -{% endfor %} +%% endif +%% endfor volumes: - name: home emptyDir: medium: Memory -{% if 'input-decklink' in worker.flags %} +%% if 'input-decklink' in worker.flags - name: decklink-devices hostPath: type: Directory @@ -74,4 +74,4 @@ spec: hostPath: type: Directory path: /usr/lib/ -{% endif %} +%% endif -- cgit v1.2.3