Skip to content

Commit e9c2dfd

Browse files
committed
Define a struct to share validation rules for PVC specs
1 parent 9ff9615 commit e9c2dfd

33 files changed

+226
-231
lines changed

config/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,6 +1560,12 @@ spec:
15601560
backing this claim.
15611561
type: string
15621562
type: object
1563+
x-kubernetes-map-type: atomic
1564+
x-kubernetes-validations:
1565+
- message: missing accessModes
1566+
rule: has(self.accessModes) && size(self.accessModes) > 0
1567+
- message: missing storage request
1568+
rule: has(self.resources) && has(self.resources.requests) && has(self.resources.requests.storage)
15631569
image:
15641570
description: The image name to use for pgAdmin instance.
15651571
type: string

config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3117,6 +3117,7 @@ spec:
31173117
to the PersistentVolume backing this claim.
31183118
type: string
31193119
type: object
3120+
x-kubernetes-map-type: atomic
31203121
x-kubernetes-validations:
31213122
- message: missing accessModes
31223123
rule: has(self.accessModes) && size(self.accessModes)
@@ -6444,6 +6445,7 @@ spec:
64446445
to the PersistentVolume backing this claim.
64456446
type: string
64466447
type: object
6448+
x-kubernetes-map-type: atomic
64476449
x-kubernetes-validations:
64486450
- message: missing accessModes
64496451
rule: has(self.accessModes) && size(self.accessModes)
@@ -10332,6 +10334,7 @@ spec:
1033210334
PersistentVolume backing this claim.
1033310335
type: string
1033410336
type: object
10337+
x-kubernetes-map-type: atomic
1033510338
x-kubernetes-validations:
1033610339
- message: missing accessModes
1033710340
rule: has(self.accessModes) && size(self.accessModes) > 0
@@ -10717,6 +10720,7 @@ spec:
1071710720
the PersistentVolume backing this claim.
1071810721
type: string
1071910722
type: object
10723+
x-kubernetes-map-type: atomic
1072010724
x-kubernetes-validations:
1072110725
- message: missing accessModes
1072210726
rule: has(self.accessModes) && size(self.accessModes)
@@ -11158,6 +11162,7 @@ spec:
1115811162
PersistentVolume backing this claim.
1115911163
type: string
1116011164
type: object
11165+
x-kubernetes-map-type: atomic
1116111166
x-kubernetes-validations:
1116211167
- message: missing accessModes
1116311168
rule: has(self.accessModes) && size(self.accessModes) > 0
@@ -17214,6 +17219,14 @@ spec:
1721417219
PersistentVolume backing this claim.
1721517220
type: string
1721617221
type: object
17222+
x-kubernetes-map-type: atomic
17223+
x-kubernetes-validations:
17224+
- message: missing accessModes
17225+
rule: has(self.accessModes) && size(self.accessModes) >
17226+
0
17227+
- message: missing storage request
17228+
rule: has(self.resources) && has(self.resources.requests)
17229+
&& has(self.resources.requests.storage)
1721717230
image:
1721817231
description: |-
1721917232
Name of a container image that can run pgAdmin 4. Changing this value causes

internal/controller/postgrescluster/helpers_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ func setupNamespace(t testing.TB, cc client.Client) *corev1.Namespace {
9090
return require.Namespace(t, cc)
9191
}
9292

