Skip to content

Commit ff003cb

Browse files
committed
chore: run addon enabling script on joining control plane nodes
Signed-off-by: rapour <[email protected]>
1 parent 26e4578 commit ff003cb

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

controllers/cloudinit/controlplane_join.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ type ControlPlaneJoinInput struct {
4949
ContainerdNoProxy string
5050
// IPinIP defines whether Calico will use IPinIP mode for cluster networking.
5151
IPinIP bool
52+
// Addons is the list of addons to enable.
53+
Addons []string
5254
// JoinNodeIPs is the IP addresses of the nodes to join.
5355
JoinNodeIPs []string
5456
// Confinement specifies a classic or strict deployment of microk8s snap.
@@ -94,6 +96,12 @@ func NewJoinControlPlane(input *ControlPlaneJoinInput) (*CloudConfig, error) {
9496
endpointType = "IP"
9597
}
9698

99+
// quote addons to add to the command-line later
100+
addons := make([]string, 0, len(input.Addons))
101+
for _, addon := range input.Addons {
102+
addons = append(addons, fmt.Sprintf("%q", addon))
103+
}
104+
97105
// figure out snap channel from KubernetesVersion
98106
kubernetesVersion, err := version.ParseSemantic(input.KubernetesVersion)
99107
if err != nil {
@@ -152,6 +160,13 @@ func NewJoinControlPlane(input *ControlPlaneJoinInput) (*CloudConfig, error) {
152160
scriptPath(configureAPIServerScript),
153161
fmt.Sprintf("microk8s add-node --token-ttl %v --token %q", input.TokenTTL, input.Token),
154162
)
163+
164+
if len(addons) > 0 {
165+
cloudConfig.RunCommands = append(cloudConfig.RunCommands,
166+
fmt.Sprintf("%s %s", scriptPath(microk8sEnableScript), strings.Join(addons, " ")),
167+
)
168+
}
169+
155170
cloudConfig.RunCommands = append(cloudConfig.RunCommands, input.PostRunCommands...)
156171

157172
return cloudConfig, nil

controllers/cloudinit/controlplane_join_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,56 @@ func TestControlPlaneJoin(t *testing.T) {
7474
_, err = cloudinit.GenerateCloudConfig(cloudConfig)
7575
g.Expect(err).ToNot(HaveOccurred())
7676
})
77+
78+
t.Run("WithAddons", func(t *testing.T) {
79+
g := NewWithT(t)
80+
81+
authToken := "capi-auth-token"
82+
cloudConfig, err := cloudinit.NewJoinControlPlane(&cloudinit.ControlPlaneJoinInput{
83+
AuthToken: authToken,
84+
ControlPlaneEndpoint: "k8s.my-domain.com",
85+
KubernetesVersion: "v1.25.2",
86+
ClusterAgentPort: "30000",
87+
DqlitePort: "2379",
88+
IPinIP: true,
89+
DisableDefaultCNI: true,
90+
Token: strings.Repeat("a", 32),
91+
TokenTTL: 10000,
92+
Addons: []string{"cis-hardening"},
93+
JoinNodeIPs: []string{"10.0.3.39", "10.0.3.40", "10.0.3.41"},
94+
})
95+
g.Expect(err).NotTo(HaveOccurred())
96+
97+
g.Expect(cloudConfig.RunCommands).To(Equal([]string{
98+
`set -x`,
99+
`/capi-scripts/00-configure-snapstore-http-proxy.sh "" ""`,
100+
`/capi-scripts/00-configure-snapstore-proxy.sh "http" "" ""`,
101+
`/capi-scripts/00-disable-host-services.sh`,
102+
`/capi-scripts/00-install-microk8s.sh "--channel 1.25 --classic" true`,
103+
`/capi-scripts/10-configure-containerd-proxy.sh "" "" ""`,
104+
`/capi-scripts/10-configure-kubelet.sh`,
105+
`/capi-scripts/50-wait-apiserver.sh`,
106+
`/capi-scripts/10-configure-calico-ipip.sh true`,
107+
`/capi-scripts/10-configure-cluster-agent-port.sh "30000"`,
108+
`/capi-scripts/10-configure-dqlite-port.sh "2379"`,
109+
`/capi-scripts/50-wait-apiserver.sh`,
110+
`/capi-scripts/10-configure-cert-for-lb.sh "DNS" "k8s.my-domain.com"`,
111+
`/capi-scripts/20-microk8s-join.sh no "10.0.3.39:30000/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "10.0.3.40:30000/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "10.0.3.41:30000/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"`,
112+
`/capi-scripts/10-configure-apiserver.sh`,
113+
`microk8s add-node --token-ttl 10000 --token "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"`,
114+
`/capi-scripts/20-microk8s-enable.sh "cis-hardening"`,
115+
}))
116+
117+
g.Expect(cloudConfig.WriteFiles).To(ContainElements(
118+
cloudinit.File{
119+
Content: authToken,
120+
Path: cloudinit.CAPIAuthTokenPath,
121+
Permissions: "0600",
122+
Owner: "root:root",
123+
},
124+
))
125+
126+
_, err = cloudinit.GenerateCloudConfig(cloudConfig)
127+
g.Expect(err).ToNot(HaveOccurred())
128+
})
77129
}

controllers/microk8sconfig_controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,7 @@ func (r *MicroK8sConfigReconciler) handleJoiningControlPlaneNode(ctx context.Con
430430
ClusterAgentPort: portOfNodeToConnectTo,
431431
DqlitePort: portOfDqlite,
432432
IPinIP: microk8sConfig.Spec.InitConfiguration.IPinIP,
433+
Addons: microk8sConfig.Spec.InitConfiguration.Addons,
433434
ContainerdHTTPProxy: microk8sConfig.Spec.InitConfiguration.HTTPProxy,
434435
ContainerdHTTPSProxy: microk8sConfig.Spec.InitConfiguration.HTTPSProxy,
435436
ContainerdNoProxy: microk8sConfig.Spec.InitConfiguration.NoProxy,

0 commit comments

Comments
 (0)