Skip to content

Commit a035717

Browse files
committed
Helm: allow configuration of TLS certs without CA
1 parent 63d5f21 commit a035717

File tree

3 files changed

+24
-17
lines changed

3 files changed

+24
-17
lines changed

controllers/helmrepository_controller_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,6 @@ var _ = Describe("HelmRepositoryReconciler", func() {
310310

311311
By("Expecting missing field error")
312312
secret.Data["certFile"] = examplePublicKey
313-
secret.Data["keyFile"] = examplePrivateKey
314313
Expect(k8sClient.Update(context.Background(), secret)).Should(Succeed())
315314
Eventually(func() bool {
316315
got := &sourcev1.HelmRepository{}
@@ -324,6 +323,7 @@ var _ = Describe("HelmRepositoryReconciler", func() {
324323
}, timeout, interval).Should(BeTrue())
325324

326325
By("Expecting artifact")
326+
secret.Data["keyFile"] = examplePrivateKey
327327
secret.Data["caFile"] = exampleCA
328328
Expect(k8sClient.Update(context.Background(), secret)).Should(Succeed())
329329
Eventually(func() bool {

internal/helm/getter.go

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ func TLSClientConfigFromSecret(secret corev1.Secret) (getter.Option, func(), err
6161
switch {
6262
case len(certBytes)+len(keyBytes)+len(caBytes) == 0:
6363
return nil, nil, nil
64-
case len(certBytes) == 0 || len(keyBytes) == 0 || len(caBytes) == 0:
65-
return nil, nil, fmt.Errorf("invalid '%s' secret data: required fields 'certFile', 'keyFile' and 'caFile'",
64+
case (len(certBytes) > 0 && len(keyBytes) == 0) || (len(keyBytes) > 0 && len(certBytes) == 0):
65+
return nil, nil, fmt.Errorf("invalid '%s' secret data: fields 'certFile' and 'keyFile' require each other's presence",
6666
secret.Name)
6767
}
6868

@@ -73,20 +73,27 @@ func TLSClientConfigFromSecret(secret corev1.Secret) (getter.Option, func(), err
7373
}
7474
cleanup := func() { os.RemoveAll(tmp) }
7575

76-
certFile := filepath.Join(tmp, "cert.crt")
77-
if err := ioutil.WriteFile(certFile, certBytes, 0644); err != nil {
78-
cleanup()
79-
return nil, nil, err
80-
}
81-
keyFile := filepath.Join(tmp, "key.crt")
82-
if err := ioutil.WriteFile(keyFile, keyBytes, 0644); err != nil {
83-
cleanup()
84-
return nil, nil, err
76+
var certFile, keyFile, caFile string
77+
78+
if len(certBytes) > 0 && len(keyBytes) > 0 {
79+
certFile = filepath.Join(tmp, "cert.crt")
80+
if err := ioutil.WriteFile(certFile, certBytes, 0644); err != nil {
81+
cleanup()
82+
return nil, nil, err
83+
}
84+
keyFile = filepath.Join(tmp, "key.crt")
85+
if err := ioutil.WriteFile(keyFile, keyBytes, 0644); err != nil {
86+
cleanup()
87+
return nil, nil, err
88+
}
8589
}
86-
caFile := filepath.Join(tmp, "ca.pem")
87-
if err := ioutil.WriteFile(caFile, caBytes, 0644); err != nil {
88-
cleanup()
89-
return nil, nil, err
90+
91+
if len(caBytes) > 0 {
92+
caFile = filepath.Join(tmp, "ca.pem")
93+
if err := ioutil.WriteFile(caFile, caBytes, 0644); err != nil {
94+
cleanup()
95+
return nil, nil, err
96+
}
9097
}
9198

9299
return getter.WithTLSClientConfig(certFile, keyFile, caFile), cleanup, nil

internal/helm/getter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func TestTLSClientConfigFromSecret(t *testing.T) {
114114
{"certFile, keyFile and caFile", tlsSecretFixture, nil, false, false},
115115
{"without certFile", tlsSecretFixture, func(s *corev1.Secret) { delete(s.Data, "certFile") }, true, true},
116116
{"without keyFile", tlsSecretFixture, func(s *corev1.Secret) { delete(s.Data, "keyFile") }, true, true},
117-
{"without caFile", tlsSecretFixture, func(s *corev1.Secret) { delete(s.Data, "caFile") }, true, true},
117+
{"without caFile", tlsSecretFixture, func(s *corev1.Secret) { delete(s.Data, "caFile") }, false, false},
118118
{"empty", corev1.Secret{}, nil, false, true},
119119
}
120120
for _, tt := range tests {

0 commit comments

Comments
 (0)