93-
func testVolumeClaimSpec() corev1.PersistentVolumeClaimSpec {
93+
func testVolumeClaimSpec() v1beta1.VolumeClaimSpec {
9494
// Defines a volume claim spec that can be used to create instances
95-
return corev1.PersistentVolumeClaimSpec{
95+
return v1beta1.VolumeClaimSpec{
9696
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
9797
Resources: corev1.VolumeResourceRequirements{
9898
Requests: map[corev1.ResourceName]resource.Quantity{

internal/controller/postgrescluster/instance_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ func TestStoreDesiredRequest(t *testing.T) {
280280
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{
281281
Name: "red",
282282
Replicas: initialize.Int32(1),
283-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
283+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
284284
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
285285
Resources: corev1.VolumeResourceRequirements{
286286
Limits: map[corev1.ResourceName]resource.Quantity{
@@ -1850,7 +1850,7 @@ func TestFindAvailableInstanceNames(t *testing.T) {
18501850
expectedInstanceNames: []string{"instance1-def"},
18511851
}, {
18521852
set: v1beta1.PostgresInstanceSetSpec{Name: "instance1",
1853-
WALVolumeClaimSpec: &corev1.PersistentVolumeClaimSpec{}},
1853+
WALVolumeClaimSpec: &v1beta1.VolumeClaimSpec{}},
18541854
fakeObservedInstances: newObservedInstances(
18551855
&v1beta1.PostgresCluster{Spec: v1beta1.PostgresClusterSpec{
18561856
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{Name: "instance1"}},
@@ -1877,7 +1877,7 @@ func TestFindAvailableInstanceNames(t *testing.T) {
18771877
expectedInstanceNames: []string{},
18781878
}, {
18791879
set: v1beta1.PostgresInstanceSetSpec{Name: "instance1",
1880-
WALVolumeClaimSpec: &corev1.PersistentVolumeClaimSpec{}},
1880+
WALVolumeClaimSpec: &v1beta1.VolumeClaimSpec{}},
18811881
fakeObservedInstances: newObservedInstances(
18821882
&v1beta1.PostgresCluster{Spec: v1beta1.PostgresClusterSpec{
18831883
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{Name: "instance1"}},
@@ -1901,7 +1901,7 @@ func TestFindAvailableInstanceNames(t *testing.T) {
19011901
expectedInstanceNames: []string{"instance1-def"},
19021902
}, {
19031903
set: v1beta1.PostgresInstanceSetSpec{Name: "instance1",
1904-
WALVolumeClaimSpec: &corev1.PersistentVolumeClaimSpec{}},
1904+
WALVolumeClaimSpec: &v1beta1.VolumeClaimSpec{}},
19051905
fakeObservedInstances: newObservedInstances(
19061906
&v1beta1.PostgresCluster{Spec: v1beta1.PostgresClusterSpec{
19071907
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{Name: "instance1"}},

internal/controller/postgrescluster/pgadmin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ func (r *Reconciler) reconcilePGAdminDataVolume(
405405
cluster.Spec.Metadata.GetLabelsOrNil(),
406406
labelMap,
407407
)
408-
pvc.Spec = cluster.Spec.UserInterface.PGAdmin.DataVolumeClaimSpec
408+
pvc.Spec = cluster.Spec.UserInterface.PGAdmin.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
409409

410410
err := errors.WithStack(r.setControllerReference(cluster, pvc))
411411

internal/controller/postgrescluster/pgadmin_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,7 @@ func pgAdminTestCluster(ns corev1.Namespace) *v1beta1.PostgresCluster {
853853
Repos: []v1beta1.PGBackRestRepo{{
854854
Name: "repo1",
855855
Volume: &v1beta1.RepoPVC{
856-
VolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
856+
VolumeClaimSpec: v1beta1.VolumeClaimSpec{
857857
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
858858
Resources: corev1.VolumeResourceRequirements{
859859
Requests: corev1.ResourceList{
@@ -868,7 +868,7 @@ func pgAdminTestCluster(ns corev1.Namespace) *v1beta1.PostgresCluster {
868868
UserInterface: &v1beta1.UserInterfaceSpec{
869869
PGAdmin: &v1beta1.PGAdminPodSpec{
870870
Image: "test-image",
871-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
871+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
872872
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
873873
Resources: corev1.VolumeResourceRequirements{
874874
Requests: corev1.ResourceList{

internal/controller/postgrescluster/pgbackrest.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2628,7 +2628,8 @@ func (r *Reconciler) reconcileRepos(ctx context.Context,
26282628
if repo.Volume == nil {
26292629
continue
26302630
}
2631-
repo, err := r.applyRepoVolumeIntent(ctx, postgresCluster, repo.Volume.VolumeClaimSpec,
2631+
repo, err := r.applyRepoVolumeIntent(ctx, postgresCluster,
2632+
repo.Volume.VolumeClaimSpec.AsPersistentVolumeClaimSpec(),
26322633
repo.Name, repoResources)
26332634
if err != nil {
26342635
log.Error(err, errMsg)

internal/controller/postgrescluster/pgbackrest_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func fakePostgresCluster(clusterName, namespace, clusterUID string,
6464
Image: "example.com/crunchy-postgres-ha:test",
6565
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{
6666
Name: "instance1",
67-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
67+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
6868
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany},
6969
Resources: corev1.VolumeResourceRequirements{
7070
Requests: corev1.ResourceList{
@@ -115,7 +115,7 @@ func fakePostgresCluster(clusterName, namespace, clusterUID string,
115115
postgresCluster.Spec.Backups.PGBackRest.Repos[0] = v1beta1.PGBackRestRepo{
116116
Name: "repo1",
117117
Volume: &v1beta1.RepoPVC{
118-
VolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
118+
VolumeClaimSpec: v1beta1.VolumeClaimSpec{
119119
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany},
120120
Resources: corev1.VolumeResourceRequirements{
121121
Requests: map[corev1.ResourceName]resource.Quantity{
@@ -2268,7 +2268,7 @@ func TestCopyConfigurationResources(t *testing.T) {
22682268
Image: "example.com/crunchy-postgres-ha:test",
22692269
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{
22702270
Name: "instance1",
2271-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
2271+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
22722272
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany},
22732273
Resources: corev1.VolumeResourceRequirements{
22742274
Requests: corev1.ResourceList{
@@ -2320,7 +2320,7 @@ func TestCopyConfigurationResources(t *testing.T) {
23202320
},
23212321
InstanceSets: []v1beta1.PostgresInstanceSetSpec{{
23222322
Name: "instance1",
2323-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
2323+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
23242324
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteMany},
23252325
Resources: corev1.VolumeResourceRequirements{
23262326
Requests: corev1.ResourceList{

internal/controller/postgrescluster/postgres.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ func (r *Reconciler) reconcilePostgresDataVolume(
668668
labelMap,
669669
)
670670

671-
pvc.Spec = instanceSpec.DataVolumeClaimSpec
671+
pvc.Spec = instanceSpec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
672672

673673
// If a source cluster was provided and VolumeSnapshots are turned on in the source cluster and
674674
// there is a VolumeSnapshot available for the source cluster that is ReadyToUse, use it as the
@@ -831,7 +831,7 @@ func (r *Reconciler) reconcileTablespaceVolumes(
831831
labelMap,
832832
)
833833

834-
pvc.Spec = vol.DataVolumeClaimSpec
834+
pvc.Spec = vol.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
835835

836836
if err == nil {
837837
err = r.handlePersistentVolumeClaimError(cluster,
@@ -938,7 +938,7 @@ func (r *Reconciler) reconcilePostgresWALVolume(
938938
labelMap,
939939
)
940940

941-
pvc.Spec = *instanceSpec.WALVolumeClaimSpec
941+
pvc.Spec = instanceSpec.WALVolumeClaimSpec.AsPersistentVolumeClaimSpec()
942942

943943
if err == nil {
944944
err = r.handlePersistentVolumeClaimError(cluster,

internal/controller/postgrescluster/postgres_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ func TestSetVolumeSize(t *testing.T) {
755755
instanceSetSpec := func(request, limit string) *v1beta1.PostgresInstanceSetSpec {
756756
return &v1beta1.PostgresInstanceSetSpec{
757757
Name: "some-instance",
758-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
758+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
759759
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
760760
Resources: corev1.VolumeResourceRequirements{
761761
Requests: map[corev1.ResourceName]resource.Quantity{
@@ -783,7 +783,7 @@ func TestSetVolumeSize(t *testing.T) {
783783

784784
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
785785
spec := instanceSetSpec("4Gi", "3Gi")
786-
pvc.Spec = spec.DataVolumeClaimSpec
786+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
787787

788788
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
789789

@@ -820,7 +820,7 @@ resources:
820820
}},
821821
}
822822

823-
pvc.Spec = spec.DataVolumeClaimSpec
823+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
824824

825825
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
826826

@@ -856,14 +856,14 @@ resources:
856856
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
857857
spec := &v1beta1.PostgresInstanceSetSpec{
858858
Name: "some-instance",
859-
DataVolumeClaimSpec: corev1.PersistentVolumeClaimSpec{
859+
DataVolumeClaimSpec: v1beta1.VolumeClaimSpec{
860860
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
861861
Resources: corev1.VolumeResourceRequirements{
862862
Requests: map[corev1.ResourceName]resource.Quantity{
863863
corev1.ResourceStorage: resource.MustParse("1Gi"),
864864
}}}}
865865
cluster.Status = desiredStatus("2Gi")
866-
pvc.Spec = spec.DataVolumeClaimSpec
866+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
867867

868868
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
869869

@@ -888,7 +888,7 @@ resources:
888888

889889
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
890890
spec := instanceSetSpec("1Gi", "2Gi")
891-
pvc.Spec = spec.DataVolumeClaimSpec
891+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
892892

893893
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
894894

@@ -913,7 +913,7 @@ resources:
913913
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
914914
spec := instanceSetSpec("1Gi", "3Gi")
915915
cluster.Status = desiredStatus("NotAValidValue")
916-
pvc.Spec = spec.DataVolumeClaimSpec
916+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
917917

918918
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
919919

@@ -940,7 +940,7 @@ resources:
940940
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
941941
spec := instanceSetSpec("1Gi", "3Gi")
942942
cluster.Status = desiredStatus("2Gi")
943-
pvc.Spec = spec.DataVolumeClaimSpec
943+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
944944

945945
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
946946

@@ -965,7 +965,7 @@ resources:
965965
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
966966
spec := instanceSetSpec("1Gi", "2Gi")
967967
cluster.Status = desiredStatus("2Gi")
968-
pvc.Spec = spec.DataVolumeClaimSpec
968+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
969969

970970
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
971971

@@ -994,7 +994,7 @@ resources:
994994
pvc := &corev1.PersistentVolumeClaim{ObjectMeta: naming.InstancePostgresDataVolume(instance)}
995995
spec := instanceSetSpec("4Gi", "5Gi")
996996
cluster.Status = desiredStatus("10Gi")
997-
pvc.Spec = spec.DataVolumeClaimSpec
997+
pvc.Spec = spec.DataVolumeClaimSpec.AsPersistentVolumeClaimSpec()
998998

999999
reconciler.setVolumeSize(ctx, &cluster, pvc, spec.Name)
10001000

0 commit comments

Comments
 (0)