in cmd/resource/action.go [136:197]
func checkReleaseStatus(session *session.Session, currentModel *Model, successStage Stage) 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()))
}
}
e := &Event{}
e.Model = currentModel
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)
}
}
e.Action = CheckReleaseAction
s, err := client.helmStatusWrapper(currentModel.Name, e, client.LambdaResource.functionName, vpc)
if err != nil {
return makeEvent(currentModel, NoStage, NewError(ErrCodeHelmActionException, err.Error()))
}
switch s.Status {
case release.StatusDeployed:
e.ReleaseData = &ReleaseData{
Name: *currentModel.Name,
Namespace: s.Namespace,
Chart: s.Chart,
Manifest: s.Manifest,
}
e.Action = GetPendingAction
pending, err := client.kubePendingWrapper(e, client.LambdaResource.functionName, vpc)
if err != nil {
return makeEvent(currentModel, NoStage, NewError(ErrCodeKubeException, err.Error()))
}
if pending {
log.Printf("Release %s have pending resources", e.ReleaseData.Name)
return makeEvent(currentModel, ReleaseStabilize, nil)
}
log.Printf("Release %s have no pending resources.", e.ReleaseData.Name)
return makeEvent(currentModel, successStage, nil)
case release.StatusPendingInstall, release.StatusPendingUpgrade:
pushLastKnownError(fmt.Sprintf("Release %s/%s in %s state", s.Namespace, *currentModel.Name, s.Status))
return makeEvent(currentModel, ReleaseStabilize, nil)
default:
pushLastKnownError(fmt.Sprintf("Release %s/%s in %s state", s.Namespace, *currentModel.Name, s.Status))
return makeEvent(currentModel, NoStage, NewError(ErrCodeHelmActionException, "release failed"))
}
}