Skip to content

Commit a1e166f

Browse files
authored
(capi): custom vCluster helm version (#62)
1 parent 4aed479 commit a1e166f

File tree

15 files changed

+320
-203
lines changed

15 files changed

+320
-203
lines changed

.github/workflows/e2e.yaml

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,6 @@ concurrency:
2222
group: e2e-${{ github.head_ref || github.ref_name }}
2323
cancel-in-progress: true
2424

25-
env:
26-
KUBERNETES_VERSION: 1.29.2
27-
VCLUSTER_VERSION: 0.19
28-
VCLUSTER_NAME: vcluster
29-
VCLUSTER_NAMESPACE: vcluster
30-
3125
jobs:
3226
unit-test:
3327
runs-on: ubuntu-latest
@@ -39,7 +33,8 @@ jobs:
3933
- name: Set up Go
4034
uses: actions/setup-go@v4
4135
with:
42-
go-version-file: go.mod
36+
go-version-file: "go.mod"
37+
cache: false
4338

4439
- name: Run Unit Tests
4540
run: go test ./test/controllerstest
@@ -56,7 +51,8 @@ jobs:
5651
- name: Set up Go
5752
uses: actions/setup-go@v4
5853
with:
59-
go-version-file: go.mod
54+
go-version-file: "go.mod"
55+
cache: false
6056

6157
- name: Install Prerequisites
6258
run: |
@@ -75,7 +71,7 @@ jobs:
7571
GOBIN="$(pwd)/bin" go install -tags tools github.com/drone/envsubst/v2/cmd/[email protected]
7672
7773
# Install kubectl
78-
curl -LO "https://dl.k8s.io/release/v${{ env.KUBERNETES_VERSION }}/bin/linux/amd64/kubectl"
74+
curl -LO "https://dl.k8s.io/release/v1.29.2/bin/linux/amd64/kubectl"
7975
chmod +x ./kubectl
8076
sudo mv ./kubectl /usr/local/bin/kubectl
8177
@@ -113,19 +109,69 @@ jobs:
113109
echo "=== Test get crd ==="
114110
kubectl get crd
115111
116-
- name: Create Vcluster Custom Resource
112+
- name: Create Vcluster Custom Resource K3S
113+
run: |
114+
export CLUSTER_NAME=vcluster-k3s
115+
export CLUSTER_NAMESPACE=vcluster-k3s
116+
export CHART_VERSION=0.19.0
117+
export HELM_VALUES=$(cat ./test/e2e/k3s-values.yaml | sed -z 's/\n/\\n/g')
118+
kubectl create namespace ${CLUSTER_NAMESPACE}
119+
cat templates/cluster-template.yaml | ./bin/envsubst | kubectl apply -n ${CLUSTER_NAMESPACE} -f -
120+
121+
- name: Validate Resource Ready K3S
122+
run: |
123+
kubectl wait --for=condition=ready vcluster -n vcluster-k3s vcluster-k3s --timeout=100s
124+
125+
- name: Run E2E Tests K3S
126+
run: NAMESPACE=vcluster-k3s LOCAL_PORT=14550 go test -mod=vendor ./test/e2e -v
127+
128+
- name: Create Vcluster Custom Resource K0S
129+
run: |
130+
export CLUSTER_NAME=vcluster-k0s
131+
export CLUSTER_NAMESPACE=vcluster-k0s
132+
export CHART_VERSION=0.19.0
133+
export CHART_NAME=vcluster-k0s
134+
export HELM_VALUES=$(cat ./test/e2e/k0s-values.yaml | sed -z 's/\n/\\n/g')
135+
kubectl create namespace ${CLUSTER_NAMESPACE}
136+
cat templates/cluster-template.yaml | ./bin/envsubst | kubectl apply -n ${CLUSTER_NAMESPACE} -f -
137+
138+
- name: Validate Resource Ready K0S
139+
run: |
140+
kubectl wait --for=condition=ready vcluster -n vcluster-k0s vcluster-k0s --timeout=100s
141+
142+
- name: Run E2E Tests K0S
143+
run: NAMESPACE=vcluster-k0s LOCAL_PORT=14551 go test -mod=vendor ./test/e2e -v
144+
145+
- name: Create Vcluster Custom Resource K8S
146+
run: |
147+
export CLUSTER_NAME=vcluster-k8s
148+
export CLUSTER_NAMESPACE=vcluster-k8s
149+
export CHART_VERSION=0.19.0
150+
export CHART_NAME=vcluster-k8s
151+
export HELM_VALUES=$(cat ./test/e2e/k8s-values.yaml | sed -z 's/\n/\\n/g')
152+
kubectl create namespace ${CLUSTER_NAMESPACE}
153+
cat templates/cluster-template.yaml | ./bin/envsubst | kubectl apply -n ${CLUSTER_NAMESPACE} -f -
154+
155+
- name: Validate Resource Ready K8S
156+
run: |
157+
kubectl wait --for=condition=ready vcluster -n vcluster-k8s vcluster-k8s --timeout=100s
158+
159+
- name: Run E2E Tests K8S
160+
run: NAMESPACE=vcluster-k8s LOCAL_PORT=14552 go test -mod=vendor ./test/e2e -v
161+
162+
- name: Create Vcluster Custom Resource EKS
117163
run: |
118-
export CLUSTER_NAME=${{ env.VCLUSTER_NAME }}
119-
export CLUSTER_NAMESPACE=${{ env.VCLUSTER_NAMESPACE }}
120-
export KUBERNETES_VERSION=${{ env.KUBERNETES_VERSION }}
121-
export VCLUSTER_VERSION=${{ env.VCLUSTER_VERSION }}
122-
export HELM_VALUES=$(cat ./test/e2e/values.yaml | sed -z 's/\n/\\n/g')
164+
export CLUSTER_NAME=vcluster-eks
165+
export CLUSTER_NAMESPACE=vcluster-eks
166+
export CHART_VERSION=0.19.0
167+
export CHART_NAME=vcluster-eks
168+
export HELM_VALUES=$(cat ./test/e2e/eks-values.yaml | sed -z 's/\n/\\n/g')
123169
kubectl create namespace ${CLUSTER_NAMESPACE}
124170
cat templates/cluster-template.yaml | ./bin/envsubst | kubectl apply -n ${CLUSTER_NAMESPACE} -f -
125171
126-
- name: Validate Resource Ready
172+
- name: Validate Resource Ready EKS
127173
run: |
128-
kubectl wait --for=condition=ready vcluster -n ${{ env.VCLUSTER_NAMESPACE }} ${{ env.VCLUSTER_NAME }} --timeout=100s
174+
kubectl wait --for=condition=ready vcluster -n vcluster-eks vcluster-eks --timeout=100s
129175
130-
- name: Run E2E Tests
131-
run: go test -mod=vendor ./test/e2e -v
176+
- name: Run E2E Tests EKS
177+
run: NAMESPACE=vcluster-eks LOCAL_PORT=14553 go test -mod=vendor ./test/e2e -v

api/v1alpha1/vcluster_types.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,6 @@ type VClusterSpec struct {
3535
// when filled, specified chart will be deployed.
3636
// +optional
3737
HelmRelease *VirtualClusterHelmRelease `json:"helmRelease,omitempty"`
38-
39-
// Kubernetes version that should be used in this vcluster instance, e.g. "1.23".
40-
// Versions out of the supported range will be ignored, and earliest/latest supported
41-
// version will be used instead.
42-
// +optional
43-
KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
44-
45-
// +optional
46-
KubernetesImage *string `json:"kubernetesImage,omitempty"`
47-
// +optional
48-
VirtualClusterVersion *string `json:"virtualClusterVersion,omitempty"`
4938
}
5039

5140
// VClusterStatus defines the observed state of VCluster

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/infrastructure.cluster.x-k8s.io_vclusters.yaml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,6 @@ spec:
7676
description: the values for the given chart
7777
type: string
7878
type: object
79-
kubernetesImage:
80-
type: string
81-
kubernetesVersion:
82-
description: |-
83-
Kubernetes version that should be used in this vcluster instance, e.g. "1.23".
84-
Versions out of the supported range will be ignored, and earliest/latest supported
85-
version will be used instead.
86-
type: string
87-
virtualClusterVersion:
88-
type: string
8979
type: object
9080
status:
9181
description: VClusterStatus defines the observed state of VCluster

controllers/vcluster_controller.go

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"time"
2727

2828
"github.com/go-logr/logr"
29-
vclusterhelm "github.com/loft-sh/utils/pkg/helm"
3029
"github.com/loft-sh/vcluster/pkg/util"
3130
"github.com/loft-sh/vcluster/pkg/util/kubeconfig"
3231
corev1 "k8s.io/api/core/v1"
@@ -51,7 +50,6 @@ import (
5150
"github.com/loft-sh/cluster-api-provider-vcluster/pkg/util/conditions"
5251
"github.com/loft-sh/cluster-api-provider-vcluster/pkg/util/kubeconfighelper"
5352
"github.com/loft-sh/cluster-api-provider-vcluster/pkg/util/patch"
54-
"github.com/loft-sh/cluster-api-provider-vcluster/pkg/util/vclustervalues"
5553
)
5654

5755
type ClientConfigGetter interface {
@@ -280,60 +278,29 @@ func (r *VClusterReconciler) redeployIfNeeded(_ context.Context, vCluster *v1alp
280278
chartName = constants.DefaultVClusterChartName
281279
}
282280

283-
if vCluster.Spec.VirtualClusterVersion == nil || *vCluster.Spec.VirtualClusterVersion == "" {
284-
return fmt.Errorf("empty value of the .spec.virtualClusterVersion field")
281+
if vCluster.Spec.HelmRelease == nil || vCluster.Spec.HelmRelease.Chart.Version == "" {
282+
return fmt.Errorf("empty value of the .spec.HelmRelease.Version field")
285283
}
286284
// chart version
287-
chartVersion := *vCluster.Spec.VirtualClusterVersion
285+
chartVersion := vCluster.Spec.HelmRelease.Chart.Version
288286

289287
if len(chartVersion) > 0 && chartVersion[0] == 'v' {
290288
chartVersion = chartVersion[1:]
291289
}
292290

293-
if vCluster.Spec.KubernetesVersion == nil || *vCluster.Spec.KubernetesVersion == "" {
294-
return fmt.Errorf("empty value of the .spec.kubernetesVersion field")
295-
}
296-
kubernetesVersionStr := strings.Split(*vCluster.Spec.KubernetesVersion, ".")
297-
if len(kubernetesVersionStr) < 2 || len(kubernetesVersionStr) > 3 {
298-
return fmt.Errorf("invalid value of the .spec.kubernetesVersion field: %s", *vCluster.Spec.KubernetesVersion)
299-
}
300-
if len(kubernetesVersionStr) == 3 {
301-
r.Log.Info("kubernetes patch version defined in .spec.kubernetesVersion field will be ignored, latest supported patch version will be used",
302-
"namespace", vCluster.Namespace,
303-
"clusterName", vCluster.Name,
304-
)
305-
}
306-
kubernetesVersion := vclusterhelm.Version{
307-
Major: kubernetesVersionStr[0],
308-
Minor: kubernetesVersionStr[1],
309-
}
310-
311291
// determine values
312292
var values string
313-
if vCluster.Spec.HelmRelease != nil {
293+
if vCluster.Spec.HelmRelease != nil || vCluster.Spec.HelmRelease.Values == "" {
314294
values = vCluster.Spec.HelmRelease.Values
315295
}
316296

317-
//TODO: if .spec.controlPlaneEndpoint.Host is set it would be nice to pass it as --tls-san flag of syncer
318-
values, err := vclustervalues.NewValuesMerger(
319-
kubernetesVersion,
320-
).Merge(&v1alpha1.VirtualClusterHelmRelease{
321-
Chart: v1alpha1.VirtualClusterHelmChart{
322-
Name: chartName,
323-
},
324-
Values: values,
325-
}, r.Log)
326-
if err != nil {
327-
return fmt.Errorf("merge values: %w", err)
328-
}
329-
330297
r.Log.Info("Deploy virtual cluster",
331298
"namespace", vCluster.Namespace,
332299
"clusterName", vCluster.Name,
333300
"values", values,
334301
)
335302
chartPath := "./" + chartName + "-" + chartVersion + ".tgz"
336-
_, err = os.Stat(chartPath)
303+
_, err := os.Stat(chartPath)
337304
if err != nil {
338305
// we have to upgrade / install the chart
339306
err = r.HelmClient.Upgrade(vCluster.Name, vCluster.Namespace, helm.UpgradeOptions{

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ go 1.22.0
55
require (
66
github.com/golangci/golangci-lint v1.56.2
77
github.com/loft-sh/log v0.0.0-20240219160058-26d83ffb46ac
8-
github.com/loft-sh/utils v0.0.29
98
github.com/onsi/ginkgo/v2 v2.15.0
109
github.com/onsi/gomega v1.31.1
1110
github.com/stretchr/testify v1.8.4
@@ -168,6 +167,7 @@ require (
168167
github.com/loft-sh/apiserver v0.0.0-20240125143607-a106e2f2e0f1 // indirect
169168
github.com/loft-sh/jspolicy v0.2.2 // indirect
170169
github.com/loft-sh/loftctl/v3 v3.0.0-20240207094551-f600825cc6f5 // indirect
170+
github.com/loft-sh/utils v0.0.29 // indirect
171171
github.com/loft-sh/vcluster-values v0.0.0-20240207093538-4bbb24e9f699 // indirect
172172
github.com/lufeee/execinquery v1.2.1 // indirect
173173
github.com/macabu/inamedparam v0.1.3 // indirect
@@ -327,7 +327,7 @@ require (
327327
google.golang.org/appengine v1.6.8 // indirect
328328
google.golang.org/protobuf v1.33.0 // indirect
329329
gopkg.in/inf.v0 v0.9.1 // indirect
330-
gopkg.in/yaml.v2 v2.4.0 // indirect
330+
gopkg.in/yaml.v2 v2.4.0
331331
gopkg.in/yaml.v3 v3.0.1 // indirect
332332
k8s.io/api v0.29.3
333333
k8s.io/apiextensions-apiserver v0.29.1 // indirect

pkg/util/vclustervalues/values.go

Lines changed: 0 additions & 88 deletions
This file was deleted.

templates/cluster-template.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@ kind: VCluster
1717
metadata:
1818
name: ${CLUSTER_NAME}
1919
spec:
20-
kubernetesVersion: "${KUBERNETES_VERSION:=}"
21-
kubernetesImage: "${KUBERNETES_IMAGE:=null}"
22-
virtualClusterVersion: "${VCLUSTER_VERSION:=}"
2320
helmRelease:
2421
values: "${HELM_VALUES:=}"
2522
chart:
2623
name: ${CHART_NAME:=null}
2724
repo: ${CHART_REPO:=null}
25+
version: ${CHART_VERSION:=null}
2826
controlPlaneEndpoint:
2927
host: ${VCLUSTER_HOST:=""}
3028
port: ${VCLUSTER_PORT:=0}

0 commit comments

Comments
 (0)