func()

in pkg/argocd/argoapplicationset_manager.go [94:148]


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

	log.Info("Creating ArgoApplicationSetGenerator")

	pipeline := &cdPipeApi.CDPipeline{}
	if err := c.client.Get(ctx, client.ObjectKey{
		Namespace: stage.Namespace,
		Name:      stage.Spec.CdPipeline,
	}, pipeline); err != nil {
		return fmt.Errorf("failed to get CDPipeline: %w", err)
	}

	appset := &argoApi.ApplicationSet{}
	if err := c.client.Get(ctx, client.ObjectKey{
		Namespace: stage.Namespace,
		Name:      pipeline.Name,
	}, appset); err != nil {
		return fmt.Errorf("failed to get ArgoApplicationSet: %w", err)
	}

	codebases, err := c.getPipelinesCodebasesMap(ctx, stage.Namespace, pipeline.Spec.Applications)
	if err != nil {
		return err
	}

	gitServers, err := c.getGitServers(ctx, stage.Namespace, codebases)
	if err != nil {
		return err
	}

	stageGenerators, err := c.makeStageGenerators(ctx, stage, codebases, gitServers)
	if err != nil {
		return err
	}

	changed, err := setGenerators(stage.Spec.Name, appset, stageGenerators)
	if err != nil {
		return err
	}

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

		log.Info("ArgoApplicationSet has been updated")

		return nil
	}

	log.Info("ArgoApplicationSet generators are already set")

	return nil
}