diff options
Diffstat (limited to 'src/flufigut.py')
-rwxr-xr-x | src/flufigut.py | 96 |
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) |