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)))
}