Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Commit 479faf0

Browse files
committed
Set kubernetes version for cloud-init during runtime
1 parent 0f57b41 commit 479faf0

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

pkg/cloud/packet/client.go

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/packethost/packngo"
2828
"github.com/pkg/errors"
2929
corev1 "k8s.io/api/core/v1"
30+
"k8s.io/utils/pointer"
3031
infrastructurev1alpha3 "sigs.k8s.io/cluster-api-provider-packet/api/v1alpha3"
3132
"sigs.k8s.io/cluster-api-provider-packet/pkg/cloud/packet/scope"
3233
)
@@ -79,29 +80,38 @@ func (p *PacketClient) NewDevice(req CreateDeviceRequest) (*packngo.Device, erro
7980
return nil, errors.Wrap(err, "impossible to retrieve bootstrap data from secret")
8081
}
8182

83+
stringWriter := &strings.Builder{}
8284
userData := string(userDataRaw)
85+
userDataValues := map[string]interface{}{
86+
"kubernetesVersion": pointer.StringPtrDerefOr(req.MachineScope.Machine.Spec.Version, ""),
87+
}
88+
8389
tags := append(req.MachineScope.PacketMachine.Spec.Tags, req.ExtraTags...)
90+
91+
tmpl, err := template.New("user-data").Parse(userData)
92+
if err != nil {
93+
return nil, fmt.Errorf("error parsing userdata template: %v", err)
94+
}
95+
8496
if req.MachineScope.IsControlPlane() {
8597
// control plane machines should get the API key injected
86-
tmpl, err := template.New("control-plane-user-data").Parse(userData)
87-
if err != nil {
88-
return nil, fmt.Errorf("error parsing control-plane userdata template: %v", err)
89-
}
90-
stringWriter := &strings.Builder{}
91-
apiKeyStruct := map[string]interface{}{
92-
"apiKey": p.Client.APIKey,
93-
}
98+
userDataValues["apiKey"] = p.Client.APIKey
99+
94100
if req.ControlPlaneEndpoint != "" {
95-
apiKeyStruct["controlPlaneEndpoint"] = req.ControlPlaneEndpoint
96-
}
97-
if err := tmpl.Execute(stringWriter, apiKeyStruct); err != nil {
98-
return nil, fmt.Errorf("error executing control-plane userdata template: %v", err)
101+
userDataValues["controlPlaneEndpoint"] = req.ControlPlaneEndpoint
99102
}
100-
userData = stringWriter.String()
103+
101104
tags = append(tags, infrastructurev1alpha3.ControlPlaneTag)
102105
} else {
103106
tags = append(tags, infrastructurev1alpha3.WorkerTag)
104107
}
108+
109+
if err := tmpl.Execute(stringWriter, userDataValues); err != nil {
110+
return nil, fmt.Errorf("error executing userdata template: %v", err)
111+
}
112+
113+
userData = stringWriter.String()
114+
105115
serverCreateOpts := &packngo.DeviceCreateRequest{
106116
Hostname: req.MachineScope.Name(),
107117
ProjectID: req.MachineScope.PacketCluster.Spec.ProjectID,

templates/cluster-template.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ spec:
5959
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
6060
- echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
6161
- apt-get update -y
62-
- TRIMMED_KUBERNETES_VERSION=$(echo ${KUBERNETES_VERSION} | sed 's/\./\\./g' | sed 's/^v//')
62+
- TRIMMED_KUBERNETES_VERSION=$(echo {{ .kubernetesVersion }} | sed 's/\./\\./g' | sed 's/^v//')
6363
- RESOLVED_KUBERNETES_VERSION=$(apt-cache policy kubelet | awk -v VERSION=$${TRIMMED_KUBERNETES_VERSION} '$1~ VERSION { print $1 }' | head -n1)
6464
- apt-get install -y ca-certificates socat jq ebtables apt-transport-https cloud-utils prips containerd kubelet=$${RESOLVED_KUBERNETES_VERSION} kubeadm=$${RESOLVED_KUBERNETES_VERSION} kubectl=$${RESOLVED_KUBERNETES_VERSION}
6565
- systemctl daemon-reload
@@ -186,7 +186,7 @@ spec:
186186
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
187187
- echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
188188
- apt-get update -y
189-
- TRIMMED_KUBERNETES_VERSION=$(echo ${KUBERNETES_VERSION} | sed 's/\./\\./g' | sed 's/^v//')
189+
- TRIMMED_KUBERNETES_VERSION=$(echo {{ .kubernetesVersion }} | sed 's/\./\\./g' | sed 's/^v//')
190190
- RESOLVED_KUBERNETES_VERSION=$(apt-cache policy kubelet | awk -v VERSION=$${TRIMMED_KUBERNETES_VERSION} '$1~ VERSION { print $1 }' | head -n1)
191191
- apt-get install -y ca-certificates socat jq ebtables apt-transport-https cloud-utils prips containerd kubelet=$${RESOLVED_KUBERNETES_VERSION} kubeadm=$${RESOLVED_KUBERNETES_VERSION} kubectl=$${RESOLVED_KUBERNETES_VERSION}
192192
- systemctl daemon-reload

0 commit comments

Comments
 (0)