Skip to content

Commit 0329079

Browse files
authored
Merge pull request #534 from makhov/k0smotron-cp-external-certs
Respect external certificates for K0smotronControlPlane
2 parents d716146 + 262fe6c commit 0329079

File tree

2 files changed

+50
-20
lines changed

2 files changed

+50
-20
lines changed

internal/controller/controlplane/k0smotron_controlplane_controller.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controlplane
1818

1919
import (
2020
"context"
21+
"fmt"
2122
"reflect"
2223
"time"
2324

@@ -105,13 +106,9 @@ func (c *K0smotronController) Reconcile(ctx context.Context, req ctrl.Request) (
105106
// return ctrl.Result{}, nil
106107
// }
107108

108-
if err = c.ensureCertificates(ctx, cluster, kcp); err != nil {
109-
log.Error(err, "Failed to ensure certificates")
110-
return ctrl.Result{}, err
111-
}
112-
113109
res, ready, err := c.reconcile(ctx, cluster, kcp)
114110
if err != nil {
111+
log.Error(err, "Reconciliation failed")
115112
return res, err
116113
}
117114
if !ready {
@@ -193,19 +190,25 @@ func (c *K0smotronController) waitExternalAddress(ctx context.Context, cluster *
193190
}
194191

195192
func (c *K0smotronController) reconcile(ctx context.Context, cluster *clusterv1.Cluster, kcp *cpv1beta1.K0smotronControlPlane) (ctrl.Result, bool, error) {
196-
kcp.Spec.CertificateRefs = []kapi.CertificateRef{
197-
{
198-
Type: string(secret.ClusterCA),
199-
Name: secret.Name(cluster.Name, secret.ClusterCA),
200-
},
201-
{
202-
Type: string(secret.FrontProxyCA),
203-
Name: secret.Name(cluster.Name, secret.FrontProxyCA),
204-
},
205-
{
206-
Type: string(secret.ServiceAccount),
207-
Name: secret.Name(cluster.Name, secret.ServiceAccount),
208-
},
193+
if kcp.Spec.CertificateRefs == nil {
194+
kcp.Spec.CertificateRefs = []kapi.CertificateRef{
195+
{
196+
Type: string(secret.ClusterCA),
197+
Name: secret.Name(cluster.Name, secret.ClusterCA),
198+
},
199+
{
200+
Type: string(secret.FrontProxyCA),
201+
Name: secret.Name(cluster.Name, secret.FrontProxyCA),
202+
},
203+
{
204+
Type: string(secret.ServiceAccount),
205+
Name: secret.Name(cluster.Name, secret.ServiceAccount),
206+
},
207+
}
208+
209+
if err := c.ensureCertificates(ctx, cluster, kcp); err != nil {
210+
return ctrl.Result{}, false, fmt.Errorf("failed to ensure certificates for K0smotronControlPlane %s/%s", kcp.Namespace, kcp.Name)
211+
}
209212
}
210213
kcluster := kapi.Cluster{
211214
TypeMeta: metav1.TypeMeta{

inttest/capi-docker/capi_docker_test.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ import (
3333
"k8s.io/client-go/kubernetes"
3434
"k8s.io/client-go/rest"
3535
"k8s.io/client-go/tools/clientcmd"
36+
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
37+
"sigs.k8s.io/cluster-api/util/secret"
38+
"sigs.k8s.io/controller-runtime/pkg/client"
3639

3740
corev1 "k8s.io/api/core/v1"
3841
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -77,7 +80,7 @@ func (s *CAPIDockerSuite) SetupSuite() {
7780
}
7881

7982
func (s *CAPIDockerSuite) TestCAPIDocker() {
80-
83+
s.prepareCerts()
8184
// Apply the child cluster objects
8285
s.applyClusterObjects()
8386
defer func() {
@@ -137,6 +140,20 @@ func (s *CAPIDockerSuite) TestCAPIDocker() {
137140
s.Require().Equal("test-file", extraFile)
138141
}
139142

143+
func (s *CAPIDockerSuite) prepareCerts() {
144+
certificates := secret.NewCertificatesForInitialControlPlane(&bootstrapv1.ClusterConfiguration{})
145+
err := certificates.Generate()
146+
s.Require().NoError(err, "failed to generate certificates")
147+
148+
for _, certificate := range certificates {
149+
certificate.Generated = false
150+
certSecret := certificate.AsSecret(client.ObjectKey{Namespace: "default", Name: "docker-test"}, metav1.OwnerReference{})
151+
if _, err := s.client.CoreV1().Secrets("default").Create(s.ctx, certSecret, metav1.CreateOptions{}); err != nil {
152+
s.Require().NoError(err)
153+
}
154+
}
155+
}
156+
140157
func (s *CAPIDockerSuite) applyClusterObjects() {
141158
// Exec via kubectl
142159
out, err := exec.Command("kubectl", "apply", "-f", s.clusterYamlsPath).CombinedOutput()
@@ -145,7 +162,10 @@ func (s *CAPIDockerSuite) applyClusterObjects() {
145162

146163
func (s *CAPIDockerSuite) deleteCluster() {
147164
// Exec via kubectl
148-
out, err := exec.Command("kubectl", "delete", "-f", s.clusterYamlsPath).CombinedOutput()
165+
out, err := exec.Command("kubectl", "delete", "secret", "docker-test-ca", "docker-test-etcd", "docker-test-proxy", "docker-test-sa").CombinedOutput()
166+
s.Require().NoError(err, "failed to delete secrets: %s", string(out))
167+
168+
out, err = exec.Command("kubectl", "delete", "-f", s.clusterYamlsPath).CombinedOutput()
149169
s.Require().NoError(err, "failed to delete cluster objects: %s", string(out))
150170
}
151171

@@ -215,6 +235,13 @@ metadata:
215235
name: docker-test-cp
216236
spec:
217237
version: v1.27.2-k0s.0
238+
certificateRefs:
239+
- name: docker-test-ca
240+
type: ca
241+
- name: docker-test-proxy
242+
type: proxy
243+
- name: docker-test-sa
244+
type: sa
218245
persistence:
219246
type: pvc
220247
persistentVolumeClaim:

0 commit comments

Comments
 (0)