Ejemplo n.º 1
0
    def post(self, request, name, stage):
        log.info("Post to capacity with data {0}".format(request.body))
        try:
            cluster_name = '{}-{}'.format(name, stage)
            cluster_info = json.loads(request.body)

            log.info("Create Capacity in the provider")
            clusters_helper.create_cluster(request, cluster_name, cluster_info)

            log.info("Update cluster_name to environment")
            # Update environment
            environs_helper.update_env_basic_config(request, name, stage,
                                                    data={"clusterName": cluster_name, "IsDocker": True})

            log.info("Update capacity to the environment")
            # set up env and group relationship
            environs_helper.add_env_capacity(
                request, name, stage, capacity_type="GROUP", data=cluster_name)

            return HttpResponse("{}", content_type="application/json")
        except NotAuthorizedException as e:
            log.error("Have an NotAuthorizedException error {}".format(e))
            return HttpResponse(e, status=403, content_type="application/json")
        except Exception as e:
            log.error("Have an error {}", e)
            return HttpResponse(e, status=500, content_type="application/json")
Ejemplo n.º 2
0
    def post(self, request, name, stage):
        log.info("Post to capacity with data {0}".format(request.body))
        try:
            cluster_name = '{}-{}'.format(name, stage)
            cluster_info = json.loads(request.body)

            log.info("Create Capacity in the provider")
            clusters_helper.create_cluster(request, cluster_name, cluster_info)

            log.info("Associate cluster_name to environment")
            # Update cluster info
            environs_helper.update_env_basic_config(
                request, name, stage, data={"clusterName": cluster_name})

            log.info("Update capacity to the environment")
            # set up env and group relationship
            environs_helper.add_env_capacity(request,
                                             name,
                                             stage,
                                             capacity_type="GROUP",
                                             data=cluster_name)
            return HttpResponse("{}", content_type="application/json")
        except Exception as e:
            log.info("Have an error {}".format(e))
            return HttpResponse(e, status=500, content_type="application/json")
Ejemplo n.º 3
0
def create_cluster(request, name, stage):
    params = request.POST
    cluster_info = {}
    cluster_info['capacity'] = params['capacity']
    cluster_info['base_image_id'] = params['baseImageId']
    cluster_info['provider'] = params['provider']
    cluster_info['host_type_id'] = params['hostTypeId']
    cluster_info['security_zone_id'] = params['securityZoneId']
    cluster_info['placement_id'] = ",".join(params.getlist('placementId'))

    user_data_configs = parse_configs(params)
    if 'assignPublicIp' in params:
        user_data_configs['cmp_public_ip'] = 'yes'

    if 'role' in params and params['role'] != '':
        user_data_configs['cmp_role'] = params['role']
    else:
        user_data_configs['cmp_role'] = 'base'
    config_id = clusters_helper.update_advanced_configs(request, name, stage, user_data_configs)
    cluster_info['config_id'] = config_id
    clusters_helper.create_cluster(request, name, stage, cluster_info)

    env_info = {}
    if 'isDocker' in params:
        env_info['isDocker'] = True
    else:
        env_info['isDocker'] = False
    environs_helper.update_env_basic_config(request, name, stage, data=env_info)
    return get_basic_cluster(request, name, stage)
Ejemplo n.º 4
0
def create_cluster(request, name, stage):
    params = request.POST
    cluster_info = {}
    cluster_info['capacity'] = params['capacity']
    cluster_info['base_image_id'] = params['baseImageId']
    cluster_info['provider'] = params['provider']
    cluster_info['host_type_id'] = params['hostTypeId']
    cluster_info['security_zone_id'] = params['securityZoneId']
    cluster_info['placement_id'] = ",".join(params.getlist('placementId'))

    user_data_configs = parse_configs(params)
    if 'assignPublicIp' in params:
        user_data_configs['cmp_public_ip'] = 'yes'

    if 'role' in params and params['role'] != '':
        user_data_configs['cmp_role'] = params['role']
    else:
        user_data_configs['cmp_role'] = 'base'
    config_id = clusters_helper.update_advanced_configs(
        request, name, stage, user_data_configs)
    cluster_info['config_id'] = config_id
    clusters_helper.create_cluster(request, name, stage, cluster_info)

    env_info = {}
    if 'isDocker' in params:
        env_info['isDocker'] = True
    else:
        env_info['isDocker'] = False
    environs_helper.update_env_basic_config(request,
                                            name,
                                            stage,
                                            data=env_info)
    return get_basic_cluster(request, name, stage)
