示例#1
0
 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
     }
示例#2
0
文件: specs.py 项目: bibaijin/console
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
示例#3
0
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
示例#4
0
 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
示例#5
0
    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
        }
示例#6
0
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
示例#7
0
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
示例#8
0
 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
     }