mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-13 13:55:41 +00:00
Chore: add persistent volume claim retention policy tweak function
This commit is contained in:
parent
ba9dfe686f
commit
4cab11f26f
@ -158,6 +158,36 @@ func tweakMaxUnavailable(mu intstr.IntOrString) statefulSetTweak {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tweakPVCPolicy(policy *apps.StatefulSetPersistentVolumeClaimRetentionPolicy) statefulSetTweak {
|
||||||
|
return func(ss *apps.StatefulSet) {
|
||||||
|
ss.Spec.PersistentVolumeClaimRetentionPolicy = policy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type pvcPolicyTweak func(policy *apps.StatefulSetPersistentVolumeClaimRetentionPolicy)
|
||||||
|
|
||||||
|
func mkPVCPolicy(tweaks ...pvcPolicyTweak) *apps.StatefulSetPersistentVolumeClaimRetentionPolicy {
|
||||||
|
policy := &apps.StatefulSetPersistentVolumeClaimRetentionPolicy{}
|
||||||
|
|
||||||
|
for _, tw := range tweaks {
|
||||||
|
tw(policy)
|
||||||
|
}
|
||||||
|
|
||||||
|
return policy
|
||||||
|
}
|
||||||
|
|
||||||
|
func tweakPVCDeletedPolicy(t apps.PersistentVolumeClaimRetentionPolicyType) pvcPolicyTweak {
|
||||||
|
return func(policy *apps.StatefulSetPersistentVolumeClaimRetentionPolicy) {
|
||||||
|
policy.WhenDeleted = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func tweakPVCScalePolicy(t apps.PersistentVolumeClaimRetentionPolicyType) pvcPolicyTweak {
|
||||||
|
return func(policy *apps.StatefulSetPersistentVolumeClaimRetentionPolicy) {
|
||||||
|
policy.WhenScaled = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestValidateStatefulSet(t *testing.T) {
|
func TestValidateStatefulSet(t *testing.T) {
|
||||||
validLabels := map[string]string{"a": "b"}
|
validLabels := map[string]string{"a": "b"}
|
||||||
validPodTemplate := api.PodTemplate{
|
validPodTemplate := api.PodTemplate{
|
||||||
@ -235,19 +265,12 @@ func TestValidateStatefulSet(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "PVC policy " + enableStatefulSetAutoDeletePVC,
|
name: "PVC policy " + enableStatefulSetAutoDeletePVC,
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakPVCPolicy(mkPVCPolicy(
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakPVCDeletedPolicy(apps.DeletePersistentVolumeClaimRetentionPolicyType),
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
tweakPVCScalePolicy(apps.RetainPersistentVolumeClaimRetentionPolicyType),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
)),
|
||||||
Template: validPodTemplate.Template,
|
),
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
|
||||||
PersistentVolumeClaimRetentionPolicy: &apps.StatefulSetPersistentVolumeClaimRetentionPolicy{
|
|
||||||
WhenDeleted: apps.DeletePersistentVolumeClaimRetentionPolicyType,
|
|
||||||
WhenScaled: apps.RetainPersistentVolumeClaimRetentionPolicyType,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "maxUnavailable with parallel pod management",
|
name: "maxUnavailable with parallel pod management",
|
||||||
@ -462,16 +485,9 @@ func TestValidateStatefulSet(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "empty PersistentVolumeClaimRetentionPolicy " + enableStatefulSetAutoDeletePVC,
|
name: "empty PersistentVolumeClaimRetentionPolicy " + enableStatefulSetAutoDeletePVC,
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakPVCPolicy(mkPVCPolicy()),
|
||||||
Spec: apps.StatefulSetSpec{
|
),
|
||||||
PersistentVolumeClaimRetentionPolicy: &apps.StatefulSetPersistentVolumeClaimRetentionPolicy{},
|
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errs: field.ErrorList{
|
errs: field.ErrorList{
|
||||||
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenDeleted"), nil, nil),
|
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenDeleted"), nil, nil),
|
||||||
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenScaled"), nil, nil),
|
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenScaled"), nil, nil),
|
||||||
@ -479,19 +495,12 @@ func TestValidateStatefulSet(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid PersistentVolumeClaimRetentionPolicy " + enableStatefulSetAutoDeletePVC,
|
name: "invalid PersistentVolumeClaimRetentionPolicy " + enableStatefulSetAutoDeletePVC,
|
||||||
set: apps.StatefulSet{
|
set: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
tweakPVCPolicy(mkPVCPolicy(
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakPVCDeletedPolicy("invalid-retention-policy"),
|
||||||
PersistentVolumeClaimRetentionPolicy: &apps.StatefulSetPersistentVolumeClaimRetentionPolicy{
|
tweakPVCScalePolicy("invalid-retention-policy"),
|
||||||
WhenScaled: apps.PersistentVolumeClaimRetentionPolicyType("invalid-retention-policy"),
|
)),
|
||||||
WhenDeleted: apps.PersistentVolumeClaimRetentionPolicyType("invalid-retention-policy"),
|
),
|
||||||
},
|
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errs: field.ErrorList{
|
errs: field.ErrorList{
|
||||||
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenDeleted"), nil, nil),
|
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenDeleted"), nil, nil),
|
||||||
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenScaled"), nil, nil),
|
field.NotSupported(field.NewPath("spec", "persistentVolumeClaimRetentionPolicy", "whenScaled"), nil, nil),
|
||||||
@ -867,52 +876,22 @@ func TestValidateStatefulSetUpdate(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "update containers and pvc retention policy 1",
|
name: "update containers and pvc retention policy 1",
|
||||||
old: apps.StatefulSet{
|
old: mkStatefulSet(addContainersValidTemplate),
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
update: mkStatefulSet(&validPodTemplate,
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakPVCPolicy(mkPVCPolicy(
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
tweakPVCDeletedPolicy(apps.RetainPersistentVolumeClaimRetentionPolicyType),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
tweakPVCScalePolicy(apps.RetainPersistentVolumeClaimRetentionPolicyType),
|
||||||
Template: addContainersValidTemplate.Template,
|
)),
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
),
|
||||||
},
|
|
||||||
},
|
|
||||||
update: apps.StatefulSet{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
|
||||||
Spec: apps.StatefulSetSpec{
|
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
|
||||||
PersistentVolumeClaimRetentionPolicy: &apps.StatefulSetPersistentVolumeClaimRetentionPolicy{
|
|
||||||
WhenDeleted: apps.RetainPersistentVolumeClaimRetentionPolicyType,
|
|
||||||
WhenScaled: apps.RetainPersistentVolumeClaimRetentionPolicyType,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "update containers and pvc retention policy 2",
|
name: "update containers and pvc retention policy 2",
|
||||||
old: apps.StatefulSet{
|
old: mkStatefulSet(&validPodTemplate,
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
tweakPVCPolicy(mkPVCPolicy(
|
||||||
Spec: apps.StatefulSetSpec{
|
tweakPVCScalePolicy(apps.RetainPersistentVolumeClaimRetentionPolicyType),
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
)),
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
),
|
||||||
Template: addContainersValidTemplate.Template,
|
update: mkStatefulSet(&validPodTemplate),
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
|
||||||
PersistentVolumeClaimRetentionPolicy: &apps.StatefulSetPersistentVolumeClaimRetentionPolicy{
|
|
||||||
WhenScaled: apps.RetainPersistentVolumeClaimRetentionPolicyType,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
update: apps.StatefulSet{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
|
||||||
Spec: apps.StatefulSetSpec{
|
|
||||||
PodManagementPolicy: apps.OrderedReadyPodManagement,
|
|
||||||
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
|
|
||||||
Template: validPodTemplate.Template,
|
|
||||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "update update strategy",
|
name: "update update strategy",
|
||||||
|
Loading…
Reference in New Issue
Block a user