Merge pull request #8758 from leseb/more-test

ci: add daily jobs
This commit is contained in:
Sébastien Han
2021-09-27 15:23:49 +02:00
committed by GitHub
7 changed files with 493 additions and 156 deletions
@@ -1,82 +0,0 @@
name: Canary integration tests ARM64
on:
schedule:
- cron: '0 0 * * *' # every day at midnight
defaults:
run:
# reference: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell
shell: bash --noprofile --norc -eo pipefail -x {0}
jobs:
canary-arm64:
runs-on: [self-hosted, ubuntu-20.04, ARM64]
if: github.repository == 'rook/rook'
env:
BLOCK: /dev/sdb
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: teardown minikube and docker
run: |
uptime
minikube delete
docker system prune -a
- name: setup minikube
run: |
# sudo apt-get install build-essential -y
# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
# sudo install minikube-linux-arm64 /usr/local/bin/minikube
# sudo rm -f minikube-linux-arm64
# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"
# sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
minikube start --memory 28g --cpus=12 --driver=docker
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk and create partitions for osds
run: |
tests/scripts/github-action-helper.sh use_local_disk
tests/scripts/create-bluestore-partitions.sh --disk "$BLOCK" --osd-count 1
- name: validate-yaml
run: tests/scripts/github-action-helper.sh validate_yaml
- name: deploy cluster
run: |
# removing liveness probes since the env is slow and the probe is killing the daemons
yq write -d1 -i cluster/examples/kubernetes/ceph/cluster-test.yaml "spec.healthCheck.livenessProbe.mon.disabled" true
yq write -d1 -i cluster/examples/kubernetes/ceph/cluster-test.yaml "spec.healthCheck.livenessProbe.mgr.disabled" true
yq write -d1 -i cluster/examples/kubernetes/ceph/cluster-test.yaml "spec.healthCheck.livenessProbe.osd.disabled" true
tests/scripts/github-action-helper.sh deploy_cluster
# there are no package for arm64 nfs-ganesha
kubectl delete -f cluster/examples/kubernetes/ceph/nfs-test.yaml
- name: wait for prepare pod
run: timeout 900 sh -c 'until kubectl -n rook-ceph logs -f $(kubectl -n rook-ceph get pod -l app=rook-ceph-osd-prepare -o jsonpath='{.items[*].metadata.name}'); do sleep 5; done' || kubectl -n rook-ceph get all && kubectl logs -n rook-ceph deploy/rook-ceph-operator
- name: wait for ceph to be ready
run: tests/scripts/github-action-helper.sh wait_for_ceph_to_be_ready all 1
- name: teardown minikube and docker
run: |
minikube delete
docker system prune -a
- name: upload canary test result
uses: actions/upload-artifact@v2
if: always()
with:
name: canary-arm64
path: test
+334
View File
@@ -0,0 +1,334 @@
name: Daily nightly jobs
on:
schedule:
- cron: "0 0 * * *" # every day at midnight
defaults:
run:
# reference: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell
shell: bash --noprofile --norc -eo pipefail -x {0}
jobs:
canary-arm64:
runs-on: [self-hosted, ubuntu-20.04, ARM64]
if: github.repository == 'rook/rook'
env:
BLOCK: /dev/sdb
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: teardown minikube and docker
run: |
uptime
minikube delete
docker system prune -a
- name: setup minikube
run: |
# sudo apt-get install build-essential -y
# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
# sudo install minikube-linux-arm64 /usr/local/bin/minikube
# sudo rm -f minikube-linux-arm64
# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"
# sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
minikube start --memory 28g --cpus=12 --driver=docker
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk and create partitions for osds
run: |
tests/scripts/github-action-helper.sh use_local_disk
tests/scripts/create-bluestore-partitions.sh --disk "$BLOCK" --osd-count 1
- name: validate-yaml
run: tests/scripts/github-action-helper.sh validate_yaml
- name: deploy cluster
run: |
# removing liveness probes since the env is slow and the probe is killing the daemons
yq write -d1 -i cluster/examples/kubernetes/ceph/cluster-test.yaml "spec.healthCheck.livenessProbe.mon.disabled" true
yq write -d1 -i cluster/examples/kubernetes/ceph/cluster-test.yaml "spec.healthCheck.livenessProbe.mgr.disabled" true
yq write -d1 -i cluster/examples/kubernetes/ceph/cluster-test.yaml "spec.healthCheck.livenessProbe.osd.disabled" true
tests/scripts/github-action-helper.sh deploy_cluster
# there are no package for arm64 nfs-ganesha
kubectl delete -f cluster/examples/kubernetes/ceph/nfs-test.yaml
- name: wait for prepare pod
run: timeout 900 sh -c 'until kubectl -n rook-ceph logs -f $(kubectl -n rook-ceph get pod -l app=rook-ceph-osd-prepare -o jsonpath='{.items[*].metadata.name}'); do sleep 5; done' || kubectl -n rook-ceph get all && kubectl logs -n rook-ceph deploy/rook-ceph-operator
- name: wait for ceph to be ready
run: tests/scripts/github-action-helper.sh wait_for_ceph_to_be_ready all 1
- name: teardown minikube and docker
run: |
minikube delete
docker system prune -a
- name: upload canary test result
uses: actions/upload-artifact@v2
if: always()
with:
name: canary-arm64
path: test
smoke-suite-pacific-devel:
runs-on: ubuntu-18.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: setup minikube
uses: manusa/actions-setup-minikube@v2.4.2
with:
minikube version: "v1.22.0"
kubernetes version: "v1.22.0"
start args: --memory 6g --cpus=2
github token: ${{ secrets.GITHUB_TOKEN }}
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk
run: tests/scripts/github-action-helper.sh use_local_disk_for_integration_test
- name: build rook
run: tests/scripts/github-action-helper.sh build_rook
- name: TestCephSmokeSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
SKIP_CLEANUP_POLICY=false CEPH_SUITE_VERSION="pacific-devel" go test -v -timeout 1800s -run TestCephSmokeSuite github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
if: failure()
with:
name: ceph-smoke-suite-artifact
path: /home/runner/work/rook/rook/tests/integration/_output/tests/
smoke-suite-ceph-master:
runs-on: ubuntu-18.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: setup minikube
uses: manusa/actions-setup-minikube@v2.4.2
with:
minikube version: "v1.22.0"
kubernetes version: "v1.22.0"
start args: --memory 6g --cpus=2
github token: ${{ secrets.GITHUB_TOKEN }}
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk
run: tests/scripts/github-action-helper.sh use_local_disk_for_integration_test
- name: build rook
run: tests/scripts/github-action-helper.sh build_rook
- name: TestCephSmokeSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
SKIP_CLEANUP_POLICY=false CEPH_SUITE_VERSION=master go test -v -timeout 1800s -run TestCephSmokeSuite github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
if: failure()
with:
name: ceph-smoke-suite-artifact
path: /home/runner/work/rook/rook/tests/integration/_output/tests/
object-suite-pacific-devel:
runs-on: ubuntu-18.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: setup minikube
uses: manusa/actions-setup-minikube@v2.4.2
with:
minikube version: "v1.22.0"
kubernetes version: "v1.22.0"
start args: --memory 6g --cpus=2
github token: ${{ secrets.GITHUB_TOKEN }}
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk
run: tests/scripts/github-action-helper.sh use_local_disk_for_integration_test
- name: build rook
run: tests/scripts/github-action-helper.sh build_rook
- name: TestCephObjectSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
SKIP_CLEANUP_POLICY=false CEPH_SUITE_VERSION="pacific-devel" go test -v -timeout 1800s -failfast -run TestCephObjectSuite github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
if: failure()
with:
name: ceph-object-suite-artifact
path: /home/runner/work/rook/rook/tests/integration/_output/tests/
object-suite-master:
runs-on: ubuntu-18.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: setup minikube
uses: manusa/actions-setup-minikube@v2.4.2
with:
minikube version: "v1.22.0"
kubernetes version: "v1.22.0"
start args: --memory 6g --cpus=2
github token: ${{ secrets.GITHUB_TOKEN }}
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk
run: tests/scripts/github-action-helper.sh use_local_disk_for_integration_test
- name: build rook
run: tests/scripts/github-action-helper.sh build_rook
- name: TestCephObjectSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
SKIP_CLEANUP_POLICY=false CEPH_SUITE_VERSION=master go test -v -timeout 1800s -failfast -run TestCephObjectSuite github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
if: failure()
with:
name: ceph-object-suite-artifact
path: /home/runner/work/rook/rook/tests/integration/_output/tests/
upgrade-from-pacific-stable-to-pacific-devel:
runs-on: ubuntu-18.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: setup minikube
uses: manusa/actions-setup-minikube@v2.4.2
with:
minikube version: "v1.22.0"
kubernetes version: "v1.22.0"
start args: --memory 6g --cpus=2
github token: ${{ secrets.GITHUB_TOKEN }}
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk
run: tests/scripts/github-action-helper.sh use_local_disk_for_integration_test
- name: build rook
run: tests/scripts/github-action-helper.sh build_rook
- name: TestCephUpgradeSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
go test -v -timeout 1800s -failfast -run TestCephUpgradeSuite/TestUpgradeCephToPacificDevel github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
if: failure()
with:
name: ceph-upgrade-suite-artifact
path: /home/runner/work/rook/rook/tests/integration/_output/tests/
upgrade-from-octopus-stable-to-octopus-devel:
runs-on: ubuntu-18.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: setup golang
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: setup minikube
uses: manusa/actions-setup-minikube@v2.4.2
with:
minikube version: "v1.22.0"
kubernetes version: "v1.22.0"
start args: --memory 6g --cpus=2
github token: ${{ secrets.GITHUB_TOKEN }}
- name: print k8s cluster status
run: tests/scripts/github-action-helper.sh print_k8s_cluster_status
- name: use local disk
run: tests/scripts/github-action-helper.sh use_local_disk_for_integration_test
- name: build rook
run: tests/scripts/github-action-helper.sh build_rook
- name: TestCephUpgradeSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
go test -v -timeout 1800s -failfast -run TestCephUpgradeSuite/TestUpgradeCephToOctopusDevel github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
if: failure()
with:
name: ceph-upgrade-suite-artifact
path: /home/runner/work/rook/rook/tests/integration/_output/tests/
@@ -49,7 +49,7 @@ jobs:
- name: TestCephUpgradeSuite
run: |
export DEVICE_FILTER=$(lsblk|awk '/14G/ {print $1}'| head -1)
go test -v -timeout 1800s -failfast -run CephUpgradeSuite github.com/rook/rook/tests/integration
go test -v -timeout 1800s -failfast -run CephUpgradeSuite/TestUpgradeRookToMaster github.com/rook/rook/tests/integration
- name: Artifact
uses: actions/upload-artifact@v2
+17 -1
View File
@@ -51,8 +51,11 @@ const (
octopusTestImage = "quay.io/ceph/ceph:v15"
// test with the latest pacific build
pacificTestImage = "quay.io/ceph/ceph:v16.2.6"
// test with the current development version of Pacific
pacificDevelTestImage = "quay.io/ceph/daemon-base:latest-pacific-devel"
octopusDevelTestImage = "quay.io/ceph/daemon-base:latest-octopus-devel"
// test with the latest master image
masterTestImage = "ceph/daemon-base:latest-master-devel"
masterTestImage = "quay.io/ceph/daemon-base:latest-master-devel"
cephOperatorLabel = "app=rook-ceph-operator"
defaultclusterName = "test-cluster"
@@ -67,7 +70,9 @@ var (
NautilusVersion = cephv1.CephVersionSpec{Image: nautilusTestImage}
NautilusPartitionVersion = cephv1.CephVersionSpec{Image: nautilusTestImagePartition}
OctopusVersion = cephv1.CephVersionSpec{Image: octopusTestImage}
OctopusDevelVersion = cephv1.CephVersionSpec{Image: octopusDevelTestImage}
PacificVersion = cephv1.CephVersionSpec{Image: pacificTestImage}
PacificDevelVersion = cephv1.CephVersionSpec{Image: pacificDevelTestImage}
MasterVersion = cephv1.CephVersionSpec{Image: masterTestImage, AllowUnsupported: true}
)
@@ -83,6 +88,17 @@ type CephInstaller struct {
T func() *testing.T
}
func ReturnCephVersion() cephv1.CephVersionSpec {
switch os.Getenv("CEPH_SUITE_VERSION") {
case "master":
return MasterVersion
case "pacific-devel":
return PacificDevelVersion
default:
return PacificVersion
}
}
// CreateCephOperator creates rook-operator via kubectl
func (h *CephInstaller) CreateCephOperator() (err error) {
// creating rook resources
+1 -1
View File
@@ -75,7 +75,7 @@ func (s *ObjectSuite) SetupSuite() {
EnableAdmissionController: true,
UseCrashPruner: true,
RookVersion: installer.LocalBuildTag,
CephVersion: installer.PacificVersion,
CephVersion: installer.ReturnCephVersion(),
}
s.settings.ApplyEnvVars()
s.installer, s.k8sh = StartTestCluster(s.T, s.settings)
+1 -1
View File
@@ -94,7 +94,7 @@ func (s *SmokeSuite) SetupSuite() {
EnableAdmissionController: true,
UseCrashPruner: true,
RookVersion: installer.LocalBuildTag,
CephVersion: installer.PacificVersion,
CephVersion: installer.ReturnCephVersion(),
}
s.settings.ApplyEnvVars()
s.installer, s.k8sh = StartTestCluster(s.T, s.settings)
+139 -70
View File
@@ -35,6 +35,10 @@ import (
const (
rbdPodName = "test-pod-upgrade"
operatorContainer = "rook-ceph-operator"
poolName = "upgradepool"
storageClassName = "block-upgrade"
blockName = "block-claim-upgrade"
bucketPrefix = "generate-me" // use generated bucket name for this test
)
// ************************************************
@@ -90,86 +94,26 @@ func (s *UpgradeSuite) TearDownSuite() {
s.installer.UninstallRook()
}
func (s *UpgradeSuite) TestUpgradeToMaster() {
//
// Create block, object, and file storage before the upgrade
//
poolName := "upgradepool"
storageClassName := "block-upgrade"
blockName := "block-claim-upgrade"
logger.Infof("Initializing block before the upgrade")
func (s *UpgradeSuite) TestUpgradeRookToMaster() {
message := "my simple message"
objectStoreName := "upgraded-object"
objectUserID := "upgraded-user"
preFilename := "pre-upgrade-file"
numOSDs, filesystemName, rbdFilesToRead, cephfsFilesToRead := s.deployClusterforUpgrade(objectStoreName, objectUserID, message, preFilename)
s.settings.CephVersion = installer.NautilusVersion
clusterInfo := client.AdminClusterInfo(s.namespace)
setupBlockLite(s.helper, s.k8sh, s.Suite, clusterInfo, poolName, storageClassName, blockName, rbdPodName)
createPodWithBlock(s.helper, s.k8sh, s.Suite, s.namespace, storageClassName, rbdPodName, blockName)
// FIX: We should require block images to be removed. See tracking issue:
// <INSERT ISSUE>
requireBlockImagesRemoved := false
defer blockTestDataCleanUp(s.helper, s.k8sh, s.Suite, clusterInfo, poolName, storageClassName, blockName, rbdPodName, requireBlockImagesRemoved)
// Create the filesystem
logger.Infof("Initializing file before the upgrade")
filesystemName := "upgrade-test-fs"
activeCount := 1
createFilesystem(s.helper, s.k8sh, s.Suite, s.settings, filesystemName, activeCount)
// Start the file test client
fsStorageClass := "file-upgrade"
assert.NoError(s.T(), s.helper.FSClient.CreateStorageClass(filesystemName, s.settings.OperatorNamespace, s.namespace, fsStorageClass))
createFilesystemConsumerPod(s.helper, s.k8sh, s.Suite, s.settings, filesystemName, fsStorageClass)
defer func() {
blockTestDataCleanUp(s.helper, s.k8sh, s.Suite, clusterInfo, poolName, storageClassName, blockName, rbdPodName, requireBlockImagesRemoved)
cleanupFilesystemConsumer(s.helper, s.k8sh, s.Suite, s.namespace, filePodName)
cleanupFilesystem(s.helper, s.k8sh, s.Suite, s.namespace, filesystemName)
}()
logger.Infof("Initializing object before the upgrade")
objectStoreName := "upgraded-object"
runObjectE2ETestLite(s.helper, s.k8sh, s.Suite, s.settings, objectStoreName, 1, false)
logger.Infof("Initializing object user before the upgrade")
objectUserID := "upgraded-user"
createCephObjectUser(s.Suite, s.helper, s.k8sh, s.namespace, objectStoreName, objectUserID, false, false)
logger.Info("Initializing object bucket claim before the upgrade")
bucketStorageClassName := "rook-smoke-delete-bucket"
bucketPrefix := "generate-me" // use generated bucket name for this test
cobErr := s.helper.BucketClient.CreateBucketStorageClass(s.namespace, objectStoreName, bucketStorageClassName, "Delete", region)
require.Nil(s.T(), cobErr)
cobcErr := s.helper.BucketClient.CreateObc(obcName, bucketStorageClassName, bucketPrefix, maxObject, false)
require.Nil(s.T(), cobcErr)
defer func() {
_ = s.helper.ObjectUserClient.Delete(s.namespace, objectUserID)
_ = s.helper.BucketClient.DeleteObc(obcName, bucketStorageClassName, bucketPrefix, maxObject, false)
_ = s.helper.BucketClient.DeleteBucketStorageClass(s.namespace, objectStoreName, bucketStorageClassName, "Delete", region)
objectStoreCleanUp(s.Suite, s.helper, s.k8sh, s.settings.Namespace, objectStoreName)
}()
created := utils.Retry(12, 2*time.Second, "OBC is created", func() bool {
// do not check if bound here b/c this fails in Rook v1.4
return s.helper.BucketClient.CheckOBC(obcName, "created")
})
require.True(s.T(), created)
// verify that we're actually running the right pre-upgrade image
s.verifyOperatorImage(installer.Version1_6)
message := "my simple message"
preFilename := "pre-upgrade-file"
assert.NoError(s.T(), s.k8sh.WriteToPod("", rbdPodName, preFilename, message))
assert.NoError(s.T(), s.k8sh.ReadFromPod("", rbdPodName, preFilename, message))
// we will keep appending to this to continue verifying old files through the upgrades
rbdFilesToRead := []string{preFilename}
cephfsFilesToRead := []string{}
// Get some info about the currently deployed OSDs to determine later if they are all updated
osdDepList, err := k8sutil.GetDeployments(s.k8sh.Clientset, s.namespace, "app=rook-ceph-osd")
require.NoError(s.T(), err)
osdDeps := osdDepList.Items
numOSDs := len(osdDeps) // there should be this many upgraded OSDs
require.NotEqual(s.T(), 0, numOSDs)
//
// Upgrade Rook from v1.6 to master
//
@@ -179,7 +123,7 @@ func (s *UpgradeSuite) TestUpgradeToMaster() {
s.verifyOperatorImage(installer.LocalBuildTag)
s.verifyRookUpgrade(numOSDs)
err = s.installer.WaitForToolbox(s.namespace)
err := s.installer.WaitForToolbox(s.namespace)
assert.NoError(s.T(), err)
logger.Infof("Done with automatic upgrade from %s to master", installer.Version1_6)
@@ -223,6 +167,131 @@ func (s *UpgradeSuite) TestUpgradeToMaster() {
checkCephObjectUser(s.Suite, s.helper, s.k8sh, s.namespace, objectStoreName, objectUserID, true, false)
}
func (s *UpgradeSuite) TestUpgradeCephToOctopusDevel() {
message := "my simple message"
objectStoreName := "upgraded-object"
objectUserID := "upgraded-user"
preFilename := "pre-upgrade-file"
s.settings.CephVersion = installer.OctopusVersion
numOSDs, filesystemName, rbdFilesToRead, cephfsFilesToRead := s.deployClusterforUpgrade(objectStoreName, objectUserID, message, preFilename)
clusterInfo := client.AdminClusterInfo(s.namespace)
requireBlockImagesRemoved := false
defer func() {
blockTestDataCleanUp(s.helper, s.k8sh, s.Suite, clusterInfo, poolName, storageClassName, blockName, rbdPodName, requireBlockImagesRemoved)
cleanupFilesystemConsumer(s.helper, s.k8sh, s.Suite, s.namespace, filePodName)
cleanupFilesystem(s.helper, s.k8sh, s.Suite, s.namespace, filesystemName)
_ = s.helper.ObjectUserClient.Delete(s.namespace, objectUserID)
_ = s.helper.BucketClient.DeleteObc(obcName, bucketStorageClassName, bucketPrefix, maxObject, false)
_ = s.helper.BucketClient.DeleteBucketStorageClass(s.namespace, objectStoreName, bucketStorageClassName, "Delete", region)
objectStoreCleanUp(s.Suite, s.helper, s.k8sh, s.settings.Namespace, objectStoreName)
}()
//
// Upgrade from octopus to octopus
//
logger.Infof("*** UPGRADING CEPH FROM OCTOPUS STABLE TO OCTOPUS DEVEL ***")
s.gatherLogs(s.settings.OperatorNamespace, "_before_pacific_upgrade")
s.upgradeCephVersion(installer.OctopusDevelVersion.Image, numOSDs)
// Verify reading and writing to the test clients
newFile := "post-octopus-upgrade-file"
s.verifyFilesAfterUpgrade(filesystemName, newFile, message, rbdFilesToRead, cephfsFilesToRead)
logger.Infof("Verified upgrade from octopus stable to octopus devel")
checkCephObjectUser(s.Suite, s.helper, s.k8sh, s.namespace, objectStoreName, objectUserID, true, false)
}
func (s *UpgradeSuite) TestUpgradeCephToPacificDevel() {
message := "my simple message"
objectStoreName := "upgraded-object"
objectUserID := "upgraded-user"
preFilename := "pre-upgrade-file"
s.settings.CephVersion = installer.PacificVersion
numOSDs, filesystemName, rbdFilesToRead, cephfsFilesToRead := s.deployClusterforUpgrade(objectStoreName, objectUserID, message, preFilename)
clusterInfo := client.AdminClusterInfo(s.namespace)
requireBlockImagesRemoved := false
defer func() {
blockTestDataCleanUp(s.helper, s.k8sh, s.Suite, clusterInfo, poolName, storageClassName, blockName, rbdPodName, requireBlockImagesRemoved)
cleanupFilesystemConsumer(s.helper, s.k8sh, s.Suite, s.namespace, filePodName)
cleanupFilesystem(s.helper, s.k8sh, s.Suite, s.namespace, filesystemName)
_ = s.helper.ObjectUserClient.Delete(s.namespace, objectUserID)
_ = s.helper.BucketClient.DeleteObc(obcName, bucketStorageClassName, bucketPrefix, maxObject, false)
_ = s.helper.BucketClient.DeleteBucketStorageClass(s.namespace, objectStoreName, bucketStorageClassName, "Delete", region)
objectStoreCleanUp(s.Suite, s.helper, s.k8sh, s.settings.Namespace, objectStoreName)
}()
//
// Upgrade from octopus to pacific
//
logger.Infof("*** UPGRADING CEPH FROM PACIFIC STABLE TO PACIFIC DEVEL ***")
s.gatherLogs(s.settings.OperatorNamespace, "_before_pacific_upgrade")
s.upgradeCephVersion(installer.PacificDevelVersion.Image, numOSDs)
// Verify reading and writing to the test clients
newFile := "post-pacific-upgrade-file"
s.verifyFilesAfterUpgrade(filesystemName, newFile, message, rbdFilesToRead, cephfsFilesToRead)
logger.Infof("Verified upgrade from pacific stable to pacific devel")
checkCephObjectUser(s.Suite, s.helper, s.k8sh, s.namespace, objectStoreName, objectUserID, true, false)
}
func (s *UpgradeSuite) deployClusterforUpgrade(objectStoreName, objectUserID, message, preFilename string) (int, string, []string, []string) {
//
// Create block, object, and file storage before the upgrade
//
logger.Infof("Initializing block before the upgrade")
clusterInfo := client.AdminClusterInfo(s.namespace)
setupBlockLite(s.helper, s.k8sh, s.Suite, clusterInfo, poolName, storageClassName, blockName, rbdPodName)
createPodWithBlock(s.helper, s.k8sh, s.Suite, s.namespace, storageClassName, rbdPodName, blockName)
// Create the filesystem
logger.Infof("Initializing file before the upgrade")
filesystemName := "upgrade-test-fs"
activeCount := 1
createFilesystem(s.helper, s.k8sh, s.Suite, s.settings, filesystemName, activeCount)
// Start the file test client
fsStorageClass := "file-upgrade"
assert.NoError(s.T(), s.helper.FSClient.CreateStorageClass(filesystemName, s.settings.OperatorNamespace, s.namespace, fsStorageClass))
createFilesystemConsumerPod(s.helper, s.k8sh, s.Suite, s.settings, filesystemName, fsStorageClass)
logger.Infof("Initializing object before the upgrade")
runObjectE2ETestLite(s.helper, s.k8sh, s.Suite, s.settings, objectStoreName, 1, false)
logger.Infof("Initializing object user before the upgrade")
createCephObjectUser(s.Suite, s.helper, s.k8sh, s.namespace, objectStoreName, objectUserID, false, false)
logger.Info("Initializing object bucket claim before the upgrade")
cobErr := s.helper.BucketClient.CreateBucketStorageClass(s.namespace, objectStoreName, bucketStorageClassName, "Delete", region)
require.Nil(s.T(), cobErr)
cobcErr := s.helper.BucketClient.CreateObc(obcName, bucketStorageClassName, bucketPrefix, maxObject, false)
require.Nil(s.T(), cobcErr)
created := utils.Retry(12, 2*time.Second, "OBC is created", func() bool {
// do not check if bound here b/c this fails in Rook v1.4
return s.helper.BucketClient.CheckOBC(obcName, "created")
})
require.True(s.T(), created)
// verify that we're actually running the right pre-upgrade image
s.verifyOperatorImage(installer.Version1_6)
assert.NoError(s.T(), s.k8sh.WriteToPod("", rbdPodName, preFilename, message))
assert.NoError(s.T(), s.k8sh.ReadFromPod("", rbdPodName, preFilename, message))
// we will keep appending to this to continue verifying old files through the upgrades
rbdFilesToRead := []string{preFilename}
cephfsFilesToRead := []string{}
// Get some info about the currently deployed OSDs to determine later if they are all updated
osdDepList, err := k8sutil.GetDeployments(s.k8sh.Clientset, s.namespace, "app=rook-ceph-osd")
require.NoError(s.T(), err)
osdDeps := osdDepList.Items
numOSDs := len(osdDeps) // there should be this many upgraded OSDs
require.NotEqual(s.T(), 0, numOSDs)
return numOSDs, filesystemName, rbdFilesToRead, cephfsFilesToRead
}
func (s *UpgradeSuite) gatherLogs(systemNamespace, testSuffix string) {
// Gather logs before Ceph upgrade to help with debugging
if installer.TestLogCollectionLevel() == "all" {