Pārlūkot izejas kodu

fix stack revision status indicator

Mohammed Nafees 3 gadi atpakaļ
vecāks
revīzija
5c9cfec963

+ 49 - 51
api/server/handlers/stack/remove_application.go

@@ -56,77 +56,75 @@ func (p *StackRemoveApplicationHandler) ServeHTTP(w http.ResponseWriter, r *http
 		return
 	}
 
-	helmAgent, err := p.GetHelmAgent(r, cluster, namespace)
+	newSourceConfigs, err := stacks.CloneSourceConfigs(revision.SourceConfigs)
 
 	if err != nil {
 		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
 	}
 
-	resourceDeleted := false
-
-	for _, appResource := range revision.Resources {
-		if appResource.Name == appResourceName {
-			err := deleteAppResource(&deleteAppResourceOpts{
-				helmAgent: helmAgent,
-				name:      appResource.Name,
-			})
+	appResources, err := stacks.CloneAppResources(revision.Resources, revision.SourceConfigs, newSourceConfigs)
 
-			if err != nil {
-				p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-				return
-			}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
 
-			resourceDeleted = true
+	envGroups, err := stacks.CloneEnvGroups(revision.EnvGroups)
 
-			break
-		}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
 	}
 
-	if resourceDeleted {
-		newSourceConfigs, err := stacks.CloneSourceConfigs(revision.SourceConfigs)
+	var newResources []models.StackResource
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
+	for _, res := range appResources {
+		if res.Name != appResourceName {
+			newResources = append(newResources, res)
 		}
+	}
 
-		appResources, err := stacks.CloneAppResources(revision.Resources, revision.SourceConfigs, newSourceConfigs)
-
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	newRevision := &models.StackRevision{
+		StackID:        stack.ID,
+		RevisionNumber: revision.RevisionNumber + 1,
+		Status:         string(types.StackRevisionStatusDeploying),
+		SourceConfigs:  newSourceConfigs,
+		Resources:      newResources,
+		EnvGroups:      envGroups,
+	}
 
-		envGroups, err := stacks.CloneEnvGroups(revision.EnvGroups)
+	revision, err = p.Repo().Stack().AppendNewRevision(newRevision)
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
 
-		var newResources []models.StackResource
+	helmAgent, err := p.GetHelmAgent(r, cluster, namespace)
 
-		for _, res := range appResources {
-			if res.Name != appResourceName {
-				newResources = append(newResources, res)
-			}
-		}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
 
-		newRevision := &models.StackRevision{
-			StackID:        stack.ID,
-			RevisionNumber: revision.RevisionNumber + 1,
-			Status:         string(types.StackRevisionStatusDeployed),
-			SourceConfigs:  newSourceConfigs,
-			Resources:      newResources,
-			EnvGroups:      envGroups,
-		}
+	err = deleteAppResource(&deleteAppResourceOpts{
+		helmAgent: helmAgent,
+		name:      appResourceName,
+	})
+
+	if err == nil {
+		revision.Status = string(types.StackRevisionStatusDeployed)
+	} else {
+		revision.Status = string(types.StackRevisionStatusFailed)
+		revision.Reason = "RemoveAppError"
+		revision.Message = err.Error()
+	}
 
-		_, err = p.Repo().Stack().AppendNewRevision(newRevision)
+	_, err = p.Repo().Stack().UpdateStackRevision(revision)
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
 	}
 }

+ 48 - 47
api/server/handlers/stack/remove_env_group.go

@@ -56,74 +56,75 @@ func (p *StackRemoveEnvGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Re
 		return
 	}
 
-	k8sAgent, err := p.GetAgent(r, cluster, "")
+	newSourceConfigs, err := stacks.CloneSourceConfigs(revision.SourceConfigs)
 
 	if err != nil {
 		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
 	}
 
-	envGroupDeleted := false
-
-	for _, envGroup := range revision.EnvGroups {
-		if envGroup.Name == envGroupName {
-			err := envgroup.DeleteEnvGroup(k8sAgent, envGroup.Name, envGroup.Namespace)
+	appResources, err := stacks.CloneAppResources(revision.Resources, revision.SourceConfigs, newSourceConfigs)
 
-			if err != nil {
-				p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-				return
-			}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
 
-			envGroupDeleted = true
+	envGroups, err := stacks.CloneEnvGroups(revision.EnvGroups)
 
-			break
-		}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
 	}
 
-	if envGroupDeleted {
-		newSourceConfigs, err := stacks.CloneSourceConfigs(revision.SourceConfigs)
+	var newEnvGroups []models.StackEnvGroup
+	var envGroupNS string
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
+	for _, envGroup := range envGroups {
+		if envGroup.Name != envGroupName {
+			newEnvGroups = append(newEnvGroups, envGroup)
+		} else {
+			envGroupNS = envGroup.Namespace
 		}
+	}
 
-		appResources, err := stacks.CloneAppResources(revision.Resources, revision.SourceConfigs, newSourceConfigs)
+	newRevision := &models.StackRevision{
+		StackID:        stack.ID,
+		RevisionNumber: revision.RevisionNumber + 1,
+		Status:         string(types.StackRevisionStatusDeploying),
+		SourceConfigs:  newSourceConfigs,
+		Resources:      appResources,
+		EnvGroups:      newEnvGroups,
+	}
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	revision, err = p.Repo().Stack().AppendNewRevision(newRevision)
 
-		envGroups, err := stacks.CloneEnvGroups(revision.EnvGroups)
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	k8sAgent, err := p.GetAgent(r, cluster, "")
 
-		var newEnvGroups []models.StackEnvGroup
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
 
-		for _, envGroup := range envGroups {
-			if envGroup.Name != envGroupName {
-				newEnvGroups = append(newEnvGroups, envGroup)
-			}
-		}
+	err = envgroup.DeleteEnvGroup(k8sAgent, envGroupName, envGroupNS)
 
-		newRevision := &models.StackRevision{
-			StackID:        stack.ID,
-			RevisionNumber: revision.RevisionNumber + 1,
-			Status:         string(types.StackRevisionStatusDeployed),
-			SourceConfigs:  newSourceConfigs,
-			Resources:      appResources,
-			EnvGroups:      newEnvGroups,
-		}
+	if err == nil {
+		revision.Status = string(types.StackRevisionStatusDeployed)
+	} else {
+		revision.Status = string(types.StackRevisionStatusFailed)
+		revision.Reason = "RemoveEnvGroupError"
+		revision.Message = err.Error()
+	}
 
-		_, err = p.Repo().Stack().AppendNewRevision(newRevision)
+	_, err = p.Repo().Stack().UpdateStackRevision(revision)
 
-		if err != nil {
-			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
 	}
 }