2017-07-21 12:07:15 -07:00
|
|
|
/*
|
|
|
|
|
Copyright 2016 The Rook Authors. All rights reserved.
|
|
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
2020-10-12 13:57:05 +05:30
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
2017-07-21 12:07:15 -07:00
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
|
limitations under the License.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
package installer
|
|
|
|
|
|
2017-10-25 10:56:48 -07:00
|
|
|
import (
|
2018-08-21 15:24:52 -06:00
|
|
|
"fmt"
|
2023-07-31 11:15:24 -06:00
|
|
|
"regexp"
|
2017-10-25 10:56:48 -07:00
|
|
|
"strconv"
|
2019-12-15 15:41:09 +01:00
|
|
|
"strings"
|
2018-06-19 13:08:33 -07:00
|
|
|
|
2023-06-20 15:25:44 +05:30
|
|
|
"github.com/rook/rook/pkg/operator/ceph/object/cosi"
|
2020-08-31 12:33:57 +05:30
|
|
|
"github.com/rook/rook/tests/framework/utils"
|
2017-10-25 10:56:48 -07:00
|
|
|
)
|
|
|
|
|
|
2018-08-21 15:24:52 -06:00
|
|
|
type CephManifests interface {
|
2021-03-09 22:52:21 -07:00
|
|
|
Settings() *TestCephSettings
|
|
|
|
|
GetCRDs(k8shelper *utils.K8sHelper) string
|
2022-05-31 15:45:00 +05:30
|
|
|
GetCSINFSRBAC() string
|
2021-03-09 22:52:21 -07:00
|
|
|
GetOperator() string
|
|
|
|
|
GetCommon() string
|
|
|
|
|
GetCommonExternal() string
|
|
|
|
|
GetCephCluster() string
|
|
|
|
|
GetExternalCephCluster() string
|
|
|
|
|
GetToolbox() string
|
|
|
|
|
GetBlockPool(poolName, replicaSize string) string
|
|
|
|
|
GetBlockStorageClass(poolName, storageClassName, reclaimPolicy string) string
|
|
|
|
|
GetFileStorageClass(fsName, storageClassName string) string
|
2022-05-31 15:45:00 +05:30
|
|
|
GetNFSStorageClass(fsName, nfsClusterName, server, storageClassName string) string
|
2022-10-17 11:47:53 +05:30
|
|
|
GetNFSSnapshotClass(fsName, snapshotClassName string) string
|
2021-03-09 22:52:21 -07:00
|
|
|
GetBlockSnapshotClass(snapshotClassName, reclaimPolicy string) string
|
|
|
|
|
GetFileStorageSnapshotClass(snapshotClassName, reclaimPolicy string) string
|
|
|
|
|
GetFilesystem(name string, activeCount int) string
|
2021-12-08 16:14:29 -07:00
|
|
|
GetNFS(name string, daemonCount int) string
|
|
|
|
|
GetNFSPool() string
|
2021-03-09 22:52:21 -07:00
|
|
|
GetRBDMirror(name string, daemonCount int) string
|
2021-04-29 18:02:50 +05:30
|
|
|
GetObjectStore(name string, replicaCount, port int, tlsEnable bool) string
|
2021-06-28 14:40:54 +05:30
|
|
|
GetObjectStoreUser(name, displayName, store, usercaps, maxsize string, maxbuckets, maxobjects int) string
|
2022-03-14 16:30:13 +05:30
|
|
|
GetBucketStorageClass(storeName, storageClassName, reclaimPolicy string) string
|
2021-03-09 22:52:21 -07:00
|
|
|
GetOBC(obcName, storageClassName, bucketName string, maxObject string, createBucket bool) string
|
2021-07-29 10:17:30 +03:00
|
|
|
GetOBCNotification(obcName, storageClassName, bucketName string, notificationName string, createBucket bool) string
|
|
|
|
|
GetBucketNotification(notificationName string, topicName string) string
|
|
|
|
|
GetBucketTopic(topicName string, storeName string, httpEndpointService string) string
|
2021-03-09 22:52:21 -07:00
|
|
|
GetClient(name string, caps map[string]string) string
|
2022-03-15 15:40:41 -06:00
|
|
|
GetFilesystemSubvolumeGroup(fsName, groupName string) string
|
2023-06-20 15:25:44 +05:30
|
|
|
GetCOSIDriver() string
|
|
|
|
|
GetBucketClass(name, objectstoreUserName, deletionPolicy string) string
|
|
|
|
|
GetBucketClaim(claimName, className string) string
|
2020-01-24 14:21:07 +01:00
|
|
|
}
|
|
|
|
|
|
2018-10-14 12:10:08 +02:00
|
|
|
// CephManifestsMaster wraps rook yaml definitions
|
2018-08-21 15:24:52 -06:00
|
|
|
type CephManifestsMaster struct {
|
2021-03-09 22:52:21 -07:00
|
|
|
settings *TestCephSettings
|
2018-08-21 15:24:52 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewCephManifests gets the manifest type depending on the Rook version desired
|
2021-03-09 22:52:21 -07:00
|
|
|
func NewCephManifests(settings *TestCephSettings) CephManifests {
|
|
|
|
|
switch settings.RookVersion {
|
2021-09-21 17:23:24 -06:00
|
|
|
case LocalBuildTag:
|
2021-03-09 22:52:21 -07:00
|
|
|
return &CephManifestsMaster{settings}
|
2024-03-07 16:31:09 -07:00
|
|
|
case Version1_13:
|
2021-11-29 17:02:30 -07:00
|
|
|
return &CephManifestsPreviousVersion{settings, &CephManifestsMaster{settings}}
|
2018-08-21 15:24:52 -06:00
|
|
|
}
|
2021-03-09 22:52:21 -07:00
|
|
|
panic(fmt.Errorf("unrecognized ceph manifest version: %s", settings.RookVersion))
|
2018-08-21 15:24:52 -06:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) Settings() *TestCephSettings {
|
|
|
|
|
return m.settings
|
2021-03-08 18:15:53 -07:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetCRDs(k8shelper *utils.K8sHelper) string {
|
2021-09-22 16:54:37 -06:00
|
|
|
return m.settings.readManifest("crds.yaml")
|
2018-02-04 12:27:52 -08:00
|
|
|
}
|
|
|
|
|
|
2022-05-31 15:45:00 +05:30
|
|
|
func (m *CephManifestsMaster) GetCSINFSRBAC() string {
|
|
|
|
|
return m.settings.readManifest("/csi/nfs/rbac.yaml")
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetOperator() string {
|
|
|
|
|
var manifest string
|
2020-08-31 12:33:57 +05:30
|
|
|
if utils.IsPlatformOpenShift() {
|
2021-03-09 22:52:21 -07:00
|
|
|
manifest = m.settings.readManifest("operator-openshift.yaml")
|
|
|
|
|
} else {
|
|
|
|
|
manifest = m.settings.readManifest("operator.yaml")
|
2020-08-31 12:33:57 +05:30
|
|
|
}
|
2021-08-26 12:10:05 -06:00
|
|
|
return m.settings.replaceOperatorSettings(manifest)
|
2017-07-21 12:07:15 -07:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetCommonExternal() string {
|
|
|
|
|
return m.settings.readManifest("common-external.yaml")
|
2018-05-30 21:29:07 -07:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetCommon() string {
|
|
|
|
|
return m.settings.readManifest("common.yaml")
|
|
|
|
|
}
|
2019-07-22 13:13:18 -06:00
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetToolbox() string {
|
2021-03-15 20:47:38 -06:00
|
|
|
if m.settings.DirectMountToolbox {
|
|
|
|
|
manifest := strings.ReplaceAll(m.settings.readManifest("direct-mount.yaml"), "name: rook-direct-mount", "name: rook-ceph-tools")
|
2021-06-10 10:05:14 -06:00
|
|
|
manifest = strings.ReplaceAll(manifest, "name: rook-direct-mount", "name: rook-ceph-tools")
|
2021-03-15 20:47:38 -06:00
|
|
|
return strings.ReplaceAll(manifest, "app: rook-direct-mount", "app: rook-ceph-tools")
|
|
|
|
|
}
|
2023-07-31 11:15:24 -06:00
|
|
|
manifest := m.settings.readManifest("toolbox.yaml")
|
2023-07-31 16:18:24 -06:00
|
|
|
if m.settings.CephVersion.Image != "" {
|
|
|
|
|
// The toolbox uses the ceph image, so replace the version that is being tested
|
|
|
|
|
// The regex allows for any character in the tag ("\S" --> non-whitespace character)
|
|
|
|
|
versionRegex := regexp.MustCompile(`image: quay.io/ceph/ceph:\S+`)
|
|
|
|
|
manifest = versionRegex.ReplaceAllString(manifest, "image: "+m.settings.CephVersion.Image)
|
|
|
|
|
}
|
2023-07-31 11:15:24 -06:00
|
|
|
return manifest
|
2021-03-09 22:52:21 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//**********************************************************************************
|
|
|
|
|
//**********************************************************************************
|
|
|
|
|
// After a release, copy the methods below this separator into the versioned file
|
2021-11-29 17:02:30 -07:00
|
|
|
// such as ceph_manifests_previous.go. Methods above this separator do not need to be
|
2021-03-09 22:52:21 -07:00
|
|
|
// copied since the versioned implementation will load them directly from github.
|
|
|
|
|
//**********************************************************************************
|
|
|
|
|
//**********************************************************************************
|
|
|
|
|
|
|
|
|
|
func (m *CephManifestsMaster) GetCephCluster() string {
|
2020-05-14 11:58:23 +02:00
|
|
|
crushRoot := "# crushRoot not specified; Rook will use `default`"
|
2021-03-09 22:52:21 -07:00
|
|
|
if m.settings.Mons == 1 {
|
2020-05-14 11:58:23 +02:00
|
|
|
crushRoot = `crushRoot: "custom-root"`
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-08 10:54:01 -04:00
|
|
|
pruner := "# daysToRetain not specified;"
|
2021-03-09 22:52:21 -07:00
|
|
|
if m.settings.UseCrashPruner {
|
2020-10-08 10:54:01 -04:00
|
|
|
pruner = "daysToRetain: 5"
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-22 21:29:11 -07:00
|
|
|
mgrCount := 1
|
2021-03-09 22:52:21 -07:00
|
|
|
if m.settings.MultipleMgrs {
|
2021-02-22 21:29:11 -07:00
|
|
|
mgrCount = 2
|
|
|
|
|
}
|
2022-04-18 10:13:08 -06:00
|
|
|
clusterSpec := `apiVersion: ceph.rook.io/v1
|
2020-02-04 18:26:31 +05:30
|
|
|
kind: CephCluster
|
|
|
|
|
metadata:
|
2020-04-21 13:28:39 -06:00
|
|
|
# set the name to something different from the namespace
|
2021-03-09 22:52:21 -07:00
|
|
|
name: ` + m.settings.ClusterName + `
|
|
|
|
|
namespace: ` + m.settings.Namespace + `
|
2020-02-04 18:26:31 +05:30
|
|
|
spec:
|
2022-03-11 20:07:05 +02:00
|
|
|
resources: null
|
2021-03-09 22:52:21 -07:00
|
|
|
dataDirHostPath: ` + m.settings.DataDirHostPath + `
|
2020-02-04 18:26:31 +05:30
|
|
|
cephVersion:
|
2021-03-09 22:52:21 -07:00
|
|
|
image: ` + m.settings.CephVersion.Image + `
|
|
|
|
|
allowUnsupported: ` + strconv.FormatBool(m.settings.CephVersion.AllowUnsupported) + `
|
2022-04-20 14:09:43 -06:00
|
|
|
skipUpgradeChecks: true
|
2020-02-04 18:26:31 +05:30
|
|
|
continueUpgradeAfterChecksEvenIfNotHealthy: false
|
2021-02-22 21:29:11 -07:00
|
|
|
mgr:
|
|
|
|
|
count: ` + strconv.Itoa(mgrCount) + `
|
|
|
|
|
allowMultiplePerNode: true
|
2020-02-04 18:26:31 +05:30
|
|
|
dashboard:
|
|
|
|
|
enabled: true
|
|
|
|
|
network:
|
|
|
|
|
hostNetwork: false
|
2021-11-05 16:39:35 -06:00
|
|
|
connections:
|
2023-02-10 09:41:48 -07:00
|
|
|
requireMsgr2: ` + strconv.FormatBool(m.settings.RequireMsgr2) + `
|
2021-11-05 16:39:35 -06:00
|
|
|
encryption:
|
|
|
|
|
enabled: ` + strconv.FormatBool(m.settings.ConnectionsEncrypted) + `
|
|
|
|
|
compression:
|
|
|
|
|
enabled: ` + strconv.FormatBool(m.settings.ConnectionsCompressed) + `
|
2020-02-04 18:26:31 +05:30
|
|
|
crashCollector:
|
|
|
|
|
disable: false
|
2020-10-08 10:54:01 -04:00
|
|
|
` + pruner + `
|
2022-10-18 16:28:26 +05:30
|
|
|
logCollector:
|
|
|
|
|
enabled: true
|
|
|
|
|
periodicity: daily
|
|
|
|
|
maxLogSize: 500M
|
2022-04-18 10:13:08 -06:00
|
|
|
disruptionManagement:
|
|
|
|
|
managePodBudgets: true
|
|
|
|
|
osdMaintenanceTimeout: 30
|
|
|
|
|
pgHealthCheckTimeout: 0
|
|
|
|
|
healthCheck:
|
|
|
|
|
daemonHealth:
|
|
|
|
|
mon:
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 15s
|
|
|
|
|
osd:
|
|
|
|
|
interval: 10s
|
|
|
|
|
status:
|
|
|
|
|
interval: 5s`
|
|
|
|
|
|
|
|
|
|
if m.settings.UsePVC {
|
|
|
|
|
clusterSpec += `
|
|
|
|
|
mon:
|
|
|
|
|
count: ` + strconv.Itoa(m.settings.Mons) + `
|
|
|
|
|
allowMultiplePerNode: true
|
|
|
|
|
volumeClaimTemplate:
|
|
|
|
|
spec:
|
|
|
|
|
storageClassName: ` + m.settings.StorageClassName + `
|
|
|
|
|
resources:
|
|
|
|
|
requests:
|
|
|
|
|
storage: 5Gi
|
2020-02-04 18:26:31 +05:30
|
|
|
storage:
|
2020-05-14 11:58:23 +02:00
|
|
|
config:
|
|
|
|
|
` + crushRoot + `
|
2020-02-04 18:26:31 +05:30
|
|
|
storageClassDeviceSets:
|
|
|
|
|
- name: set1
|
|
|
|
|
count: 1
|
|
|
|
|
portable: false
|
2020-06-23 22:55:55 +00:00
|
|
|
tuneDeviceClass: true
|
2020-07-27 19:55:24 +02:00
|
|
|
encrypted: false
|
2020-02-04 18:26:31 +05:30
|
|
|
volumeClaimTemplates:
|
|
|
|
|
- metadata:
|
|
|
|
|
name: data
|
|
|
|
|
spec:
|
|
|
|
|
resources:
|
|
|
|
|
requests:
|
2020-02-04 22:28:20 +05:30
|
|
|
storage: 10Gi
|
2021-03-09 22:52:21 -07:00
|
|
|
storageClassName: ` + m.settings.StorageClassName + `
|
2020-02-04 18:26:31 +05:30
|
|
|
volumeMode: Block
|
|
|
|
|
accessModes:
|
|
|
|
|
- ReadWriteOnce
|
2022-04-18 10:13:08 -06:00
|
|
|
`
|
|
|
|
|
} else {
|
|
|
|
|
clusterSpec += `
|
2018-05-10 11:30:26 +02:00
|
|
|
mon:
|
2021-03-09 22:52:21 -07:00
|
|
|
count: ` + strconv.Itoa(m.settings.Mons) + `
|
2018-05-10 11:30:26 +02:00
|
|
|
allowMultiplePerNode: true
|
2017-10-06 17:26:39 -07:00
|
|
|
storage:
|
2021-03-09 22:52:21 -07:00
|
|
|
useAllNodes: ` + strconv.FormatBool(!m.settings.SkipOSDCreation) + `
|
|
|
|
|
useAllDevices: ` + strconv.FormatBool(!m.settings.SkipOSDCreation) + `
|
2020-11-17 18:46:00 +05:30
|
|
|
deviceFilter: ` + getDeviceFilter() + `
|
2018-05-18 14:32:43 -07:00
|
|
|
config:
|
|
|
|
|
databaseSizeMB: "1024"
|
2022-04-18 10:13:08 -06:00
|
|
|
`
|
2024-05-28 17:20:43 -06:00
|
|
|
// Append the storage settings if it's not an upgrade from 1.13 where the settings do not exist
|
|
|
|
|
if m.settings.RookVersion != Version1_13 {
|
|
|
|
|
clusterSpec += `
|
|
|
|
|
fullRatio: 0.96
|
|
|
|
|
backfillFullRatio: 0.91
|
|
|
|
|
nearFullRatio: 0.88
|
|
|
|
|
`
|
|
|
|
|
}
|
2022-04-18 10:13:08 -06:00
|
|
|
}
|
2024-02-06 13:30:00 +05:30
|
|
|
|
|
|
|
|
if m.settings.ConnectionsEncrypted {
|
|
|
|
|
clusterSpec += `
|
|
|
|
|
csi:
|
|
|
|
|
cephfs:
|
|
|
|
|
kernelMountOptions: ms_mode=secure
|
|
|
|
|
`
|
|
|
|
|
}
|
2022-08-30 14:17:00 -06:00
|
|
|
return clusterSpec + `
|
2022-04-18 10:13:08 -06:00
|
|
|
priorityClassNames:
|
|
|
|
|
mon: system-node-critical
|
|
|
|
|
osd: system-node-critical
|
|
|
|
|
mgr: system-cluster-critical
|
|
|
|
|
`
|
2017-07-21 12:07:15 -07:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetBlockSnapshotClass(snapshotClassName, reclaimPolicy string) string {
|
2020-08-19 09:38:05 +05:30
|
|
|
// Create a CSI driver snapshotclass
|
|
|
|
|
return `
|
2022-06-06 11:08:49 +05:30
|
|
|
apiVersion: snapshot.storage.k8s.io/v1
|
2020-08-19 09:38:05 +05:30
|
|
|
kind: VolumeSnapshotClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + snapshotClassName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
driver: ` + m.settings.OperatorNamespace + `.rbd.csi.ceph.com
|
2020-08-19 09:38:05 +05:30
|
|
|
deletionPolicy: ` + reclaimPolicy + `
|
|
|
|
|
parameters:
|
2021-03-09 22:52:21 -07:00
|
|
|
clusterID: ` + m.settings.Namespace + `
|
2020-08-19 09:38:05 +05:30
|
|
|
csi.storage.k8s.io/snapshotter-secret-name: rook-csi-rbd-provisioner
|
2021-03-09 22:52:21 -07:00
|
|
|
csi.storage.k8s.io/snapshotter-secret-namespace: ` + m.settings.Namespace + `
|
2020-08-19 09:38:05 +05:30
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetFileStorageSnapshotClass(snapshotClassName, reclaimPolicy string) string {
|
2020-08-19 09:38:05 +05:30
|
|
|
// Create a CSI driver snapshotclass
|
|
|
|
|
return `
|
2022-06-06 11:08:49 +05:30
|
|
|
apiVersion: snapshot.storage.k8s.io/v1
|
2020-08-19 09:38:05 +05:30
|
|
|
kind: VolumeSnapshotClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + snapshotClassName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
driver: ` + m.settings.OperatorNamespace + `.cephfs.csi.ceph.com
|
2020-08-19 09:38:05 +05:30
|
|
|
deletionPolicy: ` + reclaimPolicy + `
|
|
|
|
|
parameters:
|
2021-03-09 22:52:21 -07:00
|
|
|
clusterID: ` + m.settings.Namespace + `
|
2020-08-19 09:38:05 +05:30
|
|
|
csi.storage.k8s.io/snapshotter-secret-name: rook-csi-cephfs-provisioner
|
2021-03-09 22:52:21 -07:00
|
|
|
csi.storage.k8s.io/snapshotter-secret-namespace: ` + m.settings.Namespace + `
|
2020-08-19 09:38:05 +05:30
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetBlockPool(poolName string, replicaSize string) string {
|
2018-12-03 15:08:29 -07:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
2018-12-03 23:48:40 -07:00
|
|
|
kind: CephBlockPool
|
2018-08-21 15:24:52 -06:00
|
|
|
metadata:
|
|
|
|
|
name: ` + poolName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2018-08-21 15:24:52 -06:00
|
|
|
spec:
|
|
|
|
|
replicated:
|
2020-02-03 13:27:15 +01:00
|
|
|
size: ` + replicaSize + `
|
2020-02-20 11:37:09 +01:00
|
|
|
targetSizeRatio: .5
|
2020-03-30 17:28:10 -04:00
|
|
|
requireSafeReplicaSize: false
|
2021-10-13 12:26:38 +02:00
|
|
|
parameters:
|
|
|
|
|
compression_mode: aggressive
|
2020-08-25 09:46:18 +02:00
|
|
|
mirroring:
|
|
|
|
|
enabled: true
|
|
|
|
|
mode: image
|
2021-02-18 11:28:47 -05:00
|
|
|
quotas:
|
2021-03-13 15:30:24 -05:00
|
|
|
maxSize: 10Gi
|
2021-02-18 11:28:47 -05:00
|
|
|
maxObjects: 1000000
|
2020-08-25 09:46:18 +02:00
|
|
|
statusCheck:
|
|
|
|
|
mirror:
|
|
|
|
|
disabled: false
|
|
|
|
|
interval: 10s`
|
2018-08-21 15:24:52 -06:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetBlockStorageClass(poolName, storageClassName, reclaimPolicy string) string {
|
2020-02-11 17:11:41 -07:00
|
|
|
// Create a CSI driver storage class
|
2022-02-21 14:51:03 -07:00
|
|
|
sc := `
|
2020-02-11 17:11:41 -07:00
|
|
|
apiVersion: storage.k8s.io/v1
|
|
|
|
|
kind: StorageClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + storageClassName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
provisioner: ` + m.settings.OperatorNamespace + `.rbd.csi.ceph.com
|
2020-02-11 17:11:41 -07:00
|
|
|
reclaimPolicy: ` + reclaimPolicy + `
|
|
|
|
|
parameters:
|
|
|
|
|
pool: ` + poolName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
clusterID: ` + m.settings.Namespace + `
|
2020-02-11 17:11:41 -07:00
|
|
|
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
|
2021-03-09 22:52:21 -07:00
|
|
|
csi.storage.k8s.io/provisioner-secret-namespace: ` + m.settings.Namespace + `
|
2020-02-11 17:11:41 -07:00
|
|
|
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
|
2021-03-09 22:52:21 -07:00
|
|
|
csi.storage.k8s.io/node-stage-secret-namespace: ` + m.settings.Namespace + `
|
2020-08-19 09:38:05 +05:30
|
|
|
imageFeatures: layering
|
|
|
|
|
csi.storage.k8s.io/fstype: ext4
|
2020-02-11 17:11:41 -07:00
|
|
|
`
|
2022-02-21 14:51:03 -07:00
|
|
|
return sc
|
2018-08-21 15:24:52 -06:00
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetFileStorageClass(fsName, storageClassName string) string {
|
2020-02-11 17:11:41 -07:00
|
|
|
// Create a CSI driver storage class
|
2020-10-05 13:27:44 +05:30
|
|
|
csiCephFSNodeSecret := "rook-csi-cephfs-node" //nolint:gosec // We safely suppress gosec in tests file
|
|
|
|
|
csiCephFSProvisionerSecret := "rook-csi-cephfs-provisioner" //nolint:gosec // We safely suppress gosec in tests file
|
2022-02-21 14:51:03 -07:00
|
|
|
sc := `
|
2020-02-11 17:11:41 -07:00
|
|
|
apiVersion: storage.k8s.io/v1
|
|
|
|
|
kind: StorageClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + storageClassName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
provisioner: ` + m.settings.OperatorNamespace + `.cephfs.csi.ceph.com
|
2020-02-11 17:11:41 -07:00
|
|
|
parameters:
|
2021-03-09 22:52:21 -07:00
|
|
|
clusterID: ` + m.settings.Namespace + `
|
2020-02-11 17:11:41 -07:00
|
|
|
fsName: ` + fsName + `
|
|
|
|
|
pool: ` + fsName + `-data0
|
2020-04-09 18:46:42 +02:00
|
|
|
csi.storage.k8s.io/provisioner-secret-name: ` + csiCephFSProvisionerSecret + `
|
2021-03-09 22:52:21 -07:00
|
|
|
csi.storage.k8s.io/provisioner-secret-namespace: ` + m.settings.Namespace + `
|
2020-04-09 18:46:42 +02:00
|
|
|
csi.storage.k8s.io/node-stage-secret-name: ` + csiCephFSNodeSecret + `
|
2021-03-09 22:52:21 -07:00
|
|
|
csi.storage.k8s.io/node-stage-secret-namespace: ` + m.settings.Namespace + `
|
2020-02-11 17:11:41 -07:00
|
|
|
`
|
2022-02-21 14:51:03 -07:00
|
|
|
if m.settings.ConnectionsEncrypted {
|
2024-02-06 13:30:00 +05:30
|
|
|
// Encryption with kernel version <= 5.11 requires 'mounter: fuse'. For kernel version >= 5.12, it requires 'mounter: kernel'.
|
|
|
|
|
// Since the Github action Minikube has kernel version > 5.12, the setting is set to 'mounter: kernel'.
|
|
|
|
|
sc += " mounter: kernel"
|
2022-02-21 14:51:03 -07:00
|
|
|
}
|
|
|
|
|
return sc
|
2020-02-11 17:11:41 -07:00
|
|
|
}
|
|
|
|
|
|
2022-05-31 15:45:00 +05:30
|
|
|
func (m *CephManifestsMaster) GetNFSStorageClass(fsName, nfsClusterName, server, storageClassName string) string {
|
|
|
|
|
// Create a CSI driver storage class
|
|
|
|
|
csiCephFSNodeSecret := "rook-csi-cephfs-node" //nolint:gosec // We safely suppress gosec in tests file
|
|
|
|
|
csiCephFSProvisionerSecret := "rook-csi-cephfs-provisioner" //nolint:gosec // We safely suppress gosec in tests file
|
|
|
|
|
sc := `
|
|
|
|
|
apiVersion: storage.k8s.io/v1
|
|
|
|
|
kind: StorageClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + storageClassName + `
|
|
|
|
|
provisioner: ` + m.settings.OperatorNamespace + `.nfs.csi.ceph.com
|
|
|
|
|
parameters:
|
|
|
|
|
clusterID: ` + m.settings.Namespace + `
|
|
|
|
|
fsName: ` + fsName + `
|
|
|
|
|
nfsCluster: ` + nfsClusterName + `
|
|
|
|
|
server: ` + server + `
|
|
|
|
|
pool: ` + fsName + `-data0
|
|
|
|
|
csi.storage.k8s.io/provisioner-secret-name: ` + csiCephFSProvisionerSecret + `
|
|
|
|
|
csi.storage.k8s.io/provisioner-secret-namespace: ` + m.settings.Namespace + `
|
|
|
|
|
csi.storage.k8s.io/node-stage-secret-name: ` + csiCephFSNodeSecret + `
|
|
|
|
|
csi.storage.k8s.io/node-stage-secret-namespace: ` + m.settings.Namespace + `
|
|
|
|
|
mountOptions:
|
|
|
|
|
- "nolock"
|
|
|
|
|
`
|
2022-06-23 16:45:36 +05:30
|
|
|
// "nolock" mountOptions has been added to prevent the following error in ci environment:
|
|
|
|
|
// rpc error: code = Internal desc = mount failed: exit status 32
|
|
|
|
|
// Mounting command: mount
|
|
|
|
|
// Mounting arguments: -t nfs <src> <dest>
|
|
|
|
|
// Output: mount.nfs: rpc.statd is not running but is required for remote locking.
|
|
|
|
|
// mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
|
2022-05-31 15:45:00 +05:30
|
|
|
return sc
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-17 11:47:53 +05:30
|
|
|
func (m *CephManifestsMaster) GetNFSSnapshotClass(snapshotClassName, reclaimPolicy string) string {
|
|
|
|
|
// return NFS CSI snapshotclass object.
|
|
|
|
|
return `
|
|
|
|
|
apiVersion: snapshot.storage.k8s.io/v1
|
|
|
|
|
kind: VolumeSnapshotClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + snapshotClassName + `
|
|
|
|
|
driver: ` + m.settings.OperatorNamespace + `.nfs.csi.ceph.com
|
|
|
|
|
deletionPolicy: ` + reclaimPolicy + `
|
|
|
|
|
parameters:
|
|
|
|
|
clusterID: ` + m.settings.Namespace + `
|
|
|
|
|
csi.storage.k8s.io/snapshotter-secret-name: rook-csi-cephfs-provisioner
|
|
|
|
|
csi.storage.k8s.io/snapshotter-secret-namespace: ` + m.settings.Namespace + `
|
|
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-10 16:41:06 -06:00
|
|
|
// GetFilesystem returns the manifest to create a Rook filesystem resource with the given config.
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetFilesystem(name string, activeCount int) string {
|
2018-12-03 15:08:29 -07:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
2018-12-03 23:48:40 -07:00
|
|
|
kind: CephFilesystem
|
2018-08-21 15:24:52 -06:00
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2018-08-21 15:24:52 -06:00
|
|
|
spec:
|
|
|
|
|
metadataPool:
|
|
|
|
|
replicated:
|
|
|
|
|
size: 1
|
2020-02-20 11:37:09 +01:00
|
|
|
requireSafeReplicaSize: false
|
2018-08-21 15:24:52 -06:00
|
|
|
dataPools:
|
|
|
|
|
- replicated:
|
|
|
|
|
size: 1
|
2020-02-20 11:37:09 +01:00
|
|
|
requireSafeReplicaSize: false
|
2020-03-30 17:28:10 -04:00
|
|
|
compressionMode: none
|
2018-08-21 15:24:52 -06:00
|
|
|
metadataServer:
|
2022-03-11 20:07:05 +02:00
|
|
|
resources: null
|
2018-10-10 16:41:06 -06:00
|
|
|
activeCount: ` + strconv.Itoa(activeCount) + `
|
2018-08-21 15:24:52 -06:00
|
|
|
activeStandby: true`
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-08 08:33:36 -07:00
|
|
|
// GetFilesystem returns the manifest to create a Rook Ceph NFS resource with the given config.
|
2021-12-08 16:14:29 -07:00
|
|
|
func (m *CephManifestsMaster) GetNFS(name string, count int) string {
|
2019-02-08 08:33:36 -07:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephNFS
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2019-02-08 08:33:36 -07:00
|
|
|
spec:
|
|
|
|
|
rados:
|
2021-12-08 16:14:29 -07:00
|
|
|
pool: .nfs
|
2019-02-08 08:33:36 -07:00
|
|
|
namespace: nfs-ns
|
|
|
|
|
server:
|
|
|
|
|
active: ` + strconv.Itoa(count)
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-08 16:14:29 -07:00
|
|
|
// GetFilesystem returns the manifest to create a Rook Ceph NFS resource with the given config.
|
|
|
|
|
func (m *CephManifestsMaster) GetNFSPool() string {
|
|
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephBlockPool
|
|
|
|
|
metadata:
|
|
|
|
|
name: dot-nfs
|
|
|
|
|
namespace: ` + m.settings.Namespace + `
|
|
|
|
|
spec:
|
|
|
|
|
name: .nfs
|
|
|
|
|
replicated:
|
|
|
|
|
size: 1
|
|
|
|
|
requireSafeReplicaSize: false`
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-29 18:02:50 +05:30
|
|
|
func (m *CephManifestsMaster) GetObjectStore(name string, replicaCount, port int, tlsEnable bool) string {
|
|
|
|
|
if tlsEnable {
|
|
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephObjectStore
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
|
|
|
|
namespace: ` + m.settings.Namespace + `
|
|
|
|
|
spec:
|
|
|
|
|
metadataPool:
|
|
|
|
|
replicated:
|
|
|
|
|
size: 1
|
|
|
|
|
requireSafeReplicaSize: false
|
|
|
|
|
compressionMode: passive
|
|
|
|
|
dataPool:
|
|
|
|
|
replicated:
|
|
|
|
|
size: 1
|
|
|
|
|
requireSafeReplicaSize: false
|
|
|
|
|
gateway:
|
2022-03-11 20:07:05 +02:00
|
|
|
resources: null
|
2021-04-29 18:02:50 +05:30
|
|
|
securePort: ` + strconv.Itoa(port) + `
|
|
|
|
|
instances: ` + strconv.Itoa(replicaCount) + `
|
|
|
|
|
sslCertificateRef: ` + name + `
|
|
|
|
|
`
|
|
|
|
|
}
|
2018-12-03 15:08:29 -07:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
2018-12-03 23:48:40 -07:00
|
|
|
kind: CephObjectStore
|
2018-08-21 15:24:52 -06:00
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2018-08-21 15:24:52 -06:00
|
|
|
spec:
|
|
|
|
|
metadataPool:
|
|
|
|
|
replicated:
|
|
|
|
|
size: 1
|
2020-02-20 11:37:09 +01:00
|
|
|
requireSafeReplicaSize: false
|
2020-04-09 18:46:42 +02:00
|
|
|
compressionMode: passive
|
2018-08-21 15:24:52 -06:00
|
|
|
dataPool:
|
|
|
|
|
replicated:
|
|
|
|
|
size: 1
|
2020-02-20 11:37:09 +01:00
|
|
|
requireSafeReplicaSize: false
|
2018-08-21 15:24:52 -06:00
|
|
|
gateway:
|
2022-03-11 20:07:05 +02:00
|
|
|
resources: null
|
2018-08-21 15:24:52 -06:00
|
|
|
port: ` + strconv.Itoa(port) + `
|
|
|
|
|
instances: ` + strconv.Itoa(replicaCount) + `
|
|
|
|
|
`
|
|
|
|
|
}
|
2018-11-09 09:41:00 -06:00
|
|
|
|
2021-06-28 14:40:54 +05:30
|
|
|
func (m *CephManifestsMaster) GetObjectStoreUser(name, displayName, store, usercaps, maxsize string, maxbuckets, maxobjects int) string {
|
2018-12-03 15:08:29 -07:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
2018-12-03 23:48:40 -07:00
|
|
|
kind: CephObjectStoreUser
|
2018-11-09 09:41:00 -06:00
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2018-11-09 09:41:00 -06:00
|
|
|
spec:
|
|
|
|
|
displayName: ` + displayName + `
|
2021-06-28 14:40:54 +05:30
|
|
|
store: ` + store + `
|
|
|
|
|
quotas:
|
|
|
|
|
maxBuckets: ` + strconv.Itoa(maxbuckets) + `
|
|
|
|
|
maxObjects: ` + strconv.Itoa(maxobjects) + `
|
|
|
|
|
maxSize: ` + maxsize + `
|
|
|
|
|
capabilities:
|
2023-06-20 15:25:44 +05:30
|
|
|
user: "` + usercaps + `"
|
|
|
|
|
bucket: "` + usercaps + `"
|
|
|
|
|
`
|
2018-11-09 09:41:00 -06:00
|
|
|
}
|
2019-08-12 11:33:46 +05:30
|
|
|
|
2022-06-27 15:17:38 +05:30
|
|
|
// GetBucketStorageClass returns the manifest to create object bucket
|
2022-03-14 16:30:13 +05:30
|
|
|
func (m *CephManifestsMaster) GetBucketStorageClass(storeName, storageClassName, reclaimPolicy string) string {
|
2019-08-12 11:33:46 +05:30
|
|
|
return `apiVersion: storage.k8s.io/v1
|
|
|
|
|
kind: StorageClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + storageClassName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
provisioner: ` + m.settings.Namespace + `.ceph.rook.io/bucket
|
2019-08-12 11:33:46 +05:30
|
|
|
reclaimPolicy: ` + reclaimPolicy + `
|
|
|
|
|
parameters:
|
|
|
|
|
objectStoreName: ` + storeName + `
|
2022-03-14 16:30:13 +05:30
|
|
|
objectStoreNamespace: ` + m.settings.Namespace
|
2019-08-12 11:33:46 +05:30
|
|
|
}
|
|
|
|
|
|
2022-06-27 15:17:38 +05:30
|
|
|
// GetOBC returns the manifest to create object bucket claim
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetOBC(claimName string, storageClassName string, objectBucketName string, maxObject string, varBucketName bool) string {
|
2019-08-12 11:33:46 +05:30
|
|
|
bucketParameter := "generateBucketName"
|
|
|
|
|
if varBucketName {
|
|
|
|
|
bucketParameter = "bucketName"
|
|
|
|
|
}
|
|
|
|
|
return `apiVersion: objectbucket.io/v1alpha1
|
|
|
|
|
kind: ObjectBucketClaim
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + claimName + `
|
|
|
|
|
spec:
|
|
|
|
|
` + bucketParameter + `: ` + objectBucketName + `
|
2020-07-07 11:02:45 +05:30
|
|
|
storageClassName: ` + storageClassName + `
|
|
|
|
|
additionalConfig:
|
|
|
|
|
maxObjects: "` + maxObject + `"`
|
2019-08-12 11:33:46 +05:30
|
|
|
}
|
2019-08-20 15:24:17 +02:00
|
|
|
|
2022-06-27 15:17:38 +05:30
|
|
|
// GetOBCNotification returns the manifest to create object bucket claim
|
2021-07-29 10:17:30 +03:00
|
|
|
func (m *CephManifestsMaster) GetOBCNotification(claimName string, storageClassName string, objectBucketName string, notificationName string, varBucketName bool) string {
|
|
|
|
|
bucketParameter := "generateBucketName"
|
|
|
|
|
if varBucketName {
|
|
|
|
|
bucketParameter = "bucketName"
|
|
|
|
|
}
|
|
|
|
|
return `apiVersion: objectbucket.io/v1alpha1
|
|
|
|
|
kind: ObjectBucketClaim
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + claimName + `
|
|
|
|
|
labels:
|
|
|
|
|
bucket-notification-` + notificationName + `: ` + notificationName + `
|
|
|
|
|
spec:
|
|
|
|
|
` + bucketParameter + `: ` + objectBucketName + `
|
|
|
|
|
storageClassName: ` + storageClassName
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-27 15:17:38 +05:30
|
|
|
// GetBucketNotification returns the manifest to create ceph bucket notification
|
2021-07-29 10:17:30 +03:00
|
|
|
func (m *CephManifestsMaster) GetBucketNotification(notificationName string, topicName string) string {
|
|
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephBucketNotification
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + notificationName + `
|
|
|
|
|
spec:
|
2022-02-01 23:01:57 +05:30
|
|
|
topic: ` + topicName + `
|
|
|
|
|
events:
|
|
|
|
|
- s3:ObjectCreated:Put
|
|
|
|
|
- s3:ObjectRemoved:Delete
|
|
|
|
|
`
|
2021-07-29 10:17:30 +03:00
|
|
|
}
|
|
|
|
|
|
2022-06-27 15:17:38 +05:30
|
|
|
// GetBucketTopic returns the manifest to create ceph bucket topic
|
2021-07-29 10:17:30 +03:00
|
|
|
func (m *CephManifestsMaster) GetBucketTopic(topicName string, storeName string, httpEndpointService string) string {
|
|
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephBucketTopic
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + topicName + `
|
|
|
|
|
spec:
|
|
|
|
|
endpoint:
|
|
|
|
|
http:
|
2022-02-01 23:01:57 +05:30
|
|
|
uri: ` + httpEndpointService + `
|
2021-12-21 19:55:45 +02:00
|
|
|
sendCloudEvents: false
|
2021-07-29 10:17:30 +03:00
|
|
|
objectStoreName: ` + storeName + `
|
|
|
|
|
objectStoreNamespace: ` + m.settings.Namespace
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetClient(claimName string, caps map[string]string) string {
|
2019-12-15 15:41:09 +01:00
|
|
|
clientCaps := []string{}
|
|
|
|
|
for name, cap := range caps {
|
|
|
|
|
str := name + ": " + cap
|
|
|
|
|
clientCaps = append(clientCaps, str)
|
|
|
|
|
}
|
2019-08-20 15:24:17 +02:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephClient
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + claimName + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2019-08-20 15:24:17 +02:00
|
|
|
spec:
|
|
|
|
|
caps:
|
2019-12-15 15:41:09 +01:00
|
|
|
` + strings.Join(clientCaps, "\n ")
|
2019-08-20 15:24:17 +02:00
|
|
|
}
|
2020-04-09 18:46:42 +02:00
|
|
|
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetExternalCephCluster() string {
|
2020-04-09 18:46:42 +02:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephCluster
|
|
|
|
|
metadata:
|
2021-03-09 22:52:21 -07:00
|
|
|
name: ` + m.settings.ClusterName + `
|
|
|
|
|
namespace: ` + m.settings.Namespace + `
|
2020-04-09 18:46:42 +02:00
|
|
|
spec:
|
|
|
|
|
external:
|
|
|
|
|
enable: true
|
2021-04-29 19:06:01 +02:00
|
|
|
dataDirHostPath: ` + m.settings.DataDirHostPath + `
|
|
|
|
|
healthCheck:
|
|
|
|
|
daemonHealth:
|
|
|
|
|
status:
|
|
|
|
|
interval: 5s`
|
2020-04-09 18:46:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetRBDMirror returns the manifest to create a Rook Ceph RBD Mirror resource with the given config.
|
2021-03-09 22:52:21 -07:00
|
|
|
func (m *CephManifestsMaster) GetRBDMirror(name string, count int) string {
|
2020-04-09 18:46:42 +02:00
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephRBDMirror
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
2021-03-09 22:52:21 -07:00
|
|
|
namespace: ` + m.settings.Namespace + `
|
2020-04-09 18:46:42 +02:00
|
|
|
spec:
|
|
|
|
|
count: ` + strconv.Itoa(count)
|
|
|
|
|
}
|
2022-03-15 15:40:41 -06:00
|
|
|
|
|
|
|
|
func (m *CephManifestsMaster) GetFilesystemSubvolumeGroup(fsName, groupName string) string {
|
|
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephFilesystemSubVolumeGroup
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + groupName + `
|
|
|
|
|
namespace: ` + m.settings.Namespace + `
|
|
|
|
|
spec:
|
2024-04-05 11:49:26 +02:00
|
|
|
filesystemName: ` + fsName + `
|
|
|
|
|
quota: 10G
|
|
|
|
|
dataPoolName: ` + fsName + "-data0"
|
2022-03-15 15:40:41 -06:00
|
|
|
}
|
2023-06-20 15:25:44 +05:30
|
|
|
|
|
|
|
|
func (m *CephManifestsMaster) GetCOSIDriver() string {
|
|
|
|
|
// TODO: use the official image once it is available
|
|
|
|
|
return `apiVersion: ceph.rook.io/v1
|
|
|
|
|
kind: CephCOSIDriver
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + cosi.CephCOSIDriverName + `
|
|
|
|
|
namespace: ` + m.settings.OperatorNamespace + `
|
|
|
|
|
spec:
|
|
|
|
|
deploymentStrategy: Auto `
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *CephManifestsMaster) GetBucketClass(name, objectStoreUserSecretName, deletionPolicy string) string {
|
|
|
|
|
return `apiVersion: objectstorage.k8s.io/v1alpha1
|
|
|
|
|
kind: BucketClass
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
|
|
|
|
namespace: ` + m.settings.OperatorNamespace + `
|
|
|
|
|
driverName: ceph.objectstorage.k8s.io
|
|
|
|
|
deletionPolicy: ` + deletionPolicy + `
|
|
|
|
|
parameters:
|
|
|
|
|
objectStoreUserSecretName: ` + objectStoreUserSecretName + `
|
|
|
|
|
objectStoreUserSecretNamespace: ` + m.settings.Namespace
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *CephManifestsMaster) GetBucketClaim(name, bucketClassName string) string {
|
|
|
|
|
return `apiVersion: objectstorage.k8s.io/v1alpha1
|
|
|
|
|
kind: BucketClaim
|
|
|
|
|
metadata:
|
|
|
|
|
name: ` + name + `
|
|
|
|
|
namespace: ` + m.settings.OperatorNamespace + `
|
|
|
|
|
spec:
|
|
|
|
|
bucketClassName: ` + bucketClassName + `
|
|
|
|
|
protocols:
|
|
|
|
|
- s3 `
|
|
|
|
|
}
|