func()

in app/cluster/edit.go [25:111]


func (a *App) editGet(ctx *gin.Context) (router.Response, error) {
	userCtx := router.ContextWithUserAccessToken(ctx)

	mrExists, err := registry.ProjectHasOpenMR(ctx, a.ClusterRepo, a.Gerrit)
	if err != nil {
		return nil, errors.Wrap(err, "unable to check project MR exists")
	}

	if mrExists {
		return router.MakeHTMLResponse(200, "registry/edit-mr-exists.html", gin.H{
			"page": "cluster",
		}), nil
	}

	k8sService, err := a.Services.K8S.ServiceForContext(userCtx)
	if err != nil {
		return nil, errors.Wrap(err, "unable to init service for user context")
	}

	cbService, err := a.Services.Codebase.ServiceForContext(userCtx)
	if err != nil {
		return nil, errors.Wrap(err, "unable to init cb service for user")
	}

	canUpdateCluster, err := k8sService.CanI("v2.edp.epam.com", "codebases", "update", a.Config.CodebaseName)
	if err != nil {
		return nil, errors.Wrap(err, "unable to check access to cluster codebase")
	}
	if !canUpdateCluster {
		return nil, errors.Wrap(err, "access denied")
	}

	cb, err := cbService.Get(a.Config.CodebaseName)
	if err != nil {
		return nil, errors.Wrap(err, "unable to get registry")
	}

	hasUpdate, branches, _, err := registry.HasUpdate(userCtx, a.Services.Gerrit, cb, registry.MRTargetClusterUpdate)
	if err != nil {
		return nil, errors.Wrap(err, "unable to check for updates")
	}

	hwINITemplateContent, err := registry.GetINITemplateContent(a.Config.HardwareINITemplatePath)
	if err != nil {
		return nil, errors.Wrap(err, "unable to get ini template data")
	}

	values, err := a.getValuesDict(ctx)
	if err != nil {
		return nil, errors.Wrap(err, "unable to load values")
	}

	valuesJs, err := json.Marshal(values)
	if err != nil {
		return nil, fmt.Errorf("unable to encode values to json, %w", err)
	}

	dnsManual, err := registry.GetManualURL(ctx, a.EDPComponent, a.DDMManualEDPComponent, a.RegistryDNSManualPath)
	if err != nil {
		return nil, fmt.Errorf("unable to get manual, %w", err)
	}

	rspParams := gin.H{
		"dnsManual":      dnsManual,
		"page":           "cluster",
		"updateBranches": branches,
		"hasUpdate":      hasUpdate,
		"values":         string(valuesJs),
	}

	for _, f := range a.editDataLoaders() {
		if err := f(ctx, values, rspParams); err != nil {
			return nil, errors.Wrap(err, "unable to load edit data")
		}
	}

	templateArgs, err := json.Marshal(rspParams)
	if err != nil {
		return nil, errors.Wrap(err, "unable to encode template arguments")
	}

	return router.MakeHTMLResponse(200, "cluster/edit.html", gin.H{
		"page":                 "cluster",
		"templateArgs":         string(templateArgs),
		"hwINITemplateContent": hwINITemplateContent,
	}), nil
}