summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2018-02-04 03:40:13 +0100
committerChristian Pointner <equinox@spreadspace.org>2018-02-04 03:40:13 +0100
commit61b341e40961770b285725cecafbc28de95054fe (patch)
tree1431b47bdce4d7fac5a69301117e8f6355c0b0c4
parentworker password are secrets now as well (diff)
change handling of flags
-rw-r--r--src/examples/elevate2018.yml28
-rwxr-xr-xsrc/flufigut.py65
-rw-r--r--templates/default/flumotion/planet.xml.j212
-rw-r--r--templates/default/flumotion/recorder.xml.j24
-rw-r--r--templates/default/kubernetes/flumotion-worker-deploy.yml.j212
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 @@
<planet name="{{ globals.name }}">
<manager name="{{ globals.name }}">
-{%- if globals.deployment.type == "kubernetes" %}
+%% if globals.deployment.type == "kubernetes"
<host>0.0.0.0</host>
-{%- else %}
+%% else
<host>{{ globals.manager.host }}</host>
-{%- endif %}
+%% endif
<port>{{ globals.manager.port }}</port>
<transport>{{ globals.manager.transport }}</transport>
<component name="manager-bouncer" type="htpasswdcrypt-bouncer">
-{%- if globals.deployment.type == "kubernetes" %}
+%% if globals.deployment.type == "kubernetes"
<property name="filename">/srv/secret/htpasswd</property>
-{%- else %}
+%% else
<property name="filename">/etc/flumotion/{{ globals.name }}.passwd</property>
-{%- endif %}
+%% endif
</component>
</manager>
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 @@
<feed alias="default">{{ component.feeder }}</feed>
</eater>
%% for name, value in component.properties.items()
+%% if globals.deployment.type == "kubernetes" and name == "directory"
+ <property name="{{ name }}">/srv/recordings/{{ component._recorder_id }}</property>
+%% else
<property name="{{ name }}">{{ value }}</property>
+%% endif
%% endfor
<clock-master>false</clock-master>
</component>
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