@@ -4,8 +4,10 @@ import (
4
4
"context"
5
5
"crypto/tls"
6
6
"crypto/x509"
7
+ "errors"
7
8
"fmt"
8
9
"net/http"
10
+ "strings"
9
11
10
12
corev1 "k8s.io/api/core/v1"
11
13
"k8s.io/apimachinery/pkg/types"
@@ -17,27 +19,39 @@ func GetAssistedHTTPClient(config ServiceConfig, c client.Client) (*http.Client,
17
19
return & http.Client {}, nil
18
20
}
19
21
if config .AssistedCABundleName == "" || config .AssistedCABundleNamespace == "" {
20
- return nil , fmt .Errorf ("ASSISTED_CA_BUNDLE_NAME and ASSISTED_CA_BUNDLE_NAMESPACE must either both be set or unset" )
22
+ return nil , errors .New ("ASSISTED_CA_BUNDLE_NAME and ASSISTED_CA_BUNDLE_NAMESPACE must either both be set or unset" )
23
+ }
24
+ if config .AssistedCABundleResource != "secret" && config .AssistedCABundleResource != "configmap" {
25
+ return nil , errors .New ("ASSISTED_CA_BUNDLE_RESOURCE must be either configmap or secret" )
21
26
}
22
27
23
- cmNSName := types.NamespacedName {
28
+ caCertPool , err := x509 .SystemCertPool ()
29
+ if err != nil {
30
+ return nil , fmt .Errorf ("failed to obtain system cert pool: %w" , err )
31
+ }
32
+
33
+ namespacedName := types.NamespacedName {
24
34
Name : config .AssistedCABundleName ,
25
35
Namespace : config .AssistedCABundleNamespace ,
26
36
}
27
- cm := & corev1.ConfigMap {}
28
- if err := c .Get (context .Background (), cmNSName , cm ); err != nil {
29
- return nil , err
30
- }
31
- bundlePEM , present := cm .Data [config .AssistedCABundleKey ]
32
- if ! present {
33
- return nil , fmt .Errorf ("key %s not found in configmap %s" , config .AssistedCABundleKey , cmNSName )
37
+ var bundlePEM []byte
38
+
39
+ if strings .EqualFold (config .AssistedCABundleResource , "secret" ) {
40
+ var secretErr error
41
+ bundlePEM , secretErr = getBundlePEMFromSecret (namespacedName , config .AssistedCABundleKey , c )
42
+ if secretErr != nil {
43
+ return nil , fmt .Errorf ("failed to retrieve cert from secret %s: %w" , namespacedName , secretErr )
44
+ }
34
45
}
35
46
36
- caCertPool , err := x509 .SystemCertPool ()
37
- if err != nil {
38
- return nil , fmt .Errorf ("failed to obtain system cert pool: %w" , err )
47
+ if strings .EqualFold (config .AssistedCABundleResource , "configmap" ) {
48
+ var configmapErr error
49
+ bundlePEM , configmapErr = getBundlePEMFromConfigmap (namespacedName , config .AssistedCABundleKey , c )
50
+ if configmapErr != nil {
51
+ return nil , fmt .Errorf ("failed to retrieve cert from configmap %s: %w" , namespacedName , configmapErr )
52
+ }
39
53
}
40
- if ! caCertPool .AppendCertsFromPEM ([] byte ( bundlePEM ) ) {
54
+ if bundlePEM == nil || ! caCertPool .AppendCertsFromPEM (bundlePEM ) {
41
55
return nil , fmt .Errorf ("failed to append additional certificates" )
42
56
}
43
57
@@ -52,3 +66,31 @@ func GetAssistedHTTPClient(config ServiceConfig, c client.Client) (*http.Client,
52
66
53
67
return & http.Client {Transport : transport }, nil
54
68
}
69
+
70
+ func getBundlePEMFromConfigmap (namespacedName types.NamespacedName , certKey string , c client.Client ) ([]byte , error ) {
71
+ configmap := & corev1.ConfigMap {}
72
+
73
+ if err := c .Get (context .Background (), namespacedName , configmap ); err != nil {
74
+ return nil , fmt .Errorf ("failed to get configmap %s: %w" , namespacedName , err )
75
+ }
76
+
77
+ bundlePEM , present := configmap .Data [certKey ]
78
+ if ! present {
79
+ return nil , fmt .Errorf ("key %s not found in configmap %s" , certKey , namespacedName )
80
+ }
81
+ return []byte (bundlePEM ), nil
82
+ }
83
+
84
+ func getBundlePEMFromSecret (namespacedName types.NamespacedName , certKey string , c client.Client ) ([]byte , error ) {
85
+ secret := & corev1.Secret {}
86
+
87
+ if err := c .Get (context .Background (), namespacedName , secret ); err != nil {
88
+ return nil , fmt .Errorf ("failed to get secret %s: %w" , namespacedName , err )
89
+ }
90
+
91
+ bundlePEMBytes , present := secret .Data [certKey ]
92
+ if ! present {
93
+ return nil , fmt .Errorf ("key %s not found in secret %s" , certKey , namespacedName )
94
+ }
95
+ return bundlePEMBytes , nil
96
+ }
0 commit comments