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
}