talos/internal/integration/k8s/rook.go
Noel Georgi 8fe39eacba
chore: move csi tests as go test
Move rook-ceph CSI tests as go tests.
This allows us to add more CSI tests in the future.

Fixes: #9135

Signed-off-by: Noel Georgi <git@frezbo.dev>
2024-08-26 18:18:09 +05:30

90 lines
2.4 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//go:build integration_k8s
package k8s
import (
"context"
_ "embed"
"time"
"github.com/siderolabs/talos/internal/integration/base"
)
//go:embed testdata/rook-ceph-cluster-values.yaml
var rookCephClusterValues []byte
// RookSuite tests deploying Rook.
type RookSuite struct {
base.K8sSuite
}
// SuiteName returns the name of the suite.
func (suite *RookSuite) SuiteName() string {
return "k8s.RookSuite"
}
// TestDeploy tests deploying Rook and running a simple test.
func (suite *RookSuite) TestDeploy() {
if suite.Cluster == nil {
suite.T().Skip("without full cluster state reaching out to the node IP is not reliable")
}
if suite.CSITestName != "rook-ceph" {
suite.T().Skip("skipping rook-ceph test as it is not enabled")
}
timeout, err := time.ParseDuration(suite.CSITestTimeout)
if err != nil {
suite.T().Fatalf("failed to parse timeout: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), timeout)
suite.T().Cleanup(cancel)
if err := suite.HelmInstall(
ctx,
"rook-ceph",
"https://charts.rook.io/release",
RookCephHelmChartVersion,
"rook-ceph",
"rook-ceph",
nil,
); err != nil {
suite.T().Fatalf("failed to install Rook chart: %v", err)
}
if err := suite.HelmInstall(
ctx,
"rook-ceph",
"https://charts.rook.io/release",
RookCephHelmChartVersion,
"rook-ceph-cluster",
"rook-ceph-cluster",
rookCephClusterValues,
); err != nil {
suite.T().Fatalf("failed to install Rook chart: %v", err)
}
if err := suite.WaitForResource(ctx, "rook-ceph", "ceph.rook.io", "CephCluster", "v1", "rook-ceph", "{.status.phase}", "Ready"); err != nil {
suite.T().Fatalf("failed to wait for CephCluster to be Ready: %v", err)
}
if err := suite.WaitForResource(ctx, "rook-ceph", "ceph.rook.io", "CephCluster", "v1", "rook-ceph", "{.status.state}", "Created"); err != nil {
suite.T().Fatalf("failed to wait for CephCluster to be Created: %v", err)
}
if err := suite.WaitForResource(ctx, "rook-ceph", "ceph.rook.io", "CephCluster", "v1", "rook-ceph", "{.status.ceph.health}", "HEALTH_OK"); err != nil {
suite.T().Fatalf("failed to wait for CephCluster to be HEALTH_OK: %v", err)
}
suite.Require().NoError(suite.RunFIOTest(ctx, "ceph-block", "10G"))
}
func init() {
allSuites = append(allSuites, new(RookSuite))
}