def dp_resource_deploy(self, configed_instances): resources_need_deploy = [] instances_deploy_results = {} resources = self.lain_config.use_resources resource_instance_deploy_result = True if not resources: return { "OK": True, 'has_resource': False, 'resources_need_deploy': resources_need_deploy, 'instances_deploy_results': instances_deploy_results } for resourcename, resource_props in resources.iteritems(): need_deploy_resource, deploy_success, instance_deploy_result = \ self.resource_instance_deploy( resourcename, resource_props, configed_instances) if need_deploy_resource: resources_need_deploy.append(need_deploy_resource) if not deploy_success: resource_instance_deploy_result = False instances_deploy_results[resource_instance_name( resourcename, self.appname)] = instance_deploy_result return { 'OK': resource_instance_deploy_result, 'has_resource': True, 'resources_need_deploy': resources_need_deploy, 'instances_deploy_results': instances_deploy_results }
def render_pod_spec(app_name, proc, use_services, use_resources): pod = PodSpec() pod.Name = "%s.%s.%s" % (app_name, proc.type.name, proc.name) pod.Namespace = app_name pod.Containers = [render_container_spec(app_name, proc)] pod.Dependencies = [] for service_app, service_list in use_services.iteritems(): for service in service_list: pod.Dependencies.append(render_dependency(service_app, service)) if use_resources: for resource_name, resource_props in use_resources.iteritems(): resource_service_names = resource_props['services'] for resouce_service_proc_name in resource_service_names: pod.Dependencies.append( render_dependency( resource_instance_name(resource_name, app_name), resouce_service_proc_name)) pod.Annotation = proc.annotation pod.Stateful = proc.stateful pod.SetupTime = proc.setup_time pod.KillTimeout = proc.kill_timeout pod.Labels = {} if not proc.labels else proc.labels pod.Filters = [] if not proc.filters else proc.filters pod.HealthConfig = {} if not proc.container_healthcheck else proc.container_healthcheck return pod
def render_pod_spec(app_name, proc, use_services, use_resources): pod = PodSpec() pod.Name = "%s.%s.%s" % ( app_name, proc.type.name, proc.name ) pod.Namespace = app_name pod.Containers = [render_container_spec(app_name, proc)] pod.Dependencies = [] for service_app, service_list in use_services.iteritems(): for service in service_list: pod.Dependencies.append(render_dependency(service_app, service)) if use_resources: for resource_name, resource_props in use_resources.iteritems(): resource_service_names = resource_props['services'] for resouce_service_proc_name in resource_service_names: pod.Dependencies.append(render_dependency(resource_instance_name( resource_name, app_name), resouce_service_proc_name)) pod.Annotation = proc.annotation pod.Stateful = proc.stateful pod.SetupTime = proc.setup_time pod.KillTimeout = proc.kill_timeout pod.Labels = {} if not proc.labels else proc.labels pod.Filters = [] if not proc.filters else proc.filters pod.HealthConfig = {} if not proc.container_healthcheck else proc.container_healthcheck return pod
def resource_instance_deploy(self, resourcename, resource_props, configed_instances): instancename = resource_instance_name(resourcename, self.appname) resource_instance = configed_instances[instancename] resource_instance.update_app_type() instance_deploy_result = resource_instance.basic_app_deploy() instance_deploy_success = instance_deploy_result.get("OK", False) if instance_deploy_success: resource_instance.set_deployed() return None, instance_deploy_success, instance_deploy_result
def dp_resource_update(self, origin_resources, configed_instances): resources_need_deploy = [] instances_deploy_results = {} instances_remove_results = {} dp_resource_update_result = True new_resources = self.lain_config.use_resources need_deploy_resources = dict.fromkeys( [r for r in new_resources if r not in origin_resources]) need_remove_resources = dict.fromkeys( [r for r in origin_resources if r not in new_resources]) for resourcename in need_deploy_resources.keys(): need_deploy_resource, deploy_success, instance_deploy_result = \ self.resource_instance_deploy(resourcename, new_resources[ resourcename], configed_instances) if need_deploy_resource: resources_need_deploy.append(need_deploy_resource) dp_resource_update_result = False if not deploy_success: dp_resource_update_result = False instances_deploy_results[resource_instance_name( resourcename, self.appname)] = instance_deploy_result if not dp_resource_update_result: return { 'OK': dp_resource_update_result, 'resources_need_deploy': resources_need_deploy, 'instances_deploy_results': instances_deploy_results, 'instances_remove_results': instances_remove_results } for resourcename in need_remove_resources.keys(): instancename = resource_instance_name(resourcename, self.appname) remove_result = self.resource_instance_remove(instancename) if remove_result and not remove_result.get("OK", False): dp_resource_update_result = False instances_remove_results[instancename] = remove_result return { 'OK': dp_resource_update_result, 'resources_need_deploy': resources_need_deploy, 'instances_deploy_results': instances_deploy_results, 'instances_remove_results': instances_remove_results }
def recursive_deploy(podgroup_spec): results = {} services_need_deploy = [] services_dont_allow = [] app = App.get(podgroup_spec.Namespace) app.add_calico_profile() services = app.lain_config.use_services for service_appname, service_procnames in services.iteritems(): service_app = App.get_or_none(service_appname) if service_app is None or not service_app.is_reachable(): logger.warning("service App %s DoesNotExist" % service_appname) services_need_deploy.extend([ "%s.proc.%s" % (service_appname, s) for s in service_procnames ]) for procname in service_procnames: # TODO supporting service name alias portal_name = App.get_portal_name_from_service_name( service_app, procname) portal_pod_name = "%s.portal.%s" % (service_appname, portal_name) # TODO check portal.allow(client procname) app.dependency_register(service_app, service_appname, portal_pod_name) resources = app.lain_config.use_resources for resourcename, resource_props in resources.iteritems(): instance_app = App.get_or_none( resource_instance_name(resourcename, app.appname)) for procname in resource_props[ 'services']: # TODO supporting resource name alias portal_name = App.get_portal_name_from_service_name( instance_app, procname) portal_pod_name = "%s.portal.%s" % (instance_app.appname, portal_name) # TODO check portal.allow(client procname) app.dependency_register(instance_app, instance_app.appname, portal_pod_name) results = { 'services_need_deploy': services_need_deploy, 'services_dont_allow': services_dont_allow, } podgroup_r = app.podgroup_deploy(podgroup_spec) results["podgroup_result"] = {podgroup_spec.Name: podgroup_r} results["OK"] = podgroup_r.status_code < 400 return results
def recursive_deploy(podgroup_spec): results = {} services_need_deploy = [] services_dont_allow = [] app = App.get(podgroup_spec.Namespace) services = app.lain_config.use_services for service_appname, service_procnames in services.iteritems(): service_app = App.get_or_none(service_appname) if service_app is None or not service_app.is_reachable(): logger.warning("service App %s DoesNotExist" % service_appname) services_need_deploy.extend( ["%s.proc.%s" % (service_appname, s) for s in service_procnames]) for procname in service_procnames: # TODO supporting service name alias portal_name = App.get_portal_name_from_service_name( service_app, procname) portal_pod_name = "%s.portal.%s" % (service_appname, portal_name) # TODO check portal.allow(client procname) app.dependency_register( service_app, service_appname, portal_pod_name) resources = app.lain_config.use_resources for resourcename, resource_props in resources.iteritems(): instance_app = App.get_or_none( resource_instance_name(resourcename, app.appname)) # TODO supporting resource name alias for procname in resource_props['services']: portal_name = App.get_portal_name_from_service_name( instance_app, procname) portal_pod_name = "%s.portal.%s" % ( instance_app.appname, portal_name) # TODO check portal.allow(client procname) app.dependency_register( instance_app, instance_app.appname, portal_pod_name) results = { 'services_need_deploy': services_need_deploy, 'services_dont_allow': services_dont_allow, } podgroup_r = app.podgroup_deploy(podgroup_spec) results["podgroup_result"] = { podgroup_spec.Name: podgroup_r } results["OK"] = podgroup_r.status_code < 400 return results
def dp_resource_remove(self): resources = self.lain_config.use_resources resource_instance_remove_result = True instances_remove_results = {} if not resources: return { "OK": True, 'has_resource': False, 'instances_remove_results': instances_remove_results } for resourcename, resource_props in resources.iteritems(): instancename = resource_instance_name(resourcename, self.appname) remove_result = self.resource_instance_remove(instancename) if remove_result and not remove_result.get("OK", False): resource_instance_remove_result = False instances_remove_results[instancename] = remove_result return { "OK": resource_instance_remove_result, 'has_resource': True, 'instances_remove_results': instances_remove_results }