func initialize()

in cmd/resource/action.go [31:134]


func initialize(session *session.Session, currentModel *Model, action Action) handler.ProgressEvent {
	vpc := false
	var err error
	client, err := NewClients(currentModel.ClusterID, currentModel.KubeConfig, currentModel.Namespace, session, currentModel.RoleArn, nil, currentModel.VPCConfiguration)
	if err != nil {
		return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
	}
	if IsZero(currentModel.VPCConfiguration) && currentModel.ClusterID != nil {
		currentModel.VPCConfiguration, err = getVpcConfig(client.AWSClients.EKSClient(nil, nil), client.AWSClients.EC2Client(nil, nil), currentModel)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
		}
		// generate lambda resource when auto detected vpc configs
		if !IsZero(currentModel.VPCConfiguration) {
			client.LambdaResource = newLambdaResource(client.AWSClients.STSClient(nil, nil), currentModel.ClusterID, currentModel.KubeConfig, currentModel.VPCConfiguration)
		}
	}
	e := &Event{}
	e.Inputs = new(Inputs)
	e.Inputs.Config = new(Config)
	e.Action = action
	e.Model = currentModel
	e.Inputs.ChartDetails, err = client.getChartDetails(currentModel)
	if err != nil {
		return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
	}
	e.Inputs.Config.Name = getReleaseName(currentModel.Name, e.Inputs.ChartDetails.ChartName)
	currentModel.Name = e.Inputs.Config.Name
	e.Inputs.Config.Namespace = getReleaseNameSpace(currentModel.Namespace)
	if currentModel.ID == nil {
		currentModel.ID, err = generateID(currentModel, *e.Inputs.Config.Name, aws.StringValue(session.Config.Region), *e.Inputs.Config.Namespace)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
		}
		return makeEvent(currentModel, InitStage, nil)
	}
	if !IsZero(currentModel.VPCConfiguration) {
		vpc = true
		e.Kubeconfig, err = getLocalKubeConfig()
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeKubeException, err.Error()))
		}
		u, err := client.initializeLambda(client.LambdaResource)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeLambdaException, err.Error()))
		}
		if !u {
			return makeEvent(currentModel, LambdaStabilize, nil)
		}
	}
	switch e.Action {
	case InstallReleaseAction:
		e.Inputs.ValueOpts, err = client.processValues(currentModel)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
		}
		data, err := DecodeID(currentModel.ID)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
		}
		currentModel.Name = data.Name
		e.Model = currentModel
		err = client.helmInstallWrapper(e, client.LambdaResource.functionName, vpc)
		if err != nil && !strings.Contains(err.Error(), ReleaseAlreadyExistsMsg) {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeHelmActionException, err.Error()))
		}
		return makeEvent(currentModel, ReleaseStabilize, nil)
	case UpdateReleaseAction:
		e.Inputs.ValueOpts, err = client.processValues(currentModel)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
		}
		data, err := DecodeID(currentModel.ID)
		if err != nil {
			return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, err.Error()))
		}
		e.Action = UpdateReleaseAction
		err = client.helmUpgradeWrapper(data.Name, e, client.LambdaResource.functionName, vpc)
		if err != nil {
			re := regexp.MustCompile(ErrCodeNotFound)
			if re.MatchString(err.Error()) {
				return makeEvent(nil, NoStage, NewError(ErrCodeNotFound, err.Error()))
			}
			return makeEvent(currentModel, NoStage, NewError(ErrCodeHelmActionException, err.Error()))
		}
		currentModel.Name = data.Name
		return makeEvent(currentModel, ReleaseStabilize, nil)
	case UninstallReleaseAction:
		data, err := DecodeID(currentModel.ID)
		if err != nil {
			return makeEvent(nil, NoStage, NewError(ErrCodeHelmActionException, err.Error()))
		}
		err = client.helmDeleteWrapper(data.Name, e, client.LambdaResource.functionName, vpc)
		if err != nil {
			re := regexp.MustCompile(ErrCodeNotFound)
			if re.MatchString(err.Error()) {
				return makeEvent(nil, NoStage, NewError(ErrCodeNotFound, err.Error()))
			}
			return makeEvent(nil, NoStage, NewError(ErrCodeHelmActionException, err.Error()))
		}
		return client.lambdaDestroy(currentModel)
	}
	return makeEvent(currentModel, NoStage, NewError(ErrCodeInvalidException, fmt.Sprintf("unhandled stage %s", action)))
}