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
}