diff --git a/.github/workflows/daily-nightly-jobs.yml b/.github/workflows/daily-nightly-jobs.yml index 280883acf..5bdce9b1e 100644 --- a/.github/workflows/daily-nightly-jobs.yml +++ b/.github/workflows/daily-nightly-jobs.yml @@ -178,6 +178,42 @@ jobs: name: ceph-smoke-suite-quincy-artifact path: /home/runner/work/rook/rook/tests/integration/_output/tests/ + smoke-suite-reef-devel: + if: github.repository == 'rook/rook' + runs-on: ubuntu-20.04 + steps: + - name: checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: setup cluster resources + uses: ./.github/workflows/integration-test-config-latest-k8s + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + kubernetes-version: "1.25.0" + + - name: TestCephSmokeSuite + run: | + export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1) + SKIP_CLEANUP_POLICY=false CEPH_SUITE_VERSION="reef-devel" go test -v -timeout 1800s -run TestCephSmokeSuite github.com/rook/rook/tests/integration + + - name: collect common logs + if: always() + run: | + export LOG_DIR="/home/runner/work/rook/rook/tests/integration/_output/tests/" + export CLUSTER_NAMESPACE="smoke-ns" + export OPERATOR_NAMESPACE="smoke-ns-system" + tests/scripts/collect-logs.sh + + - name: Artifact + uses: actions/upload-artifact@v3 + if: failure() + with: + name: ceph-smoke-suite-reef-artifact + path: /home/runner/work/rook/rook/tests/integration/_output/tests/ + + smoke-suite-ceph-main: if: github.repository == 'rook/rook' runs-on: ubuntu-20.04 diff --git a/deploy/examples/cluster-test.yaml b/deploy/examples/cluster-test.yaml index 5bfa62515..58c915451 100644 --- a/deploy/examples/cluster-test.yaml +++ b/deploy/examples/cluster-test.yaml @@ -29,7 +29,7 @@ metadata: spec: dataDirHostPath: /var/lib/rook cephVersion: - image: quay.io/ceph/ceph:v17 + image: quay.io/ceph/ceph:v18 allowUnsupported: true mon: count: 1 diff --git a/pkg/operator/ceph/cluster/version_test.go b/pkg/operator/ceph/cluster/version_test.go index 4be740d42..e0df9bb43 100755 --- a/pkg/operator/ceph/cluster/version_test.go +++ b/pkg/operator/ceph/cluster/version_test.go @@ -33,16 +33,16 @@ import ( func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { // 1st test - fakeImageVersion := cephver.Quincy + fakeImageVersion := cephver.Reef fakeRunningVersions := []byte(` { "mon": { - "ceph version 16.2.5 (cbff874f9007f1869bfd3821b7e33b2a6ffd4988) pacific (stable)": 1, - "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 1, + "ceph version 18.1.0 (4be78cea2b4ae54a27b1049cffa1208df48bffae) reef (stable)": 2 } }`) var dummyRunningVersions cephv1.CephDaemonsVersions - err := json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions) + err := json.Unmarshal(fakeRunningVersions, &dummyRunningVersions) assert.NoError(t, err) m, err := diffImageSpecAndClusterRunningVersion(fakeImageVersion, dummyRunningVersions) @@ -53,12 +53,12 @@ func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { fakeRunningVersions = []byte(` { "overall": { - "ceph version 16.2.5 (cbff874f9007f1869bfd3821b7e33b2a6ffd4988) pacific (stable)": 1, - "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 1, + "ceph version 18.1.0 (4be78cea2b4ae54a27b1049cffa1208df48bffae) reef (stable)": 2 } }`) var dummyRunningVersions2 cephv1.CephDaemonsVersions - err = json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions2) + err = json.Unmarshal(fakeRunningVersions, &dummyRunningVersions2) assert.NoError(t, err) m, err = diffImageSpecAndClusterRunningVersion(fakeImageVersion, dummyRunningVersions2) @@ -69,11 +69,11 @@ func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { fakeRunningVersions = []byte(` { "overall": { - "ceph version 16.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) pacific (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 } }`) var dummyRunningVersions3 cephv1.CephDaemonsVersions - err = json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions3) + err = json.Unmarshal(fakeRunningVersions, &dummyRunningVersions3) assert.NoError(t, err) // Allow the downgrade @@ -86,11 +86,11 @@ func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { fakeRunningVersions = []byte(` { "overall": { - "ceph version 16.2.5 (cbff874f9007f1869bfd3821b7e33b2a6ffd4988) pacific (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 } }`) var dummyRunningVersions4 cephv1.CephDaemonsVersions - err = json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions4) + err = json.Unmarshal(fakeRunningVersions, &dummyRunningVersions4) assert.NoError(t, err) m, err = diffImageSpecAndClusterRunningVersion(fakeImageVersion, dummyRunningVersions4) @@ -98,16 +98,16 @@ func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { assert.True(t, m) // 5 test - spec version and running cluster versions are identical --> we upgrade - fakeImageVersion = cephver.CephVersion{Major: 16, Minor: 2, Extra: 2, + fakeImageVersion = cephver.CephVersion{Major: 17, Minor: 2, Extra: 0, CommitID: "3a54b2b6d167d4a2a19e003a705696d4fe619afc"} fakeRunningVersions = []byte(` { "overall": { - "ceph version 16.2.2 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) pacific (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 } }`) var dummyRunningVersions5 cephv1.CephDaemonsVersions - err = json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions5) + err = json.Unmarshal(fakeRunningVersions, &dummyRunningVersions5) assert.NoError(t, err) m, err = diffImageSpecAndClusterRunningVersion(fakeImageVersion, dummyRunningVersions5) @@ -115,16 +115,16 @@ func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { assert.False(t, m) // 6 test - spec version and running cluster have different commit ID - fakeImageVersion = cephver.CephVersion{Major: 16, Minor: 2, Extra: 11, Build: 139, - CommitID: "5c0dc966af809fd1d429ec7bac48962a746af243"} + fakeImageVersion = cephver.CephVersion{Major: 17, Minor: 2, Extra: 0, Build: 139, + CommitID: "3a54b2b6d167d4a2a19e003a705696d4fe619afc"} fakeRunningVersions = []byte(` { "overall": { - "ceph version 16.2.11-139.el8cp (3a54b2b6d167d4a2a19e003a705696d4fe619afc) pacific (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 } }`) var dummyRunningVersions6 cephv1.CephDaemonsVersions - err = json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions6) + err = json.Unmarshal(fakeRunningVersions, &dummyRunningVersions6) assert.NoError(t, err) m, err = diffImageSpecAndClusterRunningVersion(fakeImageVersion, dummyRunningVersions6) @@ -132,16 +132,16 @@ func TestDiffImageSpecAndClusterRunningVersion(t *testing.T) { assert.True(t, m) // 7 test - spec version and running cluster have same commit ID - fakeImageVersion = cephver.CephVersion{Major: 16, Minor: 2, Extra: 11, Build: 139, + fakeImageVersion = cephver.CephVersion{Major: 17, Minor: 2, Extra: 0, CommitID: "3a54b2b6d167d4a2a19e003a705696d4fe619afc"} fakeRunningVersions = []byte(` { "overall": { - "ceph version 16.2.11-139.el8cp (3a54b2b6d167d4a2a19e003a705696d4fe619afc) pacific (stable)": 2 + "ceph version 17.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) quincy (stable)": 2 } }`) var dummyRunningVersions7 cephv1.CephDaemonsVersions - err = json.Unmarshal([]byte(fakeRunningVersions), &dummyRunningVersions7) + err = json.Unmarshal(fakeRunningVersions, &dummyRunningVersions7) assert.NoError(t, err) m, err = diffImageSpecAndClusterRunningVersion(fakeImageVersion, dummyRunningVersions7) @@ -165,6 +165,8 @@ func TestMinVersion(t *testing.T) { assert.NoError(t, c.validateCephVersion(v)) v = &cephver.CephVersion{Major: 17} assert.NoError(t, c.validateCephVersion(v)) + v = &cephver.CephVersion{Major: 18} + assert.NoError(t, c.validateCephVersion(v)) } func TestSupportedVersion(t *testing.T) { @@ -183,8 +185,12 @@ func TestSupportedVersion(t *testing.T) { v = &cephver.CephVersion{Major: 17, Minor: 2, Extra: 0} assert.NoError(t, c.validateCephVersion(v)) - // Reef is not supported + // Reef is supported v = &cephver.CephVersion{Major: 18, Minor: 2, Extra: 0} + assert.NoError(t, c.validateCephVersion(v)) + + // Squid is not supported + v = &cephver.CephVersion{Major: 19, Minor: 1, Extra: 0} assert.Error(t, c.validateCephVersion(v)) // Unsupported versions are now valid diff --git a/pkg/operator/ceph/version/version.go b/pkg/operator/ceph/version/version.go index 1a4f3b698..b6c87c096 100644 --- a/pkg/operator/ceph/version/version.go +++ b/pkg/operator/ceph/version/version.go @@ -48,12 +48,14 @@ var ( Quincy = CephVersion{17, 0, 0, 0, ""} // Reef Ceph version Reef = CephVersion{18, 0, 0, 0, ""} + // Squid ceph version + Squid = CephVersion{19, 0, 0, 0, ""} // supportedVersions are production-ready versions that rook supports - supportedVersions = []CephVersion{Pacific, Quincy} + supportedVersions = []CephVersion{Pacific, Quincy, Reef} // unsupportedVersions are possibly Ceph pin-point release that introduced breaking changes and not recommended - unsupportedVersions = []CephVersion{} + unsupportedVersions []CephVersion // for parsing the output of `ceph --version` versionPattern = regexp.MustCompile(`ceph version (\d+)\.(\d+)\.(\d+)`) @@ -90,6 +92,8 @@ func (v *CephVersion) ReleaseName() string { return "quincy" case Reef.Major: return "reef" + case Squid.Major: + return "squid" default: return unknownVersionString } @@ -180,6 +184,11 @@ func (v *CephVersion) IsReef() bool { return v.isRelease(Reef) } +// IsSquid checks if the Ceph version is Squid +func (v *CephVersion) IsSquid() bool { + return v.isRelease(Squid) +} + // IsAtLeast checks a given Ceph version is at least a given one func (v *CephVersion) IsAtLeast(other CephVersion) bool { if v.Major > other.Major { diff --git a/pkg/operator/ceph/version/version_test.go b/pkg/operator/ceph/version/version_test.go index 896d99082..31b2cfc25 100644 --- a/pkg/operator/ceph/version/version_test.go +++ b/pkg/operator/ceph/version/version_test.go @@ -101,7 +101,7 @@ func TestSupported(t *testing.T) { for _, v := range supportedVersions { assert.True(t, v.Supported()) } - assert.False(t, Reef.Supported()) + assert.False(t, Squid.Supported()) } func TestIsRelease(t *testing.T) { diff --git a/tests/framework/installer/ceph_installer.go b/tests/framework/installer/ceph_installer.go index 4a73668d9..67cb0e37b 100644 --- a/tests/framework/installer/ceph_installer.go +++ b/tests/framework/installer/ceph_installer.go @@ -44,11 +44,14 @@ import ( const ( // test with the latest pacific build pacificTestImage = "quay.io/ceph/ceph:v16" - // test with the latest pacific build + // test with the latest quincy build quincyTestImage = "quay.io/ceph/ceph:v17" + // test with the latest reef build + reefTestImage = "quay.io/ceph/ceph:v18" // test with the current development version of Pacific pacificDevelTestImage = "quay.io/ceph/daemon-base:latest-pacific-devel" quincyDevelTestImage = "quay.io/ceph/daemon-base:latest-quincy-devel" + reefDevelTestImage = "quay.io/ceph/daemon-base:latest-reef-devel" // test with the latest Ceph main image mainTestImage = "quay.io/ceph/daemon-base:latest-main-devel" cephOperatorLabel = "app=rook-ceph-operator" @@ -67,6 +70,8 @@ var ( PacificDevelVersion = cephv1.CephVersionSpec{Image: pacificDevelTestImage} QuincyVersion = cephv1.CephVersionSpec{Image: quincyTestImage} QuincyDevelVersion = cephv1.CephVersionSpec{Image: quincyDevelTestImage} + ReefVersion = cephv1.CephVersionSpec{Image: reefTestImage} + ReefDevelVersion = cephv1.CephVersionSpec{Image: reefDevelTestImage} MainVersion = cephv1.CephVersionSpec{Image: mainTestImage, AllowUnsupported: true} volumeReplicationBaseURL = fmt.Sprintf("https://raw.githubusercontent.com/csi-addons/kubernetes-csi-addons/%s/config/crd/bases/", volumeReplicationVersion) volumeReplicationCRDURL = volumeReplicationBaseURL + "replication.storage.openshift.io_volumereplications.yaml" @@ -93,6 +98,8 @@ func ReturnCephVersion() cephv1.CephVersionSpec { return PacificDevelVersion case "quincy-devel": return QuincyDevelVersion + case "reef-devel": + return ReefDevelVersion default: return QuincyVersion } diff --git a/tests/integration/ceph_upgrade_test.go b/tests/integration/ceph_upgrade_test.go index 297b41046..21a370a7a 100644 --- a/tests/integration/ceph_upgrade_test.go +++ b/tests/integration/ceph_upgrade_test.go @@ -168,6 +168,17 @@ func (s *UpgradeSuite) testUpgrade(useHelm bool, initialCephVersion v1.CephVersi s.verifyFilesAfterUpgrade(newFile, rbdFilesToRead, cephfsFilesToRead) logger.Infof("Verified upgrade from pacific to quincy") + // + // Upgrade from quincy to reef + // + logger.Infof("*** UPGRADING CEPH FROM QUINCY TO REEF ***") + s.gatherLogs(s.settings.OperatorNamespace, "_before_reef_upgrade") + s.upgradeCephVersion(installer.ReefVersion.Image, numOSDs) + // Verify reading and writing to the test clients + newFile = "post-reef-upgrade-file" + s.verifyFilesAfterUpgrade(newFile, rbdFilesToRead, cephfsFilesToRead) + logger.Infof("Verified upgrade from quincy to reef") + checkCephObjectUser(&s.Suite, s.helper, s.k8sh, s.namespace, installer.ObjectStoreName, objectUserID, true, false) }