func()

in operator/pkg/utils/kubeconfigs/reconciler.go [57:84]


func (p *Provider) ReconcileConfigFor(ctx context.Context, controlPlane *v1alpha1.ControlPlane, request *Request) error {
	// Check if this secret for kubeconfig exists in the api server
	_, err := p.keypairs.GetSecretFromServer(ctx, object.NamespacedName(request.Name, request.Namespace))
	if err != nil && errors.IsNotFound(err) {
		// Generate the cert and key for the user
		auth, err := request.AuthInfo.Generate()
		if err != nil {
			return fmt.Errorf("creating cert and key for %v, %w", request.Name, err)
		}
		// certs generated for clients (admin, KCM, scheduler) are stored in the kubeconfig format.
		// generate kubeconfig for this is client and convert to YAML
		configBytes, err := runtime.Encode(clientcmdlatest.Codec, kubeConfigFor(request, request.ClusterName, auth))
		if err != nil {
			return fmt.Errorf("encoding kube config object %v, %w", request.Name, err)
		}
		secret := secrets.CreateWithConfig(object.NamespacedName(request.Name, request.Namespace), configBytes)
		if controlPlane != nil {
			secret = object.WithOwner(controlPlane, secret)
		}
		// Create a secret object with config and ensure the secret object is in the api server
		if err := p.kubeClient.EnsureCreate(ctx, secret); err != nil {
			return fmt.Errorf("ensuring kube config for %v, %w", request.Name, err)
		}
		return nil
	}
	// TODO validate the existing config in the secret
	return err
}