def promote(request, name, stage, deploy_id): envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) env_wrappers = [] for temp_env in envs: env_wrapper = {} env_wrapper["env"] = temp_env env_wrapper["env_promote"] = environs_helper.get_env_promotes_config( request, temp_env['envName'], temp_env['stageName']) env_wrappers.append(env_wrapper) deploy = deploys_helper.get(request, deploy_id) build = builds_helper.get_build(request, deploy['buildId']) html = render_to_string( "environs/env_promote.html", { "stages": stages, "envs": envs, "env": env, "env_wrappers": env_wrappers, "deploy": deploy, "build": build, "csrf_token": get_token(request), }) return HttpResponse(html)
def promote(request, name, stage, deploy_id): envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) env_wrappers = [] for temp_env in envs: env_wrapper = {} env_wrapper["env"] = temp_env env_wrapper["env_promote"] = environs_helper.get_env_promotes_config(request, temp_env['envName'], temp_env['stageName']) env_wrappers.append(env_wrapper) deploy = deploys_helper.get(request, deploy_id) build = builds_helper.get_build(request, deploy['buildId']) html = render_to_string("environs/env_promote.html", { "stages": stages, "envs": envs, "env": env, "env_wrappers": env_wrappers, "deploy": deploy, "build": build, "csrf_token": get_token(request), }) return HttpResponse(html)
def get(self, request, name, stage): envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) env_promote = environs_helper.get_env_promotes_config( request, name, stage) stage_names = ['BUILD'] for stage_name in stages: if stage_name != env['stageName']: stage_names.append(stage_name) if request.is_ajax(): # return data for ajax calls html = render_to_string( 'configs/promote_config.tmpl', { "env": env, "stage_names": stage_names, "env_promote": env_promote, "csrf_token": get_token(request), }) return HttpResponse(json.dumps({'html': html}), content_type="application/json") # otherwise, return a page return render( request, 'configs/promote_config.html', { "env": env, "stages": stages, "stage_names": stage_names, "env_promote": env_promote, })
def clone_from_stage_name(request, env_name, stage_name, from_env_name, from_stage_name, description): from_stage = environs_helper.get_env_by_stage(request, from_env_name, from_stage_name) agent_configs = environs_helper.get_env_agent_config( request, from_env_name, from_stage_name) script_configs = environs_helper.get_env_script_config( request, from_env_name, from_stage_name) alarms_configs = environs_helper.get_env_alarms_config( request, from_env_name, from_stage_name) metrics_configs = environs_helper.get_env_metrics_config( request, from_env_name, from_stage_name) webhooks_configs = environs_helper.get_env_hooks_config( request, from_env_name, from_stage_name) promotes_configs = environs_helper.get_env_promotes_config( request, from_env_name, from_stage_name) new_data = {} new_data['envName'] = env_name new_data['stageName'] = stage_name new_data['description'] = description new_data['buildName'] = from_stage['buildName'] new_data['branch'] = from_stage['branch'] new_data['chatroom'] = from_stage['chatroom'] new_data['maxParallel'] = from_stage['maxParallel'] new_data['priority'] = from_stage['priority'] new_data['stuckThreshold'] = from_stage['stuckThreshold'] new_data['successThreshold'] = from_stage['successThreshold'] new_data['acceptanceType'] = from_stage['acceptanceType'] new_data['emailRecipients'] = from_stage['emailRecipients'] new_data['notifyAuthors'] = from_stage['notifyAuthors'] new_data['watchRecipients'] = from_stage['watchRecipients'] new_data['maxDeployNum'] = from_stage['maxDeployNum'] new_data['maxDeployDay'] = from_stage['maxDeployDay'] new_data['overridePolicy'] = from_stage['overridePolicy'] new_stage = environs_helper.create_env(request, new_data) # now clone all the extra configs if agent_configs: environs_helper.update_env_agent_config(request, env_name, stage_name, agent_configs) if script_configs: environs_helper.update_env_script_config(request, env_name, stage_name, script_configs) if alarms_configs: environs_helper.update_env_alarms_config(request, env_name, stage_name, alarms_configs) if metrics_configs: environs_helper.update_env_metrics_config(request, env_name, stage_name, metrics_configs) if webhooks_configs: environs_helper.update_env_hooks_config(request, env_name, stage_name, webhooks_configs) if promotes_configs: environs_helper.update_env_promotes_config(request, env_name, stage_name, promotes_configs) return new_stage
def get(self, request, name, stage): envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) stage_names = ['BUILD'] for stage_name in stages: if stage_name != env['stageName']: stage_names.append(stage_name) if request.is_ajax(): # return data for ajax calls html = render_to_string('configs/promote_config.tmpl', { "env": env, "stage_names": stage_names, "env_promote": env_promote, "csrf_token": get_token(request), }) return HttpResponse(json.dumps({'html': html}), content_type="application/json") # otherwise, return a page return render(request, 'configs/promote_config.html', { "env": env, "stages": stages, "stage_names": stage_names, "env_promote": env_promote, })
def get(self, request, name, stage=None): envs = environs_helper.get_all_env_stages(request, name) if len(envs) == 0: return redirect('/') stages, env = common.get_all_stages(envs, stage) env_promote = environs_helper.get_env_promotes_config(request, name, env['stageName']) stage = env['stageName'] username = request.teletraan_user_id.name request_feedback = check_feedback_eligible(request, username) groups = environs_helper.get_env_capacity(request, name, stage, capacity_type="GROUP") metrics = environs_helper.get_env_metrics_config(request, name, stage) alarms = environs_helper.get_env_alarms_config(request, name, stage) if not env['deployId']: capacity_hosts = deploys_helper.get_missing_hosts(request, name, stage) response = render(request, 'environs/env_landing.html', { "env": env, "env_promote": env_promote, "stages": stages, "metrics": metrics, "alarms": alarms, "request_feedback": request_feedback, "groups": groups, "capacity_hosts": capacity_hosts, "pinterest": IS_PINTEREST, }) showMode = 'complete' sortByStatus = 'true' else: # Get deploy progress progress = deploys_helper.update_progress(request, name, stage) showMode = _fetch_param_with_cookie( request, 'showMode', MODE_COOKIE_NAME, 'complete') sortByStatus = _fetch_param_with_cookie( request, 'sortByStatus', STATUS_COOKIE_NAME, 'true') report = agent_report.gen_report(request, env, progress, sortByStatus=sortByStatus) report.showMode = showMode report.sortByStatus = sortByStatus response = render(request, 'environs/env_landing.html', { "env": env, "env_promote": env_promote, "stages": stages, "report": report, "has_deploy": True, "metrics": metrics, "alarms": alarms, "request_feedback": request_feedback, "groups": groups, "pinterest": IS_PINTEREST, }) # save preferences response.set_cookie(ENV_COOKIE_NAME, genEnvCookie(request, name)) response.set_cookie(MODE_COOKIE_NAME, showMode) response.set_cookie(STATUS_COOKIE_NAME, sortByStatus) return response
def warn_for_deploy(request, name, stage, buildId): """ Returns a warning message if: 1. The build has been tagged as build build 2. a build doesn't have a successful deploy on the preceding stage. TODO: we would have call backend twice since the getAllDeploys call does not support filtering on multiple states; Also, getAllDeploys return all deploys with commits after the specific commit, it would be good if there is options to return the exact matched deploys. """ build_info = builds_helper.get_build_and_tag(request, buildId) build = build_info["build"] tag = build_info.get("tag") if tag is not None and tag["value"] == tags_helper.TagValue.BAD_BUILD: html = render_to_string('warn_deploy_bad_build.tmpl', { 'tag': tag, }) return HttpResponse(html) env_promote = environs_helper.get_env_promotes_config(request, name, stage) pred_stage = env_promote.get('predStageName') if not pred_stage or pred_stage == BUILD_STAGE: return HttpResponse("") pred_env = environs_helper.get_env_by_stage(request, name, pred_stage) filter = {} filter['envId'] = [pred_env['id']] filter['commit'] = build['commit'] filter['repo'] = build['repo'] filter['oldestFirst'] = True filter['deployState'] = "SUCCEEDING" filter['pageIndex'] = 1 filter['pageSize'] = 1 result = deploys_helper.get_all(request, **filter) succeeding_deploys = result['deploys'] if succeeding_deploys: return HttpResponse("") filter['deployState'] = "SUCCEEDED" result = deploys_helper.get_all(request, **filter) succeeded_deploys = result['deploys'] if succeeded_deploys: return HttpResponse("") html = render_to_string('warn_no_success_deploy_in_pred.tmpl', { 'envName': name, 'predStageName': pred_stage, }) return HttpResponse(html)
def clone_from_stage_name(request, env_name, stage_name, from_env_name, from_stage_name, description, external_id): from_stage = environs_helper.get_env_by_stage(request, from_env_name, from_stage_name) agent_configs = environs_helper.get_env_agent_config(request, from_env_name, from_stage_name) script_configs = environs_helper.get_env_script_config(request, from_env_name, from_stage_name) alarms_configs = environs_helper.get_env_alarms_config(request, from_env_name, from_stage_name) metrics_configs = environs_helper.get_env_metrics_config(request, from_env_name, from_stage_name) webhooks_configs = environs_helper.get_env_hooks_config(request, from_env_name, from_stage_name) promotes_configs = environs_helper.get_env_promotes_config(request, from_env_name, from_stage_name) new_data = {} new_data['envName'] = env_name new_data['stageName'] = stage_name new_data['description'] = description new_data['buildName'] = from_stage['buildName'] new_data['branch'] = from_stage['branch'] new_data['chatroom'] = from_stage['chatroom'] new_data['maxParallel'] = from_stage['maxParallel'] new_data['priority'] = from_stage['priority'] new_data['stuckThreshold'] = from_stage['stuckThreshold'] new_data['successThreshold'] = from_stage['successThreshold'] new_data['acceptanceType'] = from_stage['acceptanceType'] new_data['emailRecipients'] = from_stage['emailRecipients'] new_data['notifyAuthors'] = from_stage['notifyAuthors'] new_data['watchRecipients'] = from_stage['watchRecipients'] new_data['maxDeployNum'] = from_stage['maxDeployNum'] new_data['maxDeployDay'] = from_stage['maxDeployDay'] new_data['overridePolicy'] = from_stage['overridePolicy'] new_data['externalId'] = external_id new_stage = environs_helper.create_env(request, new_data) # now clone all the extra configs if agent_configs: environs_helper.update_env_agent_config(request, env_name, stage_name, agent_configs) if script_configs: environs_helper.update_env_script_config(request, env_name, stage_name, script_configs) if alarms_configs: environs_helper.update_env_alarms_config(request, env_name, stage_name, alarms_configs) if metrics_configs: environs_helper.update_env_metrics_config(request, env_name, stage_name, metrics_configs) if webhooks_configs: environs_helper.update_env_hooks_config(request, env_name, stage_name, webhooks_configs) if promotes_configs: environs_helper.update_env_promotes_config(request, env_name, stage_name, promotes_configs) return new_stage
def get(self, request, name, stage): env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) current_build = None if 'deployId' in env and env['deployId']: deploy = deploys_helper.get(request, env['deployId']) current_build = builds_helper.get_build(request, deploy['buildId']) return render(request, 'deploys/new_deploy.html', { "env": env, "env_promote": env_promote, "buildName": env['buildName'], "current_build": current_build, "pageIndex": 1, "pageSize": common.DEFAULT_BUILD_SIZE, })
def get(self, request, name, stage): env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config( request, name, stage) current_build = None if 'deployId' in env and env['deployId']: deploy = deploys_helper.get(request, env['deployId']) current_build = builds_helper.get_build(request, deploy['buildId']) return render( request, 'deploys/new_deploy.html', { "env": env, "env_promote": env_promote, "buildName": env['buildName'], "current_build": current_build, "pageIndex": 1, "pageSize": common.DEFAULT_BUILD_SIZE, })
def warn_no_succ_deploy_in_pred(request, name, stage, buildId): """ Returns a warning message if a build doesn't have a successful deploy on the preceding stage. TODO: we would have call backend twice since the getAllDeploys call does not support filtering on multiple states; Also, getAllDeploys return all deploys with commits after the specific commit, it would be good if there is options to return the exact matched deploys. """ env_promote = environs_helper.get_env_promotes_config(request, name, stage) pred_stage = env_promote.get('predStageName') if not pred_stage or pred_stage == BUILD_STAGE: return HttpResponse("") pred_env = environs_helper.get_env_by_stage(request, name, pred_stage) build = builds_helper.get_build(request, buildId) filter = {} filter['envId'] = [pred_env['id']] filter['commit'] = build['commit'] filter['repo'] = build['repo'] filter['oldestFirst'] = True filter['deployState'] = "SUCCEEDING" filter['pageIndex'] = 1 filter['pageSize'] = 1 result = deploys_helper.get_all(request, **filter) succeeding_deploys = result['deploys'] if succeeding_deploys: return HttpResponse("") filter['deployState'] = "SUCCEEDED" result = deploys_helper.get_all(request, **filter) succeeded_deploys = result['deploys'] if succeeded_deploys: return HttpResponse("") html = render_to_string('warn_no_success_deploy_in_pred.tmpl', { 'envName': name, 'predStageName': pred_stage, }) return HttpResponse(html)
def get_pred_deploys(request, name, stage): index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) show_lock = False predStage = env_promote.get('predStage') if env_promote['type'] != "MANUAL" and predStage: show_lock = True current_startDate = 0 if not predStage or predStage == "BUILD": deploys = [] else: pred_env = environs_helper.get_env_by_stage(request, name, predStage) result = deploys_helper.get_all(request, envId=[pred_env['id']], pageIndex=index, pageSize=size) deploys = result["deploys"] if env.get('deployId'): deploy = deploys_helper.get(request, env['deployId']) build = builds_helper.get_build(request, deploy['buildId']) current_startDate = build['publishDate'] deploy_wrappers = [] for deploy in deploys: build = builds_helper.get_build(request, deploy['buildId']) if build['publishDate'] > current_startDate: deploy_wrapper = {} deploy_wrapper['deploy'] = deploy deploy_wrapper['build'] = build deploy_wrappers.append(deploy_wrapper) html = render_to_string( 'deploys/simple_pred_deploys.tmpl', { "deploy_wrappers": deploy_wrappers, "envName": name, "stageName": predStage, "show_lock": show_lock, "current_startDate": current_startDate, }) return HttpResponse(html)
def get_builds(request, name, stage): env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) show_lock = False if env_promote['type'] == 'AUTO' and env_promote['predStage'] and \ env_promote['predStage'] == environs_helper.BUILD_STAGE: show_lock = True if 'buildName' not in env and not env['buildName']: html = render_to_string('builds/simple_builds.tmpl', { "builds": [], "env": env, "show_lock": show_lock, }) return HttpResponse(html) current_publish_date = 0 if 'deployId' in env and env['deployId']: deploy = deploys_helper.get(request, env['deployId']) build = builds_helper.get_build(request, deploy['buildId']) current_publish_date = build['publishDate'] # return only the new builds index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', common.DEFAULT_BUILD_SIZE)) builds = builds_helper.get_builds(request, name=env['buildName'], pageIndex=index, pageSize=size) new_builds = [] for build in builds: if build['publishDate'] > current_publish_date: new_builds.append(build) html = render_to_string( 'builds/simple_builds.tmpl', { "builds": new_builds, "current_publish_date": current_publish_date, "env": env, "show_lock": show_lock, }) return HttpResponse(html)
def get_pred_deploys(request, name, stage): index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) show_lock = False predStage = env_promote.get('predStage') if env_promote['type'] != "MANUAL" and predStage: show_lock = True current_startDate = 0 if not predStage or predStage == "BUILD": deploys = [] else: pred_env = environs_helper.get_env_by_stage(request, name, predStage) result = deploys_helper.get_all(request, envId=[pred_env['id']], pageIndex=index, pageSize=size) deploys = result["deploys"] if env.get('deployId'): deploy = deploys_helper.get(request, env['deployId']) build = builds_helper.get_build(request, deploy['buildId']) current_startDate = build['publishDate'] deploy_wrappers = [] for deploy in deploys: build = builds_helper.get_build(request, deploy['buildId']) if build['publishDate'] > current_startDate: deploy_wrapper = {} deploy_wrapper['deploy'] = deploy deploy_wrapper['build'] = build deploy_wrappers.append(deploy_wrapper) html = render_to_string('deploys/simple_pred_deploys.tmpl', { "deploy_wrappers": deploy_wrappers, "envName": name, "stageName": predStage, "show_lock": show_lock, "current_startDate": current_startDate, }) return HttpResponse(html)
def get_builds(request, name, stage): env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) show_lock = False if env_promote['type'] == 'AUTO' and env_promote['predStage'] and \ env_promote['predStage'] == environs_helper.BUILD_STAGE: show_lock = True if 'buildName' not in env and not env['buildName']: html = render_to_string('builds/simple_builds.tmpl', { "builds": [], "env": env, "show_lock": show_lock, }) return HttpResponse(html) current_publish_date = 0 if 'deployId' in env and env['deployId']: deploy = deploys_helper.get(request, env['deployId']) build = builds_helper.get_build(request, deploy['buildId']) current_publish_date = build['publishDate'] # return only the new builds index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', common.DEFAULT_BUILD_SIZE)) builds = builds_helper.get_builds(request, name=env['buildName'], pageIndex=index, pageSize=size) new_builds = [] for build in builds: if build['publishDate'] > current_publish_date: new_builds.append(build) html = render_to_string('builds/simple_builds.tmpl', { "builds": new_builds, "current_publish_date": current_publish_date, "env": env, "show_lock": show_lock, }) return HttpResponse(html)
def get(self, request, name, stage=None): envs = environs_helper.get_all_env_stages(request, name) if len(envs) == 0: return redirect('/') stages, env = common.get_all_stages(envs, stage) env_promote = environs_helper.get_env_promotes_config( request, name, env['stageName']) stage = env['stageName'] username = request.teletraan_user_id.name request_feedback = check_feedback_eligible(request, username) groups = environs_helper.get_env_capacity(request, name, stage, capacity_type="GROUP") metrics = environs_helper.get_env_metrics_config(request, name, stage) alarms = environs_helper.get_env_alarms_config(request, name, stage) basic_cluster_info = clusters_helper.get_cluster(request, name, stage) if not env['deployId']: capacity_hosts = deploys_helper.get_missing_hosts( request, name, stage) provisioning_hosts = environ_hosts_helper.get_hosts( request, name, stage) response = render( request, 'environs/env_landing.html', { "env": env, "env_promote": env_promote, "stages": stages, "metrics": metrics, "alarms": alarms, "request_feedback": request_feedback, "groups": groups, "capacity_hosts": capacity_hosts, "provisioning_hosts": provisioning_hosts, "basic_cluster_info": basic_cluster_info, "pinterest": IS_PINTEREST, }) showMode = 'complete' sortByStatus = 'true' else: # Get deploy progress progress = deploys_helper.update_progress(request, name, stage) showMode = _fetch_param_with_cookie(request, 'showMode', MODE_COOKIE_NAME, 'complete') sortByStatus = _fetch_param_with_cookie(request, 'sortByStatus', STATUS_COOKIE_NAME, 'true') report = agent_report.gen_report(request, env, progress, sortByStatus=sortByStatus) report.showMode = showMode report.sortByStatus = sortByStatus response = render( request, 'environs/env_landing.html', { "env": env, "env_promote": env_promote, "stages": stages, "report": report, "has_deploy": True, "metrics": metrics, "alarms": alarms, "request_feedback": request_feedback, "groups": groups, "basic_cluster_info": basic_cluster_info, "pinterest": IS_PINTEREST, }) # save preferences response.set_cookie(ENV_COOKIE_NAME, genEnvCookie(request, name)) response.set_cookie(MODE_COOKIE_NAME, showMode) response.set_cookie(STATUS_COOKIE_NAME, sortByStatus) return response
def get(self, request, name, stage=None): envs = environs_helper.get_all_env_stages(request, name) if len(envs) == 0: return redirect('/') stages, env = common.get_all_stages(envs, stage) env_promote = environs_helper.get_env_promotes_config(request, name, env['stageName']) stage = env['stageName'] username = request.teletraan_user_id.name request_feedback = check_feedback_eligible(request, username) groups = environs_helper.get_env_capacity(request, name, stage, capacity_type="GROUP") metrics = environs_helper.get_env_metrics_config(request, name, stage) alarms = environs_helper.get_env_alarms_config(request, name, stage) basic_cluster_info = None if IS_PINTEREST: basic_cluster_info = clusters_helper.get_cluster(request, name, stage) if not env['deployId']: capacity_hosts = deploys_helper.get_missing_hosts(request, name, stage) provisioning_hosts = environ_hosts_helper.get_hosts(request, name, stage) if IS_PINTEREST: basic_cluster_info = clusters_helper.get_cluster(request, env['envName'], env['stageName']) if basic_cluster_info and basic_cluster_info.get('capacity'): hosts_in_cluster = clusters_helper.get_host_names(request, env['envName'], env['stageName']) num_to_fake = basic_cluster_info.get('capacity') - len(hosts_in_cluster) for i in range(num_to_fake): faked_host = {} faked_host['hostName'] = 'UNKNOWN' faked_host['hostId'] = 'UNKNOWN' faked_host['state'] = 'PROVISIONED' provisioning_hosts.append(faked_host) response = render(request, 'environs/env_landing.html', { "env": env, "env_promote": env_promote, "stages": stages, "metrics": metrics, "alarms": alarms, "request_feedback": request_feedback, "groups": groups, "capacity_hosts": capacity_hosts, "provisioning_hosts": provisioning_hosts, "basic_cluster_info": basic_cluster_info, "pinterest": IS_PINTEREST, }) showMode = 'complete' sortByStatus = 'true' else: # Get deploy progress progress = deploys_helper.update_progress(request, name, stage) showMode = _fetch_param_with_cookie( request, 'showMode', MODE_COOKIE_NAME, 'complete') sortByStatus = _fetch_param_with_cookie( request, 'sortByStatus', STATUS_COOKIE_NAME, 'true') report = agent_report.gen_report(request, env, progress, sortByStatus=sortByStatus) report.showMode = showMode report.sortByStatus = sortByStatus response = render(request, 'environs/env_landing.html', { "env": env, "env_promote": env_promote, "stages": stages, "report": report, "has_deploy": True, "metrics": metrics, "alarms": alarms, "request_feedback": request_feedback, "groups": groups, "basic_cluster_info": basic_cluster_info, "pinterest": IS_PINTEREST, }) # save preferences response.set_cookie(ENV_COOKIE_NAME, genEnvCookie(request, name)) response.set_cookie(MODE_COOKIE_NAME, showMode) response.set_cookie(STATUS_COOKIE_NAME, sortByStatus) return response