@@ -8,11 +8,13 @@ import (
8
8
9
9
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
10
10
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
11
+ capiv1 "sigs.k8s.io/cluster-api/api/v1beta1"
11
12
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
12
13
controlplanev1 "sigs.k8s.io/cluster-api/controlplane/kubeadm/api/v1beta1"
13
14
runtimehooksv1 "sigs.k8s.io/cluster-api/exp/runtime/hooks/api/v1alpha1"
14
15
ctrl "sigs.k8s.io/controller-runtime"
15
16
"sigs.k8s.io/controller-runtime/pkg/client"
17
+ ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
16
18
17
19
"github.com/d2iq-labs/cluster-api-runtime-extensions-nutanix/api/v1alpha1"
18
20
"github.com/d2iq-labs/cluster-api-runtime-extensions-nutanix/common/pkg/capi/clustertopology/patches"
@@ -29,18 +31,23 @@ const (
29
31
type extraAPIServerCertSANsPatchHandler struct {
30
32
variableName string
31
33
variableFieldPath []string
34
+ client ctrlclient.Reader
32
35
}
33
36
34
- func NewPatch () * extraAPIServerCertSANsPatchHandler {
35
- return newExtraAPIServerCertSANsPatchHandler (clusterconfig .MetaVariableName , VariableName )
37
+ func NewPatch (
38
+ cl ctrlclient.Reader ,
39
+ ) * extraAPIServerCertSANsPatchHandler {
40
+ return newExtraAPIServerCertSANsPatchHandler (clusterconfig .MetaVariableName , cl , VariableName )
36
41
}
37
42
38
43
func newExtraAPIServerCertSANsPatchHandler (
39
44
variableName string ,
45
+ cl ctrlclient.Reader ,
40
46
variableFieldPath ... string ,
41
47
) * extraAPIServerCertSANsPatchHandler {
42
48
return & extraAPIServerCertSANsPatchHandler {
43
49
variableName : variableName ,
50
+ client : cl ,
44
51
variableFieldPath : variableFieldPath ,
45
52
}
46
53
}
@@ -50,12 +57,16 @@ func (h *extraAPIServerCertSANsPatchHandler) Mutate(
50
57
obj * unstructured.Unstructured ,
51
58
vars map [string ]apiextensionsv1.JSON ,
52
59
holderRef runtimehooksv1.HolderReference ,
53
- _ client.ObjectKey ,
60
+ clusterKey client.ObjectKey ,
54
61
) error {
55
62
log := ctrl .LoggerFrom (ctx ).WithValues (
56
63
"holderRef" , holderRef ,
57
64
)
58
-
65
+ cluster := & capiv1.Cluster {}
66
+ if err := h .client .Get (ctx , clusterKey , cluster ); err != nil {
67
+ return err
68
+ }
69
+ defaultAPICertSANs := getDefaultAPIServerSANs (cluster )
59
70
extraAPIServerCertSANsVar , found , err := variables .Get [v1alpha1.ExtraAPIServerCertSANs ](
60
71
vars ,
61
72
h .variableName ,
@@ -64,11 +75,13 @@ func (h *extraAPIServerCertSANsPatchHandler) Mutate(
64
75
if err != nil {
65
76
return err
66
77
}
67
- if ! found {
68
- log .V (5 ).Info ("Extra API server cert SANs variable not defined " )
78
+ if ! found && len ( defaultAPICertSANs ) == 0 {
79
+ log .V (5 ).Info ("No Extra API server cert SANs needed to be added " )
69
80
return nil
70
81
}
71
82
83
+ extraSans := deDup (extraAPIServerCertSANsVar , defaultAPICertSANs )
84
+
72
85
log = log .WithValues (
73
86
"variableName" ,
74
87
h .variableName ,
@@ -89,9 +102,40 @@ func (h *extraAPIServerCertSANsPatchHandler) Mutate(
89
102
if obj .Spec .Template .Spec .KubeadmConfigSpec .ClusterConfiguration == nil {
90
103
obj .Spec .Template .Spec .KubeadmConfigSpec .ClusterConfiguration = & bootstrapv1.ClusterConfiguration {}
91
104
}
92
- obj .Spec .Template .Spec .KubeadmConfigSpec .ClusterConfiguration .APIServer .CertSANs = extraAPIServerCertSANsVar
93
-
105
+ obj .Spec .Template .Spec .KubeadmConfigSpec .ClusterConfiguration .APIServer .CertSANs = extraSans
94
106
return nil
95
107
},
96
108
)
97
109
}
110
+
111
+ func getDefaultAPIServerSANs (cluster * capiv1.Cluster ) []string {
112
+ provider , ok := cluster .Labels [capiv1 .ProviderNameLabel ]
113
+ if ! ok {
114
+ return []string {}
115
+ }
116
+ switch provider {
117
+ case "docker" :
118
+ return v1alpha1 .DefaultDockerCertSANs
119
+ default :
120
+ return []string {}
121
+ }
122
+ }
123
+
124
+ func deDup (a , b []string ) []string {
125
+ found := map [string ]bool {}
126
+ for _ , s := range a {
127
+ if _ , ok := found [s ]; ! ok {
128
+ found [s ] = true
129
+ }
130
+ }
131
+ for _ , s := range b {
132
+ if _ , ok := found [s ]; ! ok {
133
+ found [s ] = true
134
+ }
135
+ }
136
+ ret := make ([]string , 0 , len (found ))
137
+ for k := range found {
138
+ ret = append (ret , k )
139
+ }
140
+ return ret
141
+ }
0 commit comments