Skip to content

Commit daa90ac

Browse files
Merge pull request #2737 from Nordix/erja/capi-nightly-builds
🌱 Enable testing with CAPI nightly builds
2 parents b0d84b6 + ae75b2b commit daa90ac

File tree

5 files changed

+131
-16
lines changed

5 files changed

+131
-16
lines changed

docs/e2e-test.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,17 @@ export GINKGO_SKIP=healthcheck remediation
7171
make test-e2e
7272
```
7373

74+
### Testing against CAPI nightly builds
75+
76+
Cluster API publishes nightly versions of the project components’ manifests from
77+
the main branch. If you want to run tests against the nightly builds you can set:
78+
79+
```sh
80+
export CAPI_NIGHTLY_BUILD=true
81+
```
82+
83+
The used build is from the previous day.
84+
7485
## Cleanup
7586

7687
After a finished test, cleanup is performed automatically. If the test setup

scripts/ci-e2e.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ export FORCE_REPO_UPDATE="false"
4949
export USE_IRSO="${USE_IRSO:-false}"
5050
EOF
5151

52+
# Always set DATE variable for nightly builds because it is needed to form
53+
# the URL for CAPI nightly build components in e2e_conf.yaml even if not used.
54+
DATE=$(date '+%Y%m%d' -d '1 day ago')
55+
export DATE
56+
57+
# If CAPI_NIGHTLY_BUILD is true, it means that the tests are run against the
58+
# nightly build of CAPI components which are built from CAPI's main branch.
59+
if [[ "${CAPI_NIGHTLY_BUILD:-false}" == "true" ]]; then
60+
export CAPIRELEASE="v1.12.99"
61+
echo 'export CAPI_NIGHTLY_BUILD="true"' >>"${M3_DEV_ENV_PATH}/config_${USER}.sh"
62+
fi
63+
5264
case "${GINKGO_FOCUS:-}" in
5365
clusterctl-upgrade|k8s-upgrade|basic|integration|remediation|k8s-conformance|capi-md-tests)
5466
# if running basic, integration, k8s upgrade, clusterctl-upgrade, remediation, k8s conformance or capi-md tests, skip apply bmhs in dev-env

test/e2e/config/e2e_conf.yaml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ providers:
1717
- name: cluster-api
1818
type: CoreProvider
1919
versions:
20+
- name: "v1.12.99"
21+
value: "https://storage.googleapis.com/k8s-staging-cluster-api/components/nightly_main_${DATE}/core-components.yaml"
22+
type: "url"
23+
contract: v1beta2
24+
replacements:
25+
- old: --metrics-addr=127.0.0.1:8080
26+
new: --metrics-addr=:8080
27+
files:
28+
- sourcePath: "../data/shared/capi/v1.12/metadata.yaml"
2029
- name: "{go://sigs.k8s.io/[email protected]}"
2130
value: "https://github.com/kubernetes-sigs/cluster-api/releases/download/{go://sigs.k8s.io/[email protected]}/core-components.yaml"
2231
type: "url"
@@ -56,6 +65,15 @@ providers:
5665
- name: kubeadm
5766
type: BootstrapProvider
5867
versions:
68+
- name: "v1.12.99"
69+
value: "https://storage.googleapis.com/k8s-staging-cluster-api/components/nightly_main_${DATE}/bootstrap-components.yaml"
70+
type: "url"
71+
contract: v1beta2
72+
replacements:
73+
- old: --metrics-addr=127.0.0.1:8080
74+
new: --metrics-addr=:8080
75+
files:
76+
- sourcePath: "../data/shared/capi/v1.12/metadata.yaml"
5977
- name: "{go://sigs.k8s.io/[email protected]}"
6078
value: "https://github.com/kubernetes-sigs/cluster-api/releases/download/{go://sigs.k8s.io/[email protected]}/bootstrap-components.yaml"
6179
type: "url"
@@ -95,6 +113,15 @@ providers:
95113
- name: kubeadm
96114
type: ControlPlaneProvider
97115
versions:
116+
- name: "v1.12.99"
117+
value: "https://storage.googleapis.com/k8s-staging-cluster-api/components/nightly_main_${DATE}/control-plane-components.yaml"
118+
type: "url"
119+
contract: v1beta2
120+
replacements:
121+
- old: --metrics-addr=127.0.0.1:8080
122+
new: --metrics-addr=:8080
123+
files:
124+
- sourcePath: "../data/shared/capi/v1.12/metadata.yaml"
98125
- name: "{go://sigs.k8s.io/[email protected]}"
99126
value: "https://github.com/kubernetes-sigs/cluster-api/releases/download/{go://sigs.k8s.io/[email protected]}/control-plane-components.yaml"
100127
type: "url"
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# maps release series of major.minor to cluster-api contract version
2+
# the contract version may change between minor or major versions, but *not*
3+
# between patch versions.
4+
#
5+
# update this file only when a new major or minor version is released
6+
apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3
7+
kind: Metadata
8+
releaseSeries:
9+
- major: 1
10+
minor: 12
11+
contract: v1beta2
12+
- major: 1
13+
minor: 11
14+
contract: v1beta2
15+
- major: 1
16+
minor: 10
17+
contract: v1beta1
18+
- major: 1
19+
minor: 9
20+
contract: v1beta1
21+
- major: 1
22+
minor: 8
23+
contract: v1beta1
24+
- major: 1
25+
minor: 7
26+
contract: v1beta1
27+
- major: 1
28+
minor: 6
29+
contract: v1beta1
30+
- major: 1
31+
minor: 5
32+
contract: v1beta1
33+
- major: 1
34+
minor: 4
35+
contract: v1beta1
36+
- major: 1
37+
minor: 3
38+
contract: v1beta1
39+
- major: 1
40+
minor: 2
41+
contract: v1beta1
42+
- major: 1
43+
minor: 1
44+
contract: v1beta1
45+
- major: 1
46+
minor: 0
47+
contract: v1beta1

test/e2e/upgrade_clusterctl_test.go

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
. "github.com/onsi/gomega"
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
16-
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
1716
capi_e2e "sigs.k8s.io/cluster-api/test/e2e"
1817
framework "sigs.k8s.io/cluster-api/test/framework"
1918
"sigs.k8s.io/cluster-api/test/framework/clusterctl"
@@ -62,6 +61,10 @@ var _ = Describe("When testing cluster upgrade from releases (v1.11=>current)",
6261
ipamStableRelease, err := GetStableReleaseOfMinor(ctx, releaseMarkerPrefixIPAM, minorVersion)
6362
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for IPAM minor release : %s", minorVersion)
6463

64+
// Get latest patch release for 1.11.x
65+
capiStablePatchRelease, err := capi_e2e.GetStableReleaseOfMinor(ctx, minorVersion)
66+
Expect(err).ToNot(HaveOccurred(), "Failed to get stable patch version for CAPI minor release : %s", minorVersion)
67+
6568
capi_e2e.ClusterctlUpgradeSpec(ctx, func() capi_e2e.ClusterctlUpgradeSpecInput {
6669
return capi_e2e.ClusterctlUpgradeSpecInput{
6770
E2EConfig: e2eConfig,
@@ -85,8 +88,13 @@ var _ = Describe("When testing cluster upgrade from releases (v1.11=>current)",
8588
os.Setenv("KUBECONFIG_BOOTSTRAP", bootstrapClusterProxy.GetKubeconfigPath())
8689
},
8790
Upgrades: []capi_e2e.ClusterctlUpgradeSpecInputUpgrade{
88-
{ // Upgrade to latest v1beta2.
89-
Contract: clusterv1.GroupVersion.Version,
91+
{ // Upgrade to latest 1.11.x
92+
WithBinary: fmt.Sprintf(clusterctlDownloadURL, capiStablePatchRelease),
93+
CoreProvider: fmt.Sprintf(providerCAPIPrefix, capiStablePatchRelease),
94+
BootstrapProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStablePatchRelease)},
95+
ControlPlaneProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStablePatchRelease)},
96+
InfrastructureProviders: []string{fmt.Sprintf(providerMetal3Prefix, capm3StableRelease)},
97+
IPAMProviders: []string{fmt.Sprintf(providerMetal3Prefix, ipamStableRelease)},
9098
},
9199
},
92100
PostNamespaceCreated: postClusterctlUpgradeNamespaceCreated,
@@ -112,17 +120,22 @@ var _ = Describe("When testing cluster upgrade from releases (v1.10=>current)",
112120
clusterctlLogFolder = filepath.Join(artifactFolder, bootstrapClusterProxy.GetName())
113121
})
114122

115-
minorVersion := "1.10"
123+
minorVersion110 := "1.10"
116124
bmoFromRelease := "0.10"
117125
ironicFromRelease := "29.0"
118126
bmoToRelease := "latest"
119127
ironicToRelease := "latest"
120-
capiStableRelease, err := capi_e2e.GetStableReleaseOfMinor(ctx, minorVersion)
121-
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for CAPI minor release : %s", minorVersion)
122-
capm3StableRelease, err := GetStableReleaseOfMinor(ctx, releaseMarkerPrefixCAPM3, minorVersion)
123-
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for CAPM3 minor release : %s", minorVersion)
124-
ipamStableRelease, err := GetStableReleaseOfMinor(ctx, releaseMarkerPrefixIPAM, minorVersion)
125-
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for IPAM minor release : %s", minorVersion)
128+
capiStableRelease110, err := capi_e2e.GetStableReleaseOfMinor(ctx, minorVersion110)
129+
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for CAPI minor release : %s", minorVersion110)
130+
capm3StableRelease, err := GetStableReleaseOfMinor(ctx, releaseMarkerPrefixCAPM3, minorVersion110)
131+
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for CAPM3 minor release : %s", minorVersion110)
132+
ipamStableRelease, err := GetStableReleaseOfMinor(ctx, releaseMarkerPrefixIPAM, minorVersion110)
133+
Expect(err).ToNot(HaveOccurred(), "Failed to get stable version for IPAM minor release : %s", minorVersion110)
134+
135+
// Get latest patch release for 1.11.x
136+
minorVersion111 := "1.11"
137+
capiStableRelease111, err := capi_e2e.GetStableReleaseOfMinor(ctx, minorVersion111)
138+
Expect(err).ToNot(HaveOccurred(), "Failed to get stable patch version for CAPI minor release : %s", minorVersion111)
126139

127140
capi_e2e.ClusterctlUpgradeSpec(ctx, func() capi_e2e.ClusterctlUpgradeSpecInput {
128141
return capi_e2e.ClusterctlUpgradeSpecInput{
@@ -131,14 +144,14 @@ var _ = Describe("When testing cluster upgrade from releases (v1.10=>current)",
131144
BootstrapClusterProxy: bootstrapClusterProxy,
132145
ArtifactFolder: artifactFolder,
133146
SkipCleanup: skipCleanup,
134-
InitWithCoreProvider: fmt.Sprintf(providerCAPIPrefix, capiStableRelease),
135-
InitWithBootstrapProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStableRelease)},
136-
InitWithControlPlaneProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStableRelease)},
147+
InitWithCoreProvider: fmt.Sprintf(providerCAPIPrefix, capiStableRelease110),
148+
InitWithBootstrapProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStableRelease110)},
149+
InitWithControlPlaneProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStableRelease110)},
137150
InitWithInfrastructureProviders: []string{fmt.Sprintf(providerMetal3Prefix, capm3StableRelease)},
138151
InitWithIPAMProviders: []string{fmt.Sprintf(providerMetal3Prefix, ipamStableRelease)},
139152
InitWithKubernetesVersion: k8sVersion,
140153
WorkloadKubernetesVersion: k8sVersion,
141-
InitWithBinary: fmt.Sprintf(clusterctlDownloadURL, capiStableRelease),
154+
InitWithBinary: fmt.Sprintf(clusterctlDownloadURL, capiStableRelease110),
142155
PreInit: func(clusterProxy framework.ClusterProxy) {
143156
preInitFunc(clusterProxy, bmoFromRelease, ironicFromRelease)
144157
// Override capi/capm3 versions exported in preInit
@@ -147,8 +160,13 @@ var _ = Describe("When testing cluster upgrade from releases (v1.10=>current)",
147160
os.Setenv("KUBECONFIG_BOOTSTRAP", bootstrapClusterProxy.GetKubeconfigPath())
148161
},
149162
Upgrades: []capi_e2e.ClusterctlUpgradeSpecInputUpgrade{
150-
{ // Upgrade to latest v1beta2.
151-
Contract: clusterv1.GroupVersion.Version,
163+
{ // Upgrade to latest 1.11.x
164+
WithBinary: fmt.Sprintf(clusterctlDownloadURL, capiStableRelease111),
165+
CoreProvider: fmt.Sprintf(providerCAPIPrefix, capiStableRelease111),
166+
BootstrapProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStableRelease111)},
167+
ControlPlaneProviders: []string{fmt.Sprintf(providerKubeadmPrefix, capiStableRelease111)},
168+
InfrastructureProviders: []string{fmt.Sprintf(providerMetal3Prefix, capm3StableRelease)},
169+
IPAMProviders: []string{fmt.Sprintf(providerMetal3Prefix, ipamStableRelease)},
152170
},
153171
},
154172
PostNamespaceCreated: postClusterctlUpgradeNamespaceCreated,

0 commit comments

Comments
 (0)