Ejemplo n.º 5
0
def create_cluster(request, name, stage):
    params = request.POST
    cluster_info = parse_cluster_info(request)
    user_data_configs = parse_configs(params)
    cluster_info['configs'] = user_data_configs
    clusters_helper.create_cluster(request, name, stage, cluster_info)
    return get_basic_cluster(request, name, stage)
Ejemplo n.º 6
0
def create_cmp_cluster(request, name, stage):
    params = request.POST
    cluster_info = parse_cluster_info(request)
    config_map = get_default_cmp_configs(name, stage)
    user_data_configs = parse_configs(params)
    config_map.update(user_data_configs)
    cluster_info['configs'] = config_map
    clusters_helper.create_cluster(request, name, stage, cluster_info)
    return get_cmp_cluster(request, name, stage)
Ejemplo n.º 7
0
def create_cluster(request, name, stage):
    params = request.POST
    cluster_name = '{}-{}'.format(name, stage)
    cluster_info = parse_cluster_info(request, name, stage, cluster_name)
    user_data_configs = parse_configs(params)
    cluster_info['configs'] = user_data_configs
    clusters_helper.create_cluster(request, cluster_name, cluster_info)

    # set up env and group relationship
    environs_helper.add_env_capacity(request, name, stage, capacity_type="GROUP", data=cluster_name)
    return get_basic_cluster(request, name, stage)
Ejemplo n.º 8
0
def create_cmp_cluster(request, name, stage):
    params = request.POST
    cluster_name = "{}-{}".format(name, stage)
    cluster_info = parse_cluster_info(request, name, stage, cluster_name)
    config_map = get_default_cmp_configs(name, stage)
    user_data_configs = parse_configs(params)
    config_map.update(user_data_configs)
    cluster_info["configs"] = config_map
    clusters_helper.create_cluster(request, cluster_name, cluster_info)

    # set up env and group relationship
    environs_helper.add_env_capacity(request, name, stage, capacity_type="GROUP", data=cluster_name)
    return get_cmp_cluster(request, name, stage)
Ejemplo n.º 9
0
def create_cluster(request, name, stage):
    params = request.POST
    cluster_name = '{}-{}'.format(name, stage)
    adv_cluster_info = {}
    if 'assignPublicIp' in params:
        adv_cluster_info['assignPublicIp'] = True

    if 'role' in params:
        adv_cluster_info['role'] = params['role']

    user_data_configs = parse_configs(params)
    if user_data_configs:
        adv_cluster_info['userDataConfigs'] = user_data_configs

    if adv_cluster_info:
        adv_cluster_info['clusterName'] = cluster_name
        adv_cluster_info['image'] = params['baseImageId']
        adv_cluster_info['hostType'] = params['hostTypeId']
        adv_cluster_info['securityZone'] = params['securityZoneId']
        adv_cluster_info['minSize'] = params['capacity']
        adv_cluster_info['maxSize'] = params['capacity']
        adv_cluster_info['subnet'] = ",".join(params.getlist('placementId'))
        if 'assignPublicIp' not in params:
            adv_cluster_info['assignPublicIp'] = False
        clusters_helper.create_advanced_cluster(request, name, stage,
                                                params['provider'],
                                                adv_cluster_info)
    else:
        cluster_info = {}
        cluster_info['cluster_name'] = cluster_name
        cluster_info['capacity'] = params['capacity']
        cluster_info['base_image_id'] = params['baseImageId']
        cluster_info['provider'] = params['provider']
        cluster_info['host_type_id'] = params['hostTypeId']
        cluster_info['security_zone_id'] = params['securityZoneId']
        cluster_info['placement_id'] = ",".join(params.getlist('placementId'))
        clusters_helper.create_cluster(request, name, stage, cluster_info)
    return get_basic_cluster(request, name, stage)
Ejemplo n.º 10
0
    def post(self, request, name, stage):
        log.info("Post to capacity with data {0}".format(request.body))
        try:
            cluster_name = '{}-{}'.format(name, stage)
            cluster_info = json.loads(request.body)

            log.info("Create Capacity in the provider")
            clusters_helper.create_cluster(request, cluster_name, cluster_info)

            log.info("Update cluster_name to environment")
            # Update environment
            environs_helper.update_env_basic_config(request,
                                                    name,
                                                    stage,
                                                    data={
                                                        "clusterName":
                                                        cluster_name,
                                                        "IsDocker": True
                                                    })

            return HttpResponse("{}", content_type="application/json")
        except Exception as e:
            log.info("Have an error {}", e)
            return HttpResponse(e, status=500, content_type="application/json")
Ejemplo n.º 11
0
def create_cluster(request, name, stage):
    params = request.POST
    cluster_name = '{}-{}'.format(name, stage)
    adv_cluster_info = {}
    if 'assignPublicIp' in params:
        adv_cluster_info['assignPublicIp'] = True

    if 'role' in params and params['role'] != '':
        adv_cluster_info['role'] = params['role']

    user_data_configs = parse_configs(params)
    if user_data_configs:
        adv_cluster_info['userDataConfigs'] = user_data_configs

    if adv_cluster_info:
        adv_cluster_info['clusterName'] = cluster_name
        adv_cluster_info['image'] = params['baseImageId']
        adv_cluster_info['hostType'] = params['hostTypeId']
        adv_cluster_info['securityZone'] = params['securityZoneId']
        adv_cluster_info['minSize'] = params['capacity']
        adv_cluster_info['maxSize'] = params['capacity']
        adv_cluster_info['subnet'] = ",".join(params.getlist('placementId'))
        if 'assignPublicIp' not in params:
            adv_cluster_info['assignPublicIp'] = False
        clusters_helper.create_advanced_cluster(request, name, stage, params['provider'], adv_cluster_info)
    else:
        cluster_info = {}
        cluster_info['cluster_name'] = cluster_name
        cluster_info['capacity'] = params['capacity']
        cluster_info['base_image_id'] = params['baseImageId']
        cluster_info['provider'] = params['provider']
        cluster_info['host_type_id'] = params['hostTypeId']
        cluster_info['security_zone_id'] = params['securityZoneId']
        cluster_info['placement_id'] = ",".join(params.getlist('placementId'))
        clusters_helper.create_cluster(request, name, stage, cluster_info)
    return get_basic_cluster(request, name, stage)
Ejemplo n.º 12
0
def clone_cluster(request, src_name, src_stage):
    try:
        params = request.POST
        dest_name = params.get('new_environment', src_name)
        dest_stage = params.get('new_stage', src_stage + '_clone')

        src_cluster_name = '{}-{}'.format(src_name, src_stage)
        dest_cluster_name = '{}-{}'.format(dest_name, dest_stage)

        ##0. teletraan service get src env buildName
        src_env = environs_helper.get_env_by_stage(request, src_name, src_stage)
        build_name = src_env.get('buildName', None)

        ##1. teletraan service create a new env
        dest_env = environs_helper.create_env(request, {
            'envName': dest_name,
            'stageName': dest_stage,
            'buildName': build_name
        })
        log.info('clone_cluster, created a new env %s' % dest_env)

        ##2. rodimus service get src_cluster config
        src_cluster_info = clusters_helper.get_cluster(request, src_cluster_name)
        log.info('clone_cluster, src cluster info %s' % src_cluster_info)
        configs = src_cluster_info.get('configs')
        if configs:
            cmp_group = configs.get('cmp_group')
            if cmp_group:
                cmp_groups_set = set(cmp_group.split(','))
                cmp_groups_set.remove(src_cluster_name)
                cmp_groups_set.remove('CMP')
                cmp_groups_set.add(dest_cluster_name)
                # CMP needs to be the first in the list
                configs['cmp_group'] = ','.join(['CMP'] + list(cmp_groups_set))
                src_cluster_info['configs'] = configs

        ##3. rodimus service post create cluster
        src_cluster_info['clusterName'] = dest_cluster_name
        src_cluster_info['capacity'] = 0
        log.info('clone_cluster, request clone cluster info %s' % src_cluster_info)
        dest_cluster_info = clusters_helper.create_cluster(request, dest_cluster_name, src_cluster_info)
        log.info('clone_cluster, cloned cluster info %s' % dest_cluster_info)

        ##4. teletraan service update_env_basic_config
        environs_helper.update_env_basic_config(request, dest_name, dest_stage,
                                                data={"clusterName": dest_cluster_name}
                                                )
        ##5. teletraan service set up env and group relationship
        environs_helper.update_env_capacity(request, dest_name, dest_stage, capacity_type="GROUP",
                                            data=[dest_cluster_name])

        ##6. get src script_config
        src_script_configs = environs_helper.get_env_script_config(request, src_name, src_stage)
        src_agent_configs = environs_helper.get_env_agent_config(request, src_name, src_stage)
        src_alarms_configs = environs_helper.get_env_alarms_config(request, src_name, src_stage)
        src_metrics_configs = environs_helper.get_env_metrics_config(request, src_name, src_stage)
        src_webhooks_configs = environs_helper.get_env_hooks_config(request, src_name, src_stage)

        ##8. clone all the extra configs
        if src_agent_configs:
            environs_helper.update_env_agent_config(request, dest_name, dest_stage, src_agent_configs)
        if src_script_configs:
            environs_helper.update_env_script_config(request, dest_name, dest_stage, src_script_configs)
        if src_alarms_configs:
            environs_helper.update_env_alarms_config(request, dest_name, dest_stage, src_alarms_configs)
        if src_metrics_configs:
            environs_helper.update_env_metrics_config(request, dest_name, dest_stage, src_metrics_configs)
        if src_webhooks_configs:
            environs_helper.update_env_hooks_config(request, dest_name, dest_stage, src_webhooks_configs)

        return HttpResponse(json.dumps(src_cluster_info), content_type="application/json")
    except Exception as e:
        log.error("Failed to clone cluster env_name: %s, stage_name: %s" % (src_name, src_stage))
        log.error(traceback.format_exc())
        return HttpResponse(e, status=500, content_type="application/json")
Ejemplo n.º 13
0
def clone_cluster(request, src_name, src_stage):
    try:
        params = request.POST
        dest_name = params.get('new_environment', src_name)
        dest_stage = params.get('new_stage', src_stage + '_clone')

        src_cluster_name = '{}-{}'.format(src_name, src_stage)
        dest_cluster_name = '{}-{}'.format(dest_name, dest_stage)

        ##0. teletraan service get src env buildName
        src_env = environs_helper.get_env_by_stage(request, src_name, src_stage)
        build_name = src_env.get('buildName', None)

        ##1. teletraan service create a new env
        dest_env = environs_helper.create_env(request, {
            'envName': dest_name,
            'stageName': dest_stage,
            'buildName': build_name
        })
        log.info('clone_cluster, created a new env %s' % dest_env)

        ##2. rodimus service get src_cluster config
        src_cluster_info = clusters_helper.get_cluster(request, src_cluster_name)
        log.info('clone_cluster, src cluster info %s' % src_cluster_info)
        configs = src_cluster_info.get('configs')
        if configs:
            cmp_group = configs.get('cmp_group')
            if cmp_group:
                cmp_groups_set = set(cmp_group.split(','))
                cmp_groups_set.remove(src_cluster_name)
                cmp_groups_set.remove('CMP')
                cmp_groups_set.add(dest_cluster_name)
                # CMP needs to be the first in the list
                configs['cmp_group'] = ','.join(['CMP'] + list(cmp_groups_set))
                src_cluster_info['configs'] = configs

        ##3. rodimus service post create cluster
        src_cluster_info['clusterName'] = dest_cluster_name
        src_cluster_info['capacity'] = 0
        log.info('clone_cluster, request clone cluster info %s' % src_cluster_info)
        dest_cluster_info = clusters_helper.create_cluster(request, dest_cluster_name, src_cluster_info)
        log.info('clone_cluster, cloned cluster info %s' % dest_cluster_info)

        ##4. teletraan service update_env_basic_config
        environs_helper.update_env_basic_config(request, dest_name, dest_stage,
                                                data={"clusterName": dest_cluster_name}
                                                )
        ##5. teletraan service set up env and group relationship
        environs_helper.update_env_capacity(request, dest_name, dest_stage, capacity_type="GROUP",
                                            data=[dest_cluster_name])

        ##6. get src script_config
        src_script_configs = environs_helper.get_env_script_config(request, src_name, src_stage)
        src_agent_configs = environs_helper.get_env_agent_config(request, src_name, src_stage)
        src_alarms_configs = environs_helper.get_env_alarms_config(request, src_name, src_stage)
        src_metrics_configs = environs_helper.get_env_metrics_config(request, src_name, src_stage)
        src_webhooks_configs = environs_helper.get_env_hooks_config(request, src_name, src_stage)

        ##8. clone all the extra configs
        if src_agent_configs:
            environs_helper.update_env_agent_config(request, dest_name, dest_stage, src_agent_configs)
        if src_script_configs:
            environs_helper.update_env_script_config(request, dest_name, dest_stage, src_script_configs)
        if src_alarms_configs:
            environs_helper.update_env_alarms_config(request, dest_name, dest_stage, src_alarms_configs)
        if src_metrics_configs:
            environs_helper.update_env_metrics_config(request, dest_name, dest_stage, src_metrics_configs)
        if src_webhooks_configs:
            environs_helper.update_env_hooks_config(request, dest_name, dest_stage, src_webhooks_configs)

        return HttpResponse(json.dumps(src_cluster_info), content_type="application/json")
    except NotAuthorizedException as e:
        log.error("Have an NotAuthorizedException error {}".format(e))
        return HttpResponse(e, status=403, content_type="application/json")
    except Exception as e:
        log.error("Failed to clone cluster env_name: %s, stage_name: %s" % (src_name, src_stage))
        log.error(traceback.format_exc())
        return HttpResponse(e, status=500, content_type="application/json")