func()

in pkg/argocd/argoapplicationset_manager.go [150:206]


func (c *ArgoApplicationSetManager) RemoveApplicationSetGenerators(ctx context.Context, stage *cdPipeApi.Stage) error {
	log := ctrl.LoggerFrom(ctx)

	log.Info("Removing ArgoApplicationSetGenerator")

	appset := &argoApi.ApplicationSet{}
	if err := c.client.Get(ctx, client.ObjectKey{
		Namespace: stage.Namespace,
		Name:      stage.Labels[cdPipeApi.StageCdPipelineLabelName],
	}, appset); err != nil {
		if errors.IsNotFound(err) {
			log.Info("ArgoApplicationSet is not found. Skip removing generators")

			return nil
		}

		return fmt.Errorf("failed to get ArgoApplicationSet: %w", err)
	}

	for i := 0; i < len(appset.Spec.Generators); i++ {
		if appset.Spec.Generators[i].List == nil {
			continue
		}

		n := 0

		for _, rawel := range appset.Spec.Generators[i].List.Elements {
			el := &generatorElement{}
			if err := json.Unmarshal(rawel.Raw, el); err != nil {
				return fmt.Errorf("failed to unmarshal generator element: %w", err)
			}

			if el.Stage != stage.Spec.Name {
				appset.Spec.Generators[i].List.Elements[n] = rawel
				n++
			}
		}

		if len(appset.Spec.Generators[i].List.Elements) != n {
			appset.Spec.Generators[i].List.Elements = appset.Spec.Generators[i].List.Elements[:n]

			if err := c.client.Update(ctx, appset); err != nil {
				return fmt.Errorf("failed to update ArgoApplicationSet: %w", err)
			}

			log.Info("Stage generator was removed from ArgoApplicationSet")

			return nil
		}

		break
	}

	log.Info("Stage generators are not found in ArgoApplicationSet")

	return nil
}