func()

in controllers/clustersecret/clustersecret_controller.go [82:133]


func (r *ReconcileClusterSecret) createArgoCDClusterSecret(ctx context.Context, secret *corev1.Secret) error {
	log := ctrl.LoggerFrom(ctx)

	log.Info("Start creating ArgoCD cluster secret")

	restConf, err := multiclusterclient.ClusterSecretToRestConfig(secret)
	if err != nil {
		return fmt.Errorf("failed to convert cluster secret to rest config: %w", err)
	}

	argoClusterSecret := &corev1.Secret{
		ObjectMeta: metav1.ObjectMeta{
			Name:      fmt.Sprintf("%s-argocd-cluster", secret.Name),
			Namespace: secret.Namespace,
		},
	}

	var res controllerutil.OperationResult

	if res, err = controllerutil.CreateOrUpdate(ctx, r.client, argoClusterSecret, func() error {
		argoClusterConf := &ClusterConfig{}
		argoClusterConf.BearerToken = restConf.BearerToken
		argoClusterConf.CAData = restConf.TLSClientConfig.CAData
		argoClusterConf.Insecure = restConf.TLSClientConfig.Insecure

		var rawConf json.RawMessage

		if rawConf, err = json.Marshal(argoClusterConf); err != nil {
			return fmt.Errorf("failed to marshal cluster config: %w", err)
		}

		addClusterLabel(argoClusterSecret)

		argoClusterSecret.Data = map[string][]byte{
			"name":   []byte(secret.Name),
			"server": []byte(restConf.Host),
			"config": rawConf,
		}

		if err = controllerutil.SetControllerReference(secret, argoClusterSecret, r.client.Scheme()); err != nil {
			return fmt.Errorf("failed to set controller reference: %w", err)
		}

		return nil
	}); err != nil {
		return fmt.Errorf("failed to create/update or update ArgoCD cluster secret: %w", err)
	}

	log.Info(fmt.Sprintf("ArgoCD cluster secret has been %s", res))

	return nil
}