Files
my-rook-config/pkg/operator/ceph/cluster/mon/spec_test.go
T
Redouane Kachach c181e05dc4 manifest: reduce CRD size by removing some descriptions
Reduce CRD size by removing some descriptions for things that
(a) are long, (b) are repeated, and (c) are commong kubernetes types.

Remove the `Status` field from VolumeClaimTemplates (a.k.a. PVCs) in
types.go to remove all unnecessary status-related fields.

Use `yq` to go through generated `crds.yaml` to strip out descriptions
for well-known k8s types that are long and repeated where we can't
remove them from types.go. This is mostly placement descriptions and
volumeSource descriptions.

The overall `crds.yaml` file is reduced to less than 60% of its original
size.

Signed-off-by: Blaine Gardner <blaine.gardner@ibm.com>
Signed-off-by: Redouane Kachach <rkachach@redhat.com>
Co-authored-by: Blaine Gardner <blaine.gardner@ibm.com>
(cherry picked from commit bd7477ec61)

# Conflicts:
#	deploy/charts/rook-ceph/templates/resources.yaml
#	deploy/examples/crds.yaml
2024-02-20 19:02:30 +00:00

188 lines
6.7 KiB
Go

/*
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
http://www.apache.org/licenses/LICENSE-2.0
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 mon
import (
"context"
"testing"
cephv1 "github.com/rook/rook/pkg/apis/ceph.rook.io/v1"
"github.com/rook/rook/pkg/clusterd"
cephclient "github.com/rook/rook/pkg/daemon/ceph/client"
"github.com/rook/rook/pkg/operator/ceph/config"
"github.com/rook/rook/pkg/operator/ceph/controller"
"github.com/rook/rook/pkg/operator/ceph/test"
"github.com/rook/rook/pkg/operator/k8sutil"
testop "github.com/rook/rook/pkg/operator/test"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)
func TestPodSpecs(t *testing.T) {
testPodSpec(t, "a", true)
testPodSpec(t, "mon0", true)
testPodSpec(t, "a", false)
testPodSpec(t, "mon0", false)
}
func testPodSpec(t *testing.T, monID string, pvc bool) {
clientset := testop.New(t, 1)
ownerInfo := cephclient.NewMinimumOwnerInfoWithOwnerRef()
c := New(
context.TODO(),
&clusterd.Context{Clientset: clientset, ConfigDir: "/var/lib/rook"},
"ns",
cephv1.ClusterSpec{},
ownerInfo,
)
setCommonMonProperties(c, 0, cephv1.MonSpec{Count: 3, AllowMultiplePerNode: true}, "rook/rook:myversion")
c.spec.CephVersion = cephv1.CephVersionSpec{Image: "quay.io/ceph/ceph:myceph"}
c.spec.Resources = map[string]v1.ResourceRequirements{}
c.spec.DataDirHostPath = "/var/lib/rook"
c.spec.Resources["mon"] = v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceCPU: *resource.NewQuantity(200.0, resource.BinarySI),
v1.ResourceMemory: *resource.NewQuantity(1337.0, resource.BinarySI),
},
Requests: v1.ResourceList{
v1.ResourceCPU: *resource.NewQuantity(100.0, resource.BinarySI),
v1.ResourceMemory: *resource.NewQuantity(500.0, resource.BinarySI),
},
}
c.spec.PriorityClassNames = map[cephv1.KeyType]string{
cephv1.KeyMon: "my-priority-class",
}
monConfig := testGenMonConfig(monID)
d, err := c.makeDeployment(monConfig, false)
assert.NoError(t, err)
assert.NotNil(t, d)
if pvc {
d.Spec.Template.Spec.Volumes = append(
d.Spec.Template.Spec.Volumes, controller.DaemonVolumesDataPVC("i-am-pvc"))
} else {
d.Spec.Template.Spec.Volumes = append(
d.Spec.Template.Spec.Volumes, controller.DaemonVolumesDataHostPath(monConfig.DataPathMap)...)
}
// Deployment should have Ceph labels
test.AssertLabelsContainCephRequirements(t, d.ObjectMeta.Labels,
config.MonType, monID, AppName, "ns", "default", "cephclusters.ceph.rook.io", "ceph-mon")
podTemplate := test.NewPodTemplateSpecTester(t, &d.Spec.Template)
podTemplate.RunFullSuite(config.MonType, monID, AppName, "ns", "quay.io/ceph/ceph:myceph",
"200", "100", "1337", "500", /* resources */
"my-priority-class", "default", "cephclusters.ceph.rook.io", "ceph-mon")
t.Run(("check mon ConfigureProbe"), func(t *testing.T) {
c.spec.HealthCheck.StartupProbe = make(map[cephv1.KeyType]*cephv1.ProbeSpec)
c.spec.HealthCheck.StartupProbe[cephv1.KeyMon] = &cephv1.ProbeSpec{Disabled: false, Probe: &v1.Probe{InitialDelaySeconds: 1000}}
c.spec.HealthCheck.LivenessProbe = make(map[cephv1.KeyType]*cephv1.ProbeSpec)
c.spec.HealthCheck.LivenessProbe[cephv1.KeyMon] = &cephv1.ProbeSpec{Disabled: false, Probe: &v1.Probe{InitialDelaySeconds: 900}}
container := c.makeMonDaemonContainer(monConfig)
assert.NotNil(t, container.LivenessProbe)
assert.NotNil(t, container.StartupProbe)
assert.Equal(t, int32(900), container.LivenessProbe.InitialDelaySeconds)
assert.Equal(t, int32(1000), container.StartupProbe.InitialDelaySeconds)
})
}
func TestDeploymentPVCSpec(t *testing.T) {
clientset := testop.New(t, 1)
ownerInfo := cephclient.NewMinimumOwnerInfoWithOwnerRef()
c := New(
context.TODO(),
&clusterd.Context{Clientset: clientset, ConfigDir: "/var/lib/rook"},
"ns",
cephv1.ClusterSpec{},
ownerInfo,
)
setCommonMonProperties(c, 0, cephv1.MonSpec{Count: 3, AllowMultiplePerNode: true}, "rook/rook:myversion")
c.spec.CephVersion = cephv1.CephVersionSpec{Image: "quay.io/ceph/ceph:myceph"}
c.spec.Resources = map[string]v1.ResourceRequirements{}
c.spec.Resources["mon"] = v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceCPU: *resource.NewQuantity(200.0, resource.BinarySI),
v1.ResourceMemory: *resource.NewQuantity(1337.0, resource.BinarySI),
},
Requests: v1.ResourceList{
v1.ResourceCPU: *resource.NewQuantity(100.0, resource.BinarySI),
v1.ResourceMemory: *resource.NewQuantity(500.0, resource.BinarySI),
},
}
monConfig := testGenMonConfig("a")
// configured with default storage request
c.spec.Mon.VolumeClaimTemplate = &cephv1.VolumeClaimTemplate{}
pvc, err := c.makeDeploymentPVC(monConfig, false)
assert.NoError(t, err)
defaultReq, err := resource.ParseQuantity(cephMonDefaultStorageRequest)
assert.NoError(t, err)
assert.Equal(t, pvc.Spec.Resources.Requests[v1.ResourceStorage], defaultReq)
// limit is preserved
req, err := resource.ParseQuantity("22Gi")
assert.NoError(t, err)
c.spec.Mon.VolumeClaimTemplate = &cephv1.VolumeClaimTemplate{
Spec: v1.PersistentVolumeClaimSpec{
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{v1.ResourceStorage: req},
},
},
}
pvc, err = c.makeDeploymentPVC(monConfig, false)
assert.NoError(t, err)
assert.Equal(t, pvc.Spec.Resources.Limits[v1.ResourceStorage], req)
// request is preserved
req, err = resource.ParseQuantity("23Gi")
assert.NoError(t, err)
c.spec.Mon.VolumeClaimTemplate = &cephv1.VolumeClaimTemplate{
Spec: v1.PersistentVolumeClaimSpec{
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{v1.ResourceStorage: req},
},
},
}
pvc, err = c.makeDeploymentPVC(monConfig, false)
assert.NoError(t, err)
assert.Equal(t, pvc.Spec.Resources.Requests[v1.ResourceStorage], req)
}
func testRequiredDuringScheduling(t *testing.T, hostNetwork, allowMultiplePerNode, required bool) {
c := New(
context.TODO(),
&clusterd.Context{},
"ns",
cephv1.ClusterSpec{},
&k8sutil.OwnerInfo{},
)
c.spec.Network.HostNetwork = hostNetwork
c.spec.Mon.AllowMultiplePerNode = allowMultiplePerNode
assert.Equal(t, required, requiredDuringScheduling(&c.spec))
}
func TestRequiredDuringScheduling(t *testing.T) {
testRequiredDuringScheduling(t, false, false, true)
testRequiredDuringScheduling(t, true, false, true)
testRequiredDuringScheduling(t, true, true, true)
testRequiredDuringScheduling(t, false, true, false)
}