summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/flufigut.py96
1 files changed, 61 insertions, 35 deletions
diff --git a/src/flufigut.py b/src/flufigut.py
index 6be8cb2..6d7eaf3 100755
--- a/src/flufigut.py
+++ b/src/flufigut.py
@@ -193,7 +193,25 @@ class Planet:
'flags': {}
}
- def __add_worker_flag(self, worker, flag_name, flag):
+ def __add_worker_flag_exclusive(self, worker, flag_name, flag):
+ if flag_name not in self.workers[worker.name]['flags']:
+ self.workers[worker.name]['flags'][flag_name] = flag
+ else:
+ if flag != self.workers[worker.name]['flags'][flag_name]:
+ raise Exception("can't set exclusive flag '%s' for worker '%s' to '%s', it is already set to '%s'" % (
+ flag_name, worker.name, flag, self.workers[worker.name]['flags'][flag_name]))
+
+ if not worker.subname:
+ return
+
+ if flag_name not in self.workers[worker.name]['subs'][worker.subname]['flags']:
+ self.workers[worker.name]['subs'][worker.subname]['flags'][flag_name] = flag
+ else:
+ if flag != self.workers[worker.name]['subs'][worker.subname]['flags'][flag_name]:
+ raise Exception("can't set exclusive flag '%s' for worker '%s' to '%s', it is already set to '%s'" % (
+ flag_name, worker.name, flag, self.workers[worker.name]['subs'][worker.subname]['flags'][flag_name]))
+
+ def __add_worker_flag_multi(self, worker, flag_name, flag):
if flag_name not in self.workers[worker.name]['flags']:
self.workers[worker.name]['flags'][flag_name] = [flag]
else:
@@ -263,7 +281,7 @@ class Planet:
if input['master']:
master_cnt += 1
- self.__add_worker_flag(worker, "input", input_name)
+ self.__add_worker_flag_multi(worker, "input", input_name)
self.__set_input_properties(comp_name, input['properties'])
if master_cnt == 0:
@@ -433,7 +451,7 @@ class Planet:
if interface:
self.atmosphere[porter.name]['properties']['interface'] = interface
- self.__add_worker_flag(worker, "port", port)
+ self.__add_worker_flag_multi(worker, "port", port)
return porter
def __generate_stream_mux_repeater(self, stream, mux, format, profile, feeder):
@@ -523,8 +541,8 @@ class Planet:
}
self.__set_stream_mux_instance_props(comp_name, stream, porter.port, mount_point, hostname_next)
self.__add_stream_mux_instance_plugs(comp_name, stream_name, idx, mux, format, profile)
- self.__add_worker_flag(worker, "stream", stream_name)
- self.__add_worker_flag(worker, "stream-hostname-%s" % stream_name, hostname)
+ self.__add_worker_flag_exclusive(worker, "stream", stream_name)
+ self.__add_worker_flag_exclusive(worker, "stream-hostname-%s" % stream_name, hostname)
def __generate_stream_instance(self, stream_name, stream, idx, cnt):
port = stream['port']
@@ -574,7 +592,7 @@ class Planet:
if prop not in ['mux', 'format', 'profile']:
self.flow['recorders'][comp_name]['properties'][prop] = record[prop]
- self.__add_worker_flag(worker, "record", record_name)
+ self.__add_worker_flag_multi(worker, "record", record_name)
#
# all
@@ -652,12 +670,6 @@ class K8sDeployment:
appsV1.create_namespaced_deployment(self._namespace, deploy)
def _deploy_flumotion_worker(self, template_dir, tmpl_env, v1, appsV1, worker):
- if not len(worker['subs']):
- worker['subs']['worker'] = {
- 'fullname': worker['name'],
- 'flags': worker['flags']
- }
-
secret = self.__generate_object(tmpl_env, 'flumotion-worker-secret.yml', worker)
secret['data']['password'] = base64.b64encode(worker['password'].encode('utf-8')).decode('ascii')
v1.create_namespaced_secret(self._namespace, secret)
@@ -670,6 +682,15 @@ class K8sDeployment:
appsV1.create_namespaced_deployment(self._namespace, deploy)
def _deploy_nginx_worker(self, template_dir, tmpl_env, v1, appsV1, worker):
+ needs_nginx = False
+ if 'stream' in worker['flags']:
+ stream_name = worker['flags']['stream']
+ if 'nginx-muxes' in self._desc.streams[stream_name] and len(self._desc.streams[stream_name]['nginx-muxes']) > 0:
+ needs_nginx = True
+
+ if not needs_nginx:
+ return
+
cm = self.__generate_object(tmpl_env, 'nginx-streamer-cm.yml', worker)
v1.create_namespaced_config_map(self._namespace, cm)
@@ -689,6 +710,11 @@ class K8sDeployment:
self._deploy_flumotion_manager(template_dir, tmpl_env, v1, appsV1)
for _, worker in self._planet.workers.items():
+ if not len(worker['subs']):
+ worker['subs']['worker'] = {
+ 'fullname': worker['name'],
+ 'flags': worker['flags']
+ }
self._deploy_flumotion_worker(template_dir, tmpl_env, v1, appsV1, worker)
self._deploy_nginx_worker(template_dir, tmpl_env, v1, appsV1, worker)
@@ -733,29 +759,29 @@ if __name__ == '__main__':
print("- " + c)
sys.exit(1)
- print("****************************************************")
- print("** atmosphere **")
- print("**")
- __pp.pprint(p.atmosphere)
- print("**")
- print("**************************")
- print("** planet **")
- print("**")
- __pp.pprint(p.flow)
- print("**")
- print("**************************")
- print("** _workers_ **")
- print("**")
- __pp.pprint(p.workers)
- print("**")
- print("****************************************************")
-
- # k8s = K8sDeployment(d, p)
- # print("wiping exisiting namespace ...")
- # k8s.wipe()
- # print("deploying new planet ...")
- # k8s.deploy('../templates')
- # print("done.")
+ # print("****************************************************")
+ # print("** atmosphere **")
+ # print("**")
+ # __pp.pprint(p.atmosphere)
+ # print("**")
+ # print("**************************")
+ # print("** planet **")
+ # print("**")
+ # __pp.pprint(p.flow)
+ # print("**")
+ # print("**************************")
+ # print("** _workers_ **")
+ # print("**")
+ # __pp.pprint(p.workers)
+ # print("**")
+ # print("****************************************************")
+
+ k8s = K8sDeployment(d, p)
+ print("wiping exisiting namespace ...")
+ k8s.wipe()
+ print("deploying new planet ...")
+ k8s.deploy('../templates')
+ print("done.")
except Exception as e:
print("ERROR: while running app: %s" % e)