func()

in packages/cli/internal/pkg/cli/account_deactivate.go [66:106]


func (o *accountDeactivateOpts) Execute() error {
	stackDeletionTrackers := make(map[string]chan cfn.DeletionResult)
	bootstrapStackName := awsresources.RenderBootstrapStackName()
	var bootstrapStackId string
	for _, stack := range o.stacks {
		if stack.Name == bootstrapStackName {
			bootstrapStackId = stack.Id
		} else {
			log.Debug().Msgf("Deleting stack '%s'", stack.Name)
			tracker, err := o.cfnClient.DeleteStack(stack.Id)
			if err != nil {
				return err
			}
			stackDeletionTrackers[stack.Name] = tracker
		}
	}

	for stackName, tracker := range stackDeletionTrackers {
		deletionResult := <-tracker
		if deletionResult.Error != nil {
			return fmt.Errorf("failed to delete stack '%s: %w", stackName, deletionResult.Error)
		}
		log.Debug().Msgf("Stack '%s' has been successfully deleted!", stackName)
	}

	// delete last, the bootstrap stack owns the cfn-exec role cloudformation assumes to delete other stack resources
	if bootstrapStackId != "" {
		log.Debug().Msgf("Deleting stack '%s'", bootstrapStackName)
		tracker, err := o.cfnClient.DeleteStack(bootstrapStackId)
		if err != nil {
			return err
		}
		deletionResult := <-tracker
		if deletionResult.Error != nil {
			return fmt.Errorf("failed to delete stack '%s: %w", bootstrapStackName, deletionResult.Error)
		}
		log.Debug().Msgf("Stack '%s' has been successfully deleted!", bootstrapStackName)
	}

	return nil
}