Пример #1
0
    def get_varnish_status(self, request, env_name, deploy_stage):
        if deploy_stage == NgappDeployStep.PRE_DEPLOY:
            page = 'ngapp2/ngapp2_pre_deploy.html'
            status_file = settings.NGAPP_PRE_DEPLOY_STATUS_NODE
        elif deploy_stage == NgappDeployStep.POST_DEPLOY:
            page = 'ngapp2/ngapp2_post_deploy.html'
            status_file = settings.NGAPP_POST_DEPLOY_STATUS_NODE
        else:
            page = 'ngapp2/ngapp2_rollback.html'
            status_file = settings.NGAPP_ROLLBACK_STATUS_NODE

        recorder = Recorder(status_file)
        state, total, correct = recorder.read_varish_info()
        total = int(total)
        correct = int(correct)
        progress = correct * 100 / total
        if deploy_stage in self.ENDING_STATE and state == "DONE":
            Ngapp2DeployUtils().set_status_to_zk("SERVING_BUILD")

        return state, render(
            request, page, {
                "current_status": state,
                "correct_node": correct,
                "total_node": total,
                "progress": progress,
                "env_name": env_name
            })
Пример #2
0
    def post(self, request):
        try:
            params = request.POST
            action = params.get("action", "deploy")
            stage = params.get("current_stage")
            ngapp2_deploy_utils = Ngapp2DeployUtils()
            if action == "cancel":
                if stage == "deploy_to_canary":
                    ngapp2_deploy_utils.rollback_canary()
                elif stage == "deploy_to_prod":
                    ngapp2_deploy_utils.rollback_prod()

                ngapp2_deploy_utils.set_status_to_zk("SERVING_BUILD")
            else:
                if stage == 'pre_deploy':
                    self.start_pre_deploy(request)
                elif stage == 'post_deploy':
                    self.start_post_deploy(request)
                elif stage == 'rollback':
                    self.start_roll_back()

                ngapp2_deploy_utils.set_status_to_zk(stage)
        except:
            logger.error(traceback.format_exc())
            logger.warning(traceback.format_exc())
        finally:
            return redirect("/ngapp2/deploy/")
Пример #3
0
def update_env_priority(request, env_name):
    try:
        if env_name == NGAPP_A:
            curr_env = NGAPP_A
            prev_env = NGAPP_B
        else:
            curr_env = NGAPP_B
            prev_env = NGAPP_A

        # we only update env priority once
        if Ngapp2DeployUtils().get_finish_message_flag("prod") != "True":
            return

        curr_data = {"priority": "HIGH"}
        prev_data = {"priority": "NORMAL"}
        environs_helper.update_env_basic_config(request,
                                                curr_env,
                                                "prod",
                                                data=curr_data)
        environs_helper.update_env_basic_config(request,
                                                prev_env,
                                                "prod",
                                                data=prev_data)
    except:
        logger.error("Failed change ngapp2 deploy priority")

        # send message to the auto scaling channel
        message = "Failed to switch ngapp2 deploy priority after deploy. This may lead to health check failure. Please take actions."
        systems_helper.send_chat_message(request, "system", "autoscaling",
                                         message)
Пример #4
0
def deploy_to_canary(request, name):
    params = request.POST
    build = params.get('commit7', None)
    ngapp2_deploy_utils = Ngapp2DeployUtils()
    ngapp2_deploy_utils.deploy_to_canary(build)
    common.deploy(request, name, "canary")
    user = request.teletraan_user_id
    sendStartMessage(request, user, name, "canary", notifyAuthor=True)
    return redirect("/ngapp2/deploy/")
Пример #5
0
def promote_to_prod(request, deploy_id, build):
    params = request.POST
    description = params.get("description", None)
    ngapp2_deploy_utils = Ngapp2DeployUtils()
    ngapp2_deploy_utils.deploy_to_prod(build)
    user = request.teletraan_user_id
    env_name = ngapp2_deploy_utils.get_deploying_env_from_zk()
    deploys_helper.promote(request, env_name, "prod", deploy_id, description)
    sendStartMessage(request, user, env_name, "prod", notifyAuthor=False)
    return redirect("/ngapp2/deploy/")
Пример #6
0
    def get(self, request):
        ngapp2_deploy_utils = Ngapp2DeployUtils()
        ok_to_serve = ngapp2_deploy_utils.get_ok_to_serve()

        curr_build = ok_to_serve.get('default')
        ok_to_serve_version = ok_to_serve.get('versions')
        prev_build = ngapp2_deploy_utils.get_previous_build()

        env_stage_a = environs_helper.get_env_by_stage(request, NGAPP_A,
                                                       "prod")
        env_stage_b = environs_helper.get_env_by_stage(request, NGAPP_B,
                                                       "prod")
        deploy_a = None
        build_a = None
        deploy_b = None
        if env_stage_a.get('deployId'):
            deploy_a = deploys_helper.get(request, env_stage_a['deployId'])
            build_a = builds_helper.get_build(request, deploy_a['buildId'])
        if env_stage_b.get('deployId'):
            deploy_b = deploys_helper.get(request, env_stage_b['deployId'])

        stage = getattr(NgappDeployStep,
                        ngapp2_deploy_utils.get_status_from_zk().upper())
        if stage != NgappDeployStep.SERVING_BUILD:
            deploying_env = ngapp2_deploy_utils.get_deploying_env_from_zk()
        else:
            if build_a and build_a['commit'][:7] == curr_build[:7]:
                deploying_env = env_stage_b['envName']
            else:
                deploying_env = env_stage_a['envName']

            ngapp2_deploy_utils.set_deploying_env_to_zk(deploying_env)

        if deploying_env == env_stage_a['envName']:
            curr_env = EnvStatus(env_stage_b, deploy_b, curr_build)
            prev_env = EnvStatus(env_stage_a, deploy_a, prev_build)
        else:
            curr_env = EnvStatus(env_stage_a, deploy_a, curr_build)
            prev_env = EnvStatus(env_stage_b, deploy_b, prev_build)

        return render(
            request, 'ngapp2/ngapp2_deploy.html', {
                "prev_env": prev_env,
                "curr_env": curr_env,
                "deploy_stage": stage,
                "deploying_env": deploying_env,
                "serve_version_count": len(ok_to_serve_version)
            })
Пример #7
0
def sendStartMessage(request, user, envName, stageName, notifyAuthor):
    env = environs_helper.get_env_by_stage(request, envName, stageName)
    deploy = deploys_helper.get(request, env['deployId'])
    build = builds_helper.get_build(request, deploy['buildId'])
    branch = build['branch']
    Ngapp2DeployUtils().reset_finish_message_flag(stageName)
    message = "{}/{}: deploy of {}/{} started. See details <{}|here>.".format(
        envName, stageName, branch, build['commitShort'], get_deploy_url(envName, stageName))
    systems_helper.send_chat_message(request, user.name, get_slack_channel(), message)

    if not notifyAuthor:
        return

    author_msg = get_notify_authors_message(request, env, build)
    if author_msg and is_prod():
        systems_helper.send_chat_message(request, user.name, get_slack_channel(), author_msg)
    elif author_msg:
        logger.info("get author list message:{}".format(author_msg))
Пример #8
0
def update_env_priority(request, env_name):
    if env_name == NGAPP_A:
        curr_env = NGAPP_A
        prev_env = NGAPP_B
    else:
        curr_env = NGAPP_B
        prev_env = NGAPP_A

    # we only update env priority once
    if Ngapp2DeployUtils().get_finish_message_flag("prod") == "True":
        return
    curr_data = {"priority": "HIGH"}
    prev_data = {"priority": "NORMAL"}
    environs_helper.update_env_basic_config(request,
                                            curr_env,
                                            "prod",
                                            data=curr_data)
    environs_helper.update_env_basic_config(request,
                                            prev_env,
                                            "prod",
                                            data=prev_data)
Пример #9
0
def sendFinishMessage(request, user, envName, stageName, state):
    ngapp2DeployUtils = Ngapp2DeployUtils()

    # if we've already sent the message
    if ngapp2DeployUtils.get_finish_message_flag(stageName) == "True":
        return

    ngapp2DeployUtils.set_finish_message_flag(stageName)
    env = environs_helper.get_env_by_stage(request, envName, stageName)
    deploy = deploys_helper.get(request, env['deployId'])
    build = builds_helper.get_build(request, deploy['buildId'])
    branch = build['branch']
    commit = build['commit']
    weblink = get_deploy_url(envName, stageName)
    state = state.lower()
    if state == "succeeding" or state == "done":
        template = "{}/{}: deploy of {}/{} completed successfully. See details <{}|here>"
    else:
        template = "{}/{}: deploy of {}/{} failed. See details <{}|here>"
    message = template.format(envName, stageName, branch, commit[:7], weblink)
    systems_helper.send_chat_message(request, deploy['operator'], get_slack_channel(), message)