From 7b3d77a41af88083ba14ffe2cc8ad3a66010c43b Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Mon, 26 Sep 2022 18:34:03 -0700 Subject: [PATCH 1/7] Adding implementation of KEP-3335, StatefulSetSlice --- api/openapi-spec/swagger.json | 15 + .../v3/apis__apps__v1_openapi.json | 20 + pkg/apis/apps/types.go | 19 + pkg/apis/apps/v1/zz_generated.conversion.go | 2 + .../apps/v1beta1/zz_generated.conversion.go | 2 + .../apps/v1beta2/zz_generated.conversion.go | 2 + pkg/apis/apps/validation/validation.go | 17 +- pkg/apis/apps/validation/validation_test.go | 36 ++ .../statefulset/stateful_set_control.go | 40 +- .../statefulset/stateful_set_control_test.go | 194 ++++--- .../statefulset/stateful_set_utils.go | 37 +- pkg/features/kube_features.go | 8 + pkg/generated/openapi/zz_generated.openapi.go | 90 +++- pkg/registry/apps/statefulset/strategy.go | 4 + .../src/k8s.io/api/apps/v1/generated.pb.go | 481 ++++++++++++----- .../src/k8s.io/api/apps/v1/generated.proto | 19 + staging/src/k8s.io/api/apps/v1/types.go | 19 + .../apps/v1/types_swagger_doc_generated.go | 10 + .../api/apps/v1/zz_generated.deepcopy.go | 21 + .../k8s.io/api/apps/v1beta1/generated.pb.go | 459 +++++++++++----- .../k8s.io/api/apps/v1beta1/generated.proto | 19 + staging/src/k8s.io/api/apps/v1beta1/types.go | 19 + .../v1beta1/types_swagger_doc_generated.go | 10 + .../api/apps/v1beta1/zz_generated.deepcopy.go | 21 + .../k8s.io/api/apps/v1beta2/generated.pb.go | 498 ++++++++++++------ .../k8s.io/api/apps/v1beta2/generated.proto | 19 + staging/src/k8s.io/api/apps/v1beta2/types.go | 19 + .../v1beta2/types_swagger_doc_generated.go | 10 + .../api/apps/v1beta2/zz_generated.deepcopy.go | 21 + .../apps/v1/statefulsetordinals.go | 39 ++ .../apps/v1/statefulsetspec.go | 9 + .../apps/v1beta1/statefulsetordinals.go | 39 ++ .../apps/v1beta1/statefulsetspec.go | 9 + .../apps/v1beta2/statefulsetordinals.go | 39 ++ .../apps/v1beta2/statefulsetspec.go | 9 + .../applyconfigurations/internal/internal.go | 30 ++ .../client-go/applyconfigurations/utils.go | 6 + 37 files changed, 1804 insertions(+), 507 deletions(-) create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetordinals.go create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetordinals.go create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetordinals.go diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index b9489afac4e..b35c599c115 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -1624,6 +1624,17 @@ } ] }, + "io.k8s.api.apps.v1.StatefulSetOrdinals": { + "description": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + "properties": { + "start": { + "description": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, "io.k8s.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy": { "description": "StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates.", "properties": { @@ -1646,6 +1657,10 @@ "format": "int32", "type": "integer" }, + "ordinals": { + "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetOrdinals", + "description": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha." + }, "persistentVolumeClaimRetentionPolicy": { "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy", "description": "persistentVolumeClaimRetentionPolicy describes the lifecycle of persistent volume claims created from volumeClaimTemplates. By default, all persistent volume claims are created as needed and retained until manually deleted. This policy allows the lifecycle to be altered, for example by deleting persistent volume claims when their stateful set is deleted, or when their pod is scaled down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. +optional" diff --git a/api/openapi-spec/v3/apis__apps__v1_openapi.json b/api/openapi-spec/v3/apis__apps__v1_openapi.json index e93f08ba96f..8e0820855ea 100644 --- a/api/openapi-spec/v3/apis__apps__v1_openapi.json +++ b/api/openapi-spec/v3/apis__apps__v1_openapi.json @@ -1044,6 +1044,18 @@ } ] }, + "io.k8s.api.apps.v1.StatefulSetOrdinals": { + "description": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + "properties": { + "start": { + "default": 0, + "description": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, "io.k8s.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy": { "description": "StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates.", "properties": { @@ -1066,6 +1078,14 @@ "format": "int32", "type": "integer" }, + "ordinals": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.apps.v1.StatefulSetOrdinals" + } + ], + "description": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha." + }, "persistentVolumeClaimRetentionPolicy": { "allOf": [ { diff --git a/pkg/apis/apps/types.go b/pkg/apis/apps/types.go index 2a99526c021..353ae5c4b0e 100644 --- a/pkg/apis/apps/types.go +++ b/pkg/apis/apps/types.go @@ -143,6 +143,17 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { WhenScaled PersistentVolumeClaimRetentionPolicyType } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +type StatefulSetOrdinals struct { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + Start int32 +} + // A StatefulSetSpec is the specification of a StatefulSet. type StatefulSetSpec struct { // Replicas is the desired number of replicas of the given Template. @@ -215,6 +226,14 @@ type StatefulSetSpec struct { // StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + Ordinals *StatefulSetOrdinals } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/pkg/apis/apps/v1/zz_generated.conversion.go b/pkg/apis/apps/v1/zz_generated.conversion.go index 103eeff6a37..e77da8f6ed3 100644 --- a/pkg/apis/apps/v1/zz_generated.conversion.go +++ b/pkg/apis/apps/v1/zz_generated.conversion.go @@ -1206,6 +1206,7 @@ func autoConvert_v1_StatefulSetSpec_To_apps_StatefulSetSpec(in *v1.StatefulSetSp out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) + // WARNING: in.Ordinals requires manual conversion: does not exist in peer-type return nil } @@ -1226,6 +1227,7 @@ func autoConvert_apps_StatefulSetSpec_To_v1_StatefulSetSpec(in *apps.StatefulSet out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*v1.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) + // WARNING: in.ReplicaStartOrdinal requires manual conversion: does not exist in peer-type return nil } diff --git a/pkg/apis/apps/v1beta1/zz_generated.conversion.go b/pkg/apis/apps/v1beta1/zz_generated.conversion.go index ce30467ed1e..ea937f6f96c 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/apps/v1beta1/zz_generated.conversion.go @@ -870,6 +870,7 @@ func autoConvert_v1beta1_StatefulSetSpec_To_apps_StatefulSetSpec(in *v1beta1.Sta out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) + // WARNING: in.Ordinals requires manual conversion: does not exist in peer-type return nil } @@ -890,6 +891,7 @@ func autoConvert_apps_StatefulSetSpec_To_v1beta1_StatefulSetSpec(in *apps.Statef out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) + // WARNING: in.ReplicaStartOrdinal requires manual conversion: does not exist in peer-type return nil } diff --git a/pkg/apis/apps/v1beta2/zz_generated.conversion.go b/pkg/apis/apps/v1beta2/zz_generated.conversion.go index 18e6a0fe6b2..6d1aa2b4ee3 100644 --- a/pkg/apis/apps/v1beta2/zz_generated.conversion.go +++ b/pkg/apis/apps/v1beta2/zz_generated.conversion.go @@ -1302,6 +1302,7 @@ func autoConvert_v1beta2_StatefulSetSpec_To_apps_StatefulSetSpec(in *v1beta2.Sta out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) + // WARNING: in.Ordinals requires manual conversion: does not exist in peer-type return nil } @@ -1322,6 +1323,7 @@ func autoConvert_apps_StatefulSetSpec_To_v1beta2_StatefulSetSpec(in *apps.Statef out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) + // WARNING: in.ReplicaStartOrdinal requires manual conversion: does not exist in peer-type return nil } diff --git a/pkg/apis/apps/validation/validation.go b/pkg/apis/apps/validation/validation.go index 7dd539b944a..dd9c9ecbdc4 100644 --- a/pkg/apis/apps/validation/validation.go +++ b/pkg/apis/apps/validation/validation.go @@ -28,9 +28,11 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/apis/apps" api "k8s.io/kubernetes/pkg/apis/core" apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" + "k8s.io/kubernetes/pkg/features" ) // ValidateStatefulSetName can be used to check whether the given StatefulSet name is valid. @@ -128,6 +130,12 @@ func ValidateStatefulSetSpec(spec *apps.StatefulSetSpec, fldPath *field.Path, op allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.Replicas), fldPath.Child("replicas"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...) + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + if spec.Ordinals != nil { + replicaStartOrdinal := spec.Ordinals.Start + allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(replicaStartOrdinal), fldPath.Child("ordinals.start"))...) + } + } if spec.Selector == nil { allErrs = append(allErrs, field.Required(fldPath.Child("selector"), "")) @@ -177,10 +185,17 @@ func ValidateStatefulSetUpdate(statefulSet, oldStatefulSet *apps.StatefulSet, op newStatefulSetClone.Spec.Template = oldStatefulSet.Spec.Template // +k8s:verify-mutation:reason=clone newStatefulSetClone.Spec.UpdateStrategy = oldStatefulSet.Spec.UpdateStrategy // +k8s:verify-mutation:reason=clone newStatefulSetClone.Spec.MinReadySeconds = oldStatefulSet.Spec.MinReadySeconds // +k8s:verify-mutation:reason=clone + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + newStatefulSetClone.Spec.Ordinals = oldStatefulSet.Spec.Ordinals // +k8s:verify-mutation:reason=clone + } newStatefulSetClone.Spec.PersistentVolumeClaimRetentionPolicy = oldStatefulSet.Spec.PersistentVolumeClaimRetentionPolicy // +k8s:verify-mutation:reason=clone if !apiequality.Semantic.DeepEqual(newStatefulSetClone.Spec, oldStatefulSet.Spec) { - allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden")) + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "updates to statefulset spec for fields other than 'replicas', 'ordinals', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden")) + } else { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden")) + } } return allErrs diff --git a/pkg/apis/apps/validation/validation_test.go b/pkg/apis/apps/validation/validation_test.go index 99147f00e9f..44a5944c678 100644 --- a/pkg/apis/apps/validation/validation_test.go +++ b/pkg/apis/apps/validation/validation_test.go @@ -86,6 +86,8 @@ func TestValidateStatefulSet(t *testing.T) { const enableStatefulSetAutoDeletePVC = "[enable StatefulSetAutoDeletePVC]" + const enableStatefulSetSlice = "[enable StatefulSetSlice]" + type testCase struct { name string set apps.StatefulSet @@ -193,6 +195,20 @@ func TestValidateStatefulSet(t *testing.T) { }, }, }, + { + name: "ordinals.start positive value " + enableStatefulSetSlice, + set: apps.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, + Spec: apps.StatefulSetSpec{ + PodManagementPolicy: apps.ParallelPodManagement, + UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType}, + Selector: &metav1.LabelSelector{MatchLabels: validLabels}, + Template: validPodTemplate.Template, + Replicas: 3, + Ordinals: &apps.StatefulSetOrdinals{Start: 2}, + }, + }, + }, } errorCases := []testCase{ @@ -635,6 +651,23 @@ func TestValidateStatefulSet(t *testing.T) { field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""), }, }, + { + name: "invalid ordinals.start " + enableStatefulSetSlice, + set: apps.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, + Spec: apps.StatefulSetSpec{ + PodManagementPolicy: apps.ParallelPodManagement, + UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType}, + Selector: &metav1.LabelSelector{MatchLabels: validLabels}, + Template: validPodTemplate.Template, + Replicas: 3, + Ordinals: &apps.StatefulSetOrdinals{Start: -2}, + }, + }, + errs: field.ErrorList{ + field.Invalid(field.NewPath("spec", "ordinals.start"), nil, ""), + }, + }, } cmpOpts := []cmp.Option{cmpopts.IgnoreFields(field.Error{}, "BadValue", "Detail"), cmpopts.SortSlices(func(a, b *field.Error) bool { return a.Error() < b.Error() })} @@ -651,6 +684,9 @@ func TestValidateStatefulSet(t *testing.T) { if strings.Contains(name, enableStatefulSetAutoDeletePVC) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetAutoDeletePVC, true)() } + if strings.Contains(name, enableStatefulSetSlice) { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetSlice, true)() + } errs := ValidateStatefulSet(&testCase.set, pod.GetValidationOptionsFromPodTemplate(&testCase.set.Spec.Template, nil)) wantErrs := testCase.errs diff --git a/pkg/controller/statefulset/stateful_set_control.go b/pkg/controller/statefulset/stateful_set_control.go index 30d4d626871..5f8f4a0e0c1 100644 --- a/pkg/controller/statefulset/stateful_set_control.go +++ b/pkg/controller/statefulset/stateful_set_control.go @@ -303,52 +303,53 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet( *status.CollisionCount = collisionCount replicaCount := int(*set.Spec.Replicas) - // slice that will contain all Pods such that 0 <= getOrdinal(pod) < set.Spec.Replicas + // slice that will contain all Pods such that getStartOrdinal(set) <= getOrdinal(pod) <= getEndOrdinal(set) replicas := make([]*v1.Pod, replicaCount) - // slice that will contain all Pods such that set.Spec.Replicas <= getOrdinal(pod) + // slice that will contain all Pods such that getOrdinal(pod) < getStartOrdinal(set) OR getOrdinal(pod) > getEndOrdinal(set) condemned := make([]*v1.Pod, 0, len(pods)) unhealthy := 0 var firstUnhealthyPod *v1.Pod // First we partition pods into two lists valid replicas and condemned Pods - for i := range pods { + for _, pod := range pods { status.Replicas++ // count the number of running and ready replicas - if isRunningAndReady(pods[i]) { + if isRunningAndReady(pod) { status.ReadyReplicas++ // count the number of running and available replicas - if isRunningAndAvailable(pods[i], set.Spec.MinReadySeconds) { + if isRunningAndAvailable(pod, set.Spec.MinReadySeconds) { status.AvailableReplicas++ } } // count the number of current and update replicas - if isCreated(pods[i]) && !isTerminating(pods[i]) { - if getPodRevision(pods[i]) == currentRevision.Name { + if isCreated(pod) && !isTerminating(pod) { + if getPodRevision(pod) == currentRevision.Name { status.CurrentReplicas++ } - if getPodRevision(pods[i]) == updateRevision.Name { + if getPodRevision(pod) == updateRevision.Name { status.UpdatedReplicas++ } } - if ord := getOrdinal(pods[i]); 0 <= ord && ord < replicaCount { + if podInOrdinalRange(pod, set) { // if the ordinal of the pod is within the range of the current number of replicas, // insert it at the indirection of its ordinal - replicas[ord] = pods[i] - } else if ord >= replicaCount { - // if the ordinal is greater than the number of replicas add it to the condemned list - condemned = append(condemned, pods[i]) + replicas[getOrdinal(pod)-getStartOrdinal(set)] = pod + } else if getOrdinal(pod) >= 0 { + // if the ordinal is valid, but not within the range add it to the condemned list + condemned = append(condemned, pod) } // If the ordinal could not be parsed (ord < 0), ignore the Pod. } // for any empty indices in the sequence [0,set.Spec.Replicas) create a new Pod at the correct revision - for ord := 0; ord < replicaCount; ord++ { - if replicas[ord] == nil { - replicas[ord] = newVersionedStatefulSetPod( + for ord := getStartOrdinal(set); ord <= getEndOrdinal(set); ord++ { + replicaIdx := ord - getStartOrdinal(set) + if replicas[replicaIdx] == nil { + replicas[replicaIdx] = newVersionedStatefulSetPod( currentSet, updateSet, currentRevision.Name, @@ -409,12 +410,13 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet( status.UpdatedReplicas-- } status.Replicas-- + replicaOrd := i + getStartOrdinal(set) replicas[i] = newVersionedStatefulSetPod( currentSet, updateSet, currentRevision.Name, updateRevision.Name, - i) + replicaOrd) } // If we find a Pod that has not been created we create the Pod if !isCreated(replicas[i]) { @@ -501,7 +503,7 @@ func (ssc *defaultStatefulSetControl) updateStatefulSet( // At this point, all of the current Replicas are Running, Ready and Available, we can consider termination. // We will wait for all predecessors to be Running and Ready prior to attempting a deletion. - // We will terminate Pods in a monotonically decreasing order over [len(pods),set.Spec.Replicas). + // We will terminate Pods in a monotonically decreasing order. // Note that we do not resurrect Pods in this interval. Also note that scaling will take precedence over // updates. for target := len(condemned) - 1; target >= 0; target-- { @@ -614,7 +616,7 @@ func updateStatefulSetAfterInvariantEstablished( } } - // Collect all targets in the range between the 0 and Spec.Replicas. Count any targets in that range + // Collect all targets in the range between getStartOrdinal(set) and getEndOrdinal(set). Count any targets in that range // that are unhealthy i.e. terminated or not running and ready as unavailable). Select the // (MaxUnavailable - Unavailable) Pods, in order with respect to their ordinal for termination. Delete // those pods and count the successful deletions. Update the status with the correct number of deletions. diff --git a/pkg/controller/statefulset/stateful_set_control_test.go b/pkg/controller/statefulset/stateful_set_control_test.go index 8ad7b586ff6..d571d81d3fb 100644 --- a/pkg/controller/statefulset/stateful_set_control_test.go +++ b/pkg/controller/statefulset/stateful_set_control_test.go @@ -559,6 +559,74 @@ func PodRecreateDeleteFailure(t *testing.T, set *apps.StatefulSet, invariants in } } +func emptyInvaraints(set *apps.StatefulSet, om *fakeObjectManager) error { + return nil +} + +func TestStatefulSetControlWithStartOrdinal(t *testing.T) { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetSlice, true)() + + simpleSetFn := func() *apps.StatefulSet { + statefulSet := newStatefulSet(3) + statefulSet.Spec.Ordinals = &apps.StatefulSetOrdinals{Start: int32(2)} + return statefulSet + } + + testCases := []struct { + fn func(*testing.T, *apps.StatefulSet, invariantFunc) + obj func() *apps.StatefulSet + }{ + {CreatesPodsWithStartOrdinal, simpleSetFn}, + } + + for _, testCase := range testCases { + testObj := testCase.obj + testFn := testCase.fn + + set := testObj() + testFn(t, set, emptyInvaraints) + } +} + +func CreatesPodsWithStartOrdinal(t *testing.T, set *apps.StatefulSet, invariants invariantFunc) { + client := fake.NewSimpleClientset(set) + om, _, ssc := setupController(client) + + if err := scaleUpStatefulSetControl(set, ssc, om, invariants); err != nil { + t.Errorf("Failed to turn up StatefulSet : %s", err) + } + var err error + set, err = om.setsLister.StatefulSets(set.Namespace).Get(set.Name) + if err != nil { + t.Fatalf("Error getting updated StatefulSet: %v", err) + } + if set.Status.Replicas != 3 { + t.Error("Failed to scale statefulset to 3 replicas") + } + if set.Status.ReadyReplicas != 3 { + t.Error("Failed to set ReadyReplicas correctly") + } + if set.Status.UpdatedReplicas != 3 { + t.Error("Failed to set UpdatedReplicas correctly") + } + selector, err := metav1.LabelSelectorAsSelector(set.Spec.Selector) + if err != nil { + t.Error(err) + } + pods, err := om.podsLister.Pods(set.Namespace).List(selector) + if err != nil { + t.Error(err) + } + sort.Sort(ascendingOrdinal(pods)) + for i, pod := range pods { + expectedOrdinal := 2 + i + actualPodOrdinal := getOrdinal(pod) + if actualPodOrdinal != expectedOrdinal { + t.Errorf("Expected pod ordinal %d. Got %d", expectedOrdinal, actualPodOrdinal) + } + } +} + func TestStatefulSetControlScaleDownDeleteError(t *testing.T) { runTestOverPVCRetentionPolicies( t, "", func(t *testing.T, policy *apps.StatefulSetPersistentVolumeClaimRetentionPolicy) { @@ -2299,6 +2367,16 @@ func (om *fakeObjectManager) SetDeleteStatefulPodError(err error, after int) { om.deletePodTracker.after = after } +func findPodByOrdinal(pods []*v1.Pod, ordinal int) *v1.Pod { + for _, pod := range pods { + if getOrdinal(pod) == ordinal { + return pod.DeepCopy() + } + } + + return nil +} + func (om *fakeObjectManager) setPodPending(set *apps.StatefulSet, ordinal int) ([]*v1.Pod, error) { selector, err := metav1.LabelSelectorAsSelector(set.Spec.Selector) if err != nil { @@ -2308,11 +2386,10 @@ func (om *fakeObjectManager) setPodPending(set *apps.StatefulSet, ordinal int) ( if err != nil { return nil, err } - if 0 > ordinal || ordinal >= len(pods) { - return nil, fmt.Errorf("ordinal %d out of range [0,%d)", ordinal, len(pods)) + pod := findPodByOrdinal(pods, ordinal) + if pod == nil { + return nil, fmt.Errorf("setPodPending: pod ordinal %d not found", ordinal) } - sort.Sort(ascendingOrdinal(pods)) - pod := pods[ordinal].DeepCopy() pod.Status.Phase = v1.PodPending fakeResourceVersion(pod) om.podsIndexer.Update(pod) @@ -2328,11 +2405,10 @@ func (om *fakeObjectManager) setPodRunning(set *apps.StatefulSet, ordinal int) ( if err != nil { return nil, err } - if 0 > ordinal || ordinal >= len(pods) { - return nil, fmt.Errorf("ordinal %d out of range [0,%d)", ordinal, len(pods)) + pod := findPodByOrdinal(pods, ordinal) + if pod == nil { + return nil, fmt.Errorf("setPodRunning: pod ordinal %d not found", ordinal) } - sort.Sort(ascendingOrdinal(pods)) - pod := pods[ordinal].DeepCopy() pod.Status.Phase = v1.PodRunning fakeResourceVersion(pod) om.podsIndexer.Update(pod) @@ -2348,11 +2424,10 @@ func (om *fakeObjectManager) setPodReady(set *apps.StatefulSet, ordinal int) ([] if err != nil { return nil, err } - if 0 > ordinal || ordinal >= len(pods) { - return nil, fmt.Errorf("ordinal %d out of range [0,%d)", ordinal, len(pods)) + pod := findPodByOrdinal(pods, ordinal) + if pod == nil { + return nil, fmt.Errorf("setPodReady: pod ordinal %d not found", ordinal) } - sort.Sort(ascendingOrdinal(pods)) - pod := pods[ordinal].DeepCopy() condition := v1.PodCondition{Type: v1.PodReady, Status: v1.ConditionTrue} podutil.UpdatePodCondition(&pod.Status, &condition) fakeResourceVersion(pod) @@ -2369,11 +2444,10 @@ func (om *fakeObjectManager) setPodAvailable(set *apps.StatefulSet, ordinal int, if err != nil { return nil, err } - if 0 > ordinal || ordinal >= len(pods) { - return nil, fmt.Errorf("ordinal %d out of range [0,%d)", ordinal, len(pods)) + pod := findPodByOrdinal(pods, ordinal) + if pod == nil { + return nil, fmt.Errorf("setPodAvailable: pod ordinal %d not found", ordinal) } - sort.Sort(ascendingOrdinal(pods)) - pod := pods[ordinal].DeepCopy() condition := v1.PodCondition{Type: v1.PodReady, Status: v1.ConditionTrue, LastTransitionTime: metav1.Time{Time: lastTransitionTime}} _, existingCondition := podutil.GetPodCondition(&pod.Status, condition.Type) if existingCondition != nil { @@ -2467,28 +2541,28 @@ func assertMonotonicInvariants(set *apps.StatefulSet, om *fakeObjectManager) err return err } sort.Sort(ascendingOrdinal(pods)) - for ord := 0; ord < len(pods); ord++ { - if ord > 0 && isRunningAndReady(pods[ord]) && !isRunningAndReady(pods[ord-1]) { - return fmt.Errorf("successor %s is Running and Ready while %s is not", pods[ord].Name, pods[ord-1].Name) + for idx := 0; idx < len(pods); idx++ { + if idx > 0 && isRunningAndReady(pods[idx]) && !isRunningAndReady(pods[idx-1]) { + return fmt.Errorf("successor %s is Running and Ready while %s is not", pods[idx].Name, pods[idx-1].Name) } - if getOrdinal(pods[ord]) != ord { - return fmt.Errorf("pods %s deployed in the wrong order %d", pods[ord].Name, ord) + if ord := idx + getStartOrdinal(set); getOrdinal(pods[idx]) != ord { + return fmt.Errorf("pods %s deployed in the wrong order %d", pods[idx].Name, ord) } - if !storageMatches(set, pods[ord]) { - return fmt.Errorf("pods %s does not match the storage specification of StatefulSet %s ", pods[ord].Name, set.Name) + if !storageMatches(set, pods[idx]) { + return fmt.Errorf("pods %s does not match the storage specification of StatefulSet %s ", pods[idx].Name, set.Name) } - for _, claim := range getPersistentVolumeClaims(set, pods[ord]) { + for _, claim := range getPersistentVolumeClaims(set, pods[idx]) { claim, _ := om.claimsLister.PersistentVolumeClaims(set.Namespace).Get(claim.Name) - if err := checkClaimInvarients(set, pods[ord], claim, ord); err != nil { + if err := checkClaimInvarients(set, pods[idx], claim); err != nil { return err } } - if !identityMatches(set, pods[ord]) { - return fmt.Errorf("pods %s does not match the identity specification of StatefulSet %s ", pods[ord].Name, set.Name) + if !identityMatches(set, pods[idx]) { + return fmt.Errorf("pods %s does not match the identity specification of StatefulSet %s ", pods[idx].Name, set.Name) } } return nil @@ -2504,24 +2578,24 @@ func assertBurstInvariants(set *apps.StatefulSet, om *fakeObjectManager) error { return err } sort.Sort(ascendingOrdinal(pods)) - for ord := 0; ord < len(pods); ord++ { - if !storageMatches(set, pods[ord]) { - return fmt.Errorf("pods %s does not match the storage specification of StatefulSet %s ", pods[ord].Name, set.Name) + for _, pod := range pods { + if !storageMatches(set, pod) { + return fmt.Errorf("pods %s does not match the storage specification of StatefulSet %s ", pod.Name, set.Name) } - for _, claim := range getPersistentVolumeClaims(set, pods[ord]) { + for _, claim := range getPersistentVolumeClaims(set, pod) { claim, err := om.claimsLister.PersistentVolumeClaims(set.Namespace).Get(claim.Name) if err != nil { return err } - if err := checkClaimInvarients(set, pods[ord], claim, ord); err != nil { + if err := checkClaimInvarients(set, pod, claim); err != nil { return err } } - if !identityMatches(set, pods[ord]) { + if !identityMatches(set, pod) { return fmt.Errorf("pods %s does not match the identity specification of StatefulSet %s ", - pods[ord].Name, + pod.Name, set.Name) } } @@ -2538,24 +2612,24 @@ func assertUpdateInvariants(set *apps.StatefulSet, om *fakeObjectManager) error return err } sort.Sort(ascendingOrdinal(pods)) - for ord := 0; ord < len(pods); ord++ { + for _, pod := range pods { - if !storageMatches(set, pods[ord]) { - return fmt.Errorf("pod %s does not match the storage specification of StatefulSet %s ", pods[ord].Name, set.Name) + if !storageMatches(set, pod) { + return fmt.Errorf("pod %s does not match the storage specification of StatefulSet %s ", pod.Name, set.Name) } - for _, claim := range getPersistentVolumeClaims(set, pods[ord]) { + for _, claim := range getPersistentVolumeClaims(set, pod) { claim, err := om.claimsLister.PersistentVolumeClaims(set.Namespace).Get(claim.Name) if err != nil { return err } - if err := checkClaimInvarients(set, pods[ord], claim, ord); err != nil { + if err := checkClaimInvarients(set, pod, claim); err != nil { return err } } - if !identityMatches(set, pods[ord]) { - return fmt.Errorf("pod %s does not match the identity specification of StatefulSet %s ", pods[ord].Name, set.Name) + if !identityMatches(set, pod) { + return fmt.Errorf("pod %s does not match the identity specification of StatefulSet %s ", pod.Name, set.Name) } } if set.Spec.UpdateStrategy.Type == apps.OnDeleteStatefulSetStrategyType { @@ -2576,7 +2650,7 @@ func assertUpdateInvariants(set *apps.StatefulSet, om *fakeObjectManager) error return nil } -func checkClaimInvarients(set *apps.StatefulSet, pod *v1.Pod, claim *v1.PersistentVolumeClaim, ordinal int) error { +func checkClaimInvarients(set *apps.StatefulSet, pod *v1.Pod, claim *v1.PersistentVolumeClaim) error { policy := apps.StatefulSetPersistentVolumeClaimRetentionPolicy{ WhenScaled: apps.RetainPersistentVolumeClaimRetentionPolicyType, WhenDeleted: apps.RetainPersistentVolumeClaimRetentionPolicyType, @@ -2618,14 +2692,14 @@ func checkClaimInvarients(set *apps.StatefulSet, pod *v1.Pod, claim *v1.Persiste if hasOwnerRef(claim, set) { return fmt.Errorf("claim %s has unexpected owner ref on %s for scaledown only", claim.Name, set.Name) } - if ordinal >= int(*set.Spec.Replicas) && !hasOwnerRef(claim, pod) { + if !podInOrdinalRange(pod, set) && !hasOwnerRef(claim, pod) { return fmt.Errorf("claim %s does not have owner ref on condemned pod %s for scaledown delete", claim.Name, pod.Name) } - if ordinal < int(*set.Spec.Replicas) && hasOwnerRef(claim, pod) { - return fmt.Errorf("claim %s has unexpected owner ref on condemned pod %s for scaledown delete", claim.Name, pod.Name) + if podInOrdinalRange(pod, set) && hasOwnerRef(claim, pod) { + return fmt.Errorf("claim %s has unexpected owner ref on condemned pod %s for scaledown delete. ordinal: %d, [%d,%d]", claim.Name, pod.Name, getOrdinal(pod), getStartOrdinal(set), getEndOrdinal(set)) } case policy.WhenScaled == delete && policy.WhenDeleted == delete: - if ordinal >= int(*set.Spec.Replicas) { + if !podInOrdinalRange(pod, set) { if !hasOwnerRef(claim, pod) || hasOwnerRef(claim, set) { return fmt.Errorf("condemned claim %s has bad owner refs: %v", claim.Name, claim.GetOwnerReferences()) } @@ -2666,9 +2740,9 @@ func scaleUpStatefulSetControl(set *apps.StatefulSet, sort.Sort(ascendingOrdinal(pods)) // ensure all pods are valid (have a phase) - for ord, pod := range pods { + for _, pod := range pods { if pod.Status.Phase == "" { - if pods, err = om.setPodPending(set, ord); err != nil { + if pods, err = om.setPodPending(set, getOrdinal(pod)); err != nil { return err } break @@ -2677,15 +2751,15 @@ func scaleUpStatefulSetControl(set *apps.StatefulSet, // select one of the pods and move it forward in status if len(pods) > 0 { - ord := int(rand.Int63n(int64(len(pods)))) - pod := pods[ord] + idx := int(rand.Int63n(int64(len(pods)))) + pod := pods[idx] switch pod.Status.Phase { case v1.PodPending: - if pods, err = om.setPodRunning(set, ord); err != nil { + if pods, err = om.setPodRunning(set, getOrdinal(pod)); err != nil { return err } case v1.PodRunning: - if pods, err = om.setPodReady(set, ord); err != nil { + if pods, err = om.setPodReady(set, getOrdinal(pod)); err != nil { return err } default: @@ -2720,7 +2794,7 @@ func scaleDownStatefulSetControl(set *apps.StatefulSet, ssc StatefulSetControlIn return err } sort.Sort(ascendingOrdinal(pods)) - if ordinal := len(pods) - 1; ordinal >= 0 { + if idx := len(pods) - 1; idx >= 0 { if _, err := ssc.UpdateStatefulSet(context.TODO(), set, pods); err != nil { return err } @@ -2728,7 +2802,7 @@ func scaleDownStatefulSetControl(set *apps.StatefulSet, ssc StatefulSetControlIn if err != nil { return err } - if pods, err = om.addTerminatingPod(set, ordinal); err != nil { + if pods, err = om.addTerminatingPod(set, getOrdinal(pods[idx])); err != nil { return err } if _, err = ssc.UpdateStatefulSet(context.TODO(), set, pods); err != nil { @@ -2860,9 +2934,9 @@ func updateStatefulSetControl(set *apps.StatefulSet, } sort.Sort(ascendingOrdinal(pods)) initialized := false - for ord, pod := range pods { + for _, pod := range pods { if pod.Status.Phase == "" { - if pods, err = om.setPodPending(set, ord); err != nil { + if pods, err = om.setPodPending(set, getOrdinal(pod)); err != nil { return err } break @@ -2873,15 +2947,15 @@ func updateStatefulSetControl(set *apps.StatefulSet, } if len(pods) > 0 { - ord := int(rand.Int63n(int64(len(pods)))) - pod := pods[ord] + idx := int(rand.Int63n(int64(len(pods)))) + pod := pods[idx] switch pod.Status.Phase { case v1.PodPending: - if pods, err = om.setPodRunning(set, ord); err != nil { + if pods, err = om.setPodRunning(set, getOrdinal(pod)); err != nil { return err } case v1.PodRunning: - if pods, err = om.setPodReady(set, ord); err != nil { + if pods, err = om.setPodReady(set, getOrdinal(pod)); err != nil { return err } default: diff --git a/pkg/controller/statefulset/stateful_set_utils.go b/pkg/controller/statefulset/stateful_set_utils.go index 42f0e5ff7c6..10ca3aa9ce9 100644 --- a/pkg/controller/statefulset/stateful_set_utils.go +++ b/pkg/controller/statefulset/stateful_set_utils.go @@ -29,11 +29,13 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/strategicpatch" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/kubernetes/scheme" "k8s.io/klog/v2" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/history" + "k8s.io/kubernetes/pkg/features" ) var patchCodec = scheme.Codecs.LegacyCodec(apps.SchemeGroupVersion) @@ -85,6 +87,29 @@ func getOrdinal(pod *v1.Pod) int { return ordinal } +// getStartOrdinal gets the first possible ordinal (inclusive). +// Returns spec.ordinals.start if spec.ordinals is set, otherwise returns 0. +func getStartOrdinal(set *apps.StatefulSet) int { + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + if set.Spec.Ordinals != nil { + return int(set.Spec.Ordinals.Start) + } + } + return 0 +} + +// getEndOrdinal gets the last possible ordinal (inclusive). +func getEndOrdinal(set *apps.StatefulSet) int { + return getStartOrdinal(set) + int(*set.Spec.Replicas) - 1 +} + +// podInOrdinalRange returns true if the pod ordinal is within the allowed +// range of ordinals that this StatefulSet is set to control. +func podInOrdinalRange(pod *v1.Pod, set *apps.StatefulSet) bool { + ordinal := getOrdinal(pod) + return ordinal >= getStartOrdinal(set) && ordinal <= getEndOrdinal(set) +} + // getPodName gets the name of set's child Pod with an ordinal index of ordinal func getPodName(set *apps.StatefulSet, ordinal int) string { return fmt.Sprintf("%s-%d", set.Name, ordinal) @@ -170,12 +195,12 @@ func claimOwnerMatchesSetAndPod(claim *v1.PersistentVolumeClaim, set *apps.State if hasOwnerRef(claim, set) { return false } - podScaledDown := getOrdinal(pod) >= int(*set.Spec.Replicas) + podScaledDown := !podInOrdinalRange(pod, set) if podScaledDown != hasOwnerRef(claim, pod) { return false } case policy.WhenScaled == delete && policy.WhenDeleted == delete: - podScaledDown := getOrdinal(pod) >= int(*set.Spec.Replicas) + podScaledDown := !podInOrdinalRange(pod, set) // If a pod is scaled down, there should be no set ref and a pod ref; // if the pod is not scaled down it's the other way around. if podScaledDown == hasOwnerRef(claim, set) { @@ -226,7 +251,7 @@ func updateClaimOwnerRefForSetAndPod(claim *v1.PersistentVolumeClaim, set *apps. needsUpdate = removeOwnerRef(claim, pod) || needsUpdate case policy.WhenScaled == delete && policy.WhenDeleted == retain: needsUpdate = removeOwnerRef(claim, set) || needsUpdate - podScaledDown := getOrdinal(pod) >= int(*set.Spec.Replicas) + podScaledDown := !podInOrdinalRange(pod, set) if podScaledDown { needsUpdate = setOwnerRef(claim, pod, &podMeta) || needsUpdate } @@ -234,7 +259,7 @@ func updateClaimOwnerRefForSetAndPod(claim *v1.PersistentVolumeClaim, set *apps. needsUpdate = removeOwnerRef(claim, pod) || needsUpdate } case policy.WhenScaled == delete && policy.WhenDeleted == delete: - podScaledDown := getOrdinal(pod) >= int(*set.Spec.Replicas) + podScaledDown := !podInOrdinalRange(pod, set) if podScaledDown { needsUpdate = removeOwnerRef(claim, set) || needsUpdate needsUpdate = setOwnerRef(claim, pod, &podMeta) || needsUpdate @@ -440,8 +465,8 @@ func newStatefulSetPod(set *apps.StatefulSet, ordinal int) *v1.Pod { // returned error is nil, the returned Pod is valid. func newVersionedStatefulSetPod(currentSet, updateSet *apps.StatefulSet, currentRevision, updateRevision string, ordinal int) *v1.Pod { if currentSet.Spec.UpdateStrategy.Type == apps.RollingUpdateStatefulSetStrategyType && - (currentSet.Spec.UpdateStrategy.RollingUpdate == nil && ordinal < int(currentSet.Status.CurrentReplicas)) || - (currentSet.Spec.UpdateStrategy.RollingUpdate != nil && ordinal < int(*currentSet.Spec.UpdateStrategy.RollingUpdate.Partition)) { + (currentSet.Spec.UpdateStrategy.RollingUpdate == nil && ordinal < (getStartOrdinal(currentSet)+int(currentSet.Status.CurrentReplicas))) || + (currentSet.Spec.UpdateStrategy.RollingUpdate != nil && ordinal < (getStartOrdinal(currentSet)+int(*currentSet.Spec.UpdateStrategy.RollingUpdate.Partition))) { pod := newStatefulSetPod(currentSet, ordinal) setPodRevision(pod, currentRevision) return pod diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 07a213a1812..c08296e6026 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -766,6 +766,12 @@ const ( // StatefulSetMinReadySeconds allows minReadySeconds to be respected by StatefulSet controller StatefulSetMinReadySeconds featuregate.Feature = "StatefulSetMinReadySeconds" + // owner: @psch + // alpha: v1.26 + // + // Enables a StatefulSet to start from an arbitrary non zero ordinal + StatefulSetSlice featuregate.Feature = "StatefulSetSlice" + // owner: @robscott // kep: https://kep.k8s.io/2433 // alpha: v1.21 @@ -1075,6 +1081,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS StatefulSetMinReadySeconds: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.27 + StatefulSetSlice: {Default: false, PreRelease: featuregate.Alpha}, + TopologyAwareHints: {Default: true, PreRelease: featuregate.Beta}, TopologyManager: {Default: true, PreRelease: featuregate.Beta}, diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index de89e58a0b9..4ee81ddc4bd 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -100,6 +100,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/apps/v1.StatefulSet": schema_k8sio_api_apps_v1_StatefulSet(ref), "k8s.io/api/apps/v1.StatefulSetCondition": schema_k8sio_api_apps_v1_StatefulSetCondition(ref), "k8s.io/api/apps/v1.StatefulSetList": schema_k8sio_api_apps_v1_StatefulSetList(ref), + "k8s.io/api/apps/v1.StatefulSetOrdinals": schema_k8sio_api_apps_v1_StatefulSetOrdinals(ref), "k8s.io/api/apps/v1.StatefulSetPersistentVolumeClaimRetentionPolicy": schema_k8sio_api_apps_v1_StatefulSetPersistentVolumeClaimRetentionPolicy(ref), "k8s.io/api/apps/v1.StatefulSetSpec": schema_k8sio_api_apps_v1_StatefulSetSpec(ref), "k8s.io/api/apps/v1.StatefulSetStatus": schema_k8sio_api_apps_v1_StatefulSetStatus(ref), @@ -122,6 +123,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/apps/v1beta1.StatefulSet": schema_k8sio_api_apps_v1beta1_StatefulSet(ref), "k8s.io/api/apps/v1beta1.StatefulSetCondition": schema_k8sio_api_apps_v1beta1_StatefulSetCondition(ref), "k8s.io/api/apps/v1beta1.StatefulSetList": schema_k8sio_api_apps_v1beta1_StatefulSetList(ref), + "k8s.io/api/apps/v1beta1.StatefulSetOrdinals": schema_k8sio_api_apps_v1beta1_StatefulSetOrdinals(ref), "k8s.io/api/apps/v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy": schema_k8sio_api_apps_v1beta1_StatefulSetPersistentVolumeClaimRetentionPolicy(ref), "k8s.io/api/apps/v1beta1.StatefulSetSpec": schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref), "k8s.io/api/apps/v1beta1.StatefulSetStatus": schema_k8sio_api_apps_v1beta1_StatefulSetStatus(ref), @@ -154,6 +156,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/apps/v1beta2.StatefulSet": schema_k8sio_api_apps_v1beta2_StatefulSet(ref), "k8s.io/api/apps/v1beta2.StatefulSetCondition": schema_k8sio_api_apps_v1beta2_StatefulSetCondition(ref), "k8s.io/api/apps/v1beta2.StatefulSetList": schema_k8sio_api_apps_v1beta2_StatefulSetList(ref), + "k8s.io/api/apps/v1beta2.StatefulSetOrdinals": schema_k8sio_api_apps_v1beta2_StatefulSetOrdinals(ref), "k8s.io/api/apps/v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy": schema_k8sio_api_apps_v1beta2_StatefulSetPersistentVolumeClaimRetentionPolicy(ref), "k8s.io/api/apps/v1beta2.StatefulSetSpec": schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref), "k8s.io/api/apps/v1beta2.StatefulSetStatus": schema_k8sio_api_apps_v1beta2_StatefulSetStatus(ref), @@ -4857,6 +4860,27 @@ func schema_k8sio_api_apps_v1_StatefulSetList(ref common.ReferenceCallback) comm } } +func schema_k8sio_api_apps_v1_StatefulSetOrdinals(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "start": { + SchemaProps: spec.SchemaProps{ + Description: "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + func schema_k8sio_api_apps_v1_StatefulSetPersistentVolumeClaimRetentionPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -4967,12 +4991,18 @@ func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) comm Ref: ref("k8s.io/api/apps/v1.StatefulSetPersistentVolumeClaimRetentionPolicy"), }, }, + "ordinals": { + SchemaProps: spec.SchemaProps{ + Description: "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + Ref: ref("k8s.io/api/apps/v1.StatefulSetOrdinals"), + }, + }, }, Required: []string{"selector", "template", "serviceName"}, }, }, Dependencies: []string{ - "k8s.io/api/apps/v1.StatefulSetPersistentVolumeClaimRetentionPolicy", "k8s.io/api/apps/v1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "k8s.io/api/apps/v1.StatefulSetOrdinals", "k8s.io/api/apps/v1.StatefulSetPersistentVolumeClaimRetentionPolicy", "k8s.io/api/apps/v1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } @@ -5965,6 +5995,27 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetList(ref common.ReferenceCallback) } } +func schema_k8sio_api_apps_v1beta1_StatefulSetOrdinals(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "start": { + SchemaProps: spec.SchemaProps{ + Description: "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + func schema_k8sio_api_apps_v1beta1_StatefulSetPersistentVolumeClaimRetentionPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -6075,12 +6126,18 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy"), }, }, + "ordinals": { + SchemaProps: spec.SchemaProps{ + Description: "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetOrdinals"), + }, + }, }, Required: []string{"template", "serviceName"}, }, }, Dependencies: []string{ - "k8s.io/api/apps/v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy", "k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "k8s.io/api/apps/v1beta1.StatefulSetOrdinals", "k8s.io/api/apps/v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy", "k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } @@ -7622,6 +7679,27 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetList(ref common.ReferenceCallback) } } +func schema_k8sio_api_apps_v1beta2_StatefulSetOrdinals(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "start": { + SchemaProps: spec.SchemaProps{ + Description: "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + func schema_k8sio_api_apps_v1beta2_StatefulSetPersistentVolumeClaimRetentionPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -7732,12 +7810,18 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy"), }, }, + "ordinals": { + SchemaProps: spec.SchemaProps{ + Description: "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetOrdinals"), + }, + }, }, Required: []string{"selector", "template", "serviceName"}, }, }, Dependencies: []string{ - "k8s.io/api/apps/v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy", "k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "k8s.io/api/apps/v1beta2.StatefulSetOrdinals", "k8s.io/api/apps/v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy", "k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } diff --git a/pkg/registry/apps/statefulset/strategy.go b/pkg/registry/apps/statefulset/strategy.go index 7b63faa7513..1ebcf629e41 100644 --- a/pkg/registry/apps/statefulset/strategy.go +++ b/pkg/registry/apps/statefulset/strategy.go @@ -128,6 +128,10 @@ func dropStatefulSetDisabledFields(newSS *apps.StatefulSet, oldSS *apps.Stateful newSS.Spec.UpdateStrategy.RollingUpdate.MaxUnavailable = nil } } + if !utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + // Reset Spec.Ordinals to the default value (nil). + newSS.Spec.Ordinals = nil + } } // Validate validates a new StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1/generated.pb.go b/staging/src/k8s.io/api/apps/v1/generated.pb.go index ee10998d52c..3da63d229bf 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.pb.go +++ b/staging/src/k8s.io/api/apps/v1/generated.pb.go @@ -748,12 +748,40 @@ func (m *StatefulSetList) XXX_DiscardUnknown() { var xxx_messageInfo_StatefulSetList proto.InternalMessageInfo +func (m *StatefulSetOrdinals) Reset() { *m = StatefulSetOrdinals{} } +func (*StatefulSetOrdinals) ProtoMessage() {} +func (*StatefulSetOrdinals) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{25} +} +func (m *StatefulSetOrdinals) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetOrdinals) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetOrdinals) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetOrdinals.Merge(m, src) +} +func (m *StatefulSetOrdinals) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetOrdinals) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetOrdinals.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetOrdinals proto.InternalMessageInfo + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Reset() { *m = StatefulSetPersistentVolumeClaimRetentionPolicy{} } func (*StatefulSetPersistentVolumeClaimRetentionPolicy) ProtoMessage() {} func (*StatefulSetPersistentVolumeClaimRetentionPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_e1014cab6f31e43b, []int{25} + return fileDescriptor_e1014cab6f31e43b, []int{26} } func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -781,7 +809,7 @@ var xxx_messageInfo_StatefulSetPersistentVolumeClaimRetentionPolicy proto.Intern func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } func (*StatefulSetSpec) ProtoMessage() {} func (*StatefulSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_e1014cab6f31e43b, []int{26} + return fileDescriptor_e1014cab6f31e43b, []int{27} } func (m *StatefulSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -809,7 +837,7 @@ var xxx_messageInfo_StatefulSetSpec proto.InternalMessageInfo func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } func (*StatefulSetStatus) ProtoMessage() {} func (*StatefulSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_e1014cab6f31e43b, []int{27} + return fileDescriptor_e1014cab6f31e43b, []int{28} } func (m *StatefulSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -837,7 +865,7 @@ var xxx_messageInfo_StatefulSetStatus proto.InternalMessageInfo func (m *StatefulSetUpdateStrategy) Reset() { *m = StatefulSetUpdateStrategy{} } func (*StatefulSetUpdateStrategy) ProtoMessage() {} func (*StatefulSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_e1014cab6f31e43b, []int{28} + return fileDescriptor_e1014cab6f31e43b, []int{29} } func (m *StatefulSetUpdateStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -888,6 +916,7 @@ func init() { proto.RegisterType((*StatefulSet)(nil), "k8s.io.api.apps.v1.StatefulSet") proto.RegisterType((*StatefulSetCondition)(nil), "k8s.io.api.apps.v1.StatefulSetCondition") proto.RegisterType((*StatefulSetList)(nil), "k8s.io.api.apps.v1.StatefulSetList") + proto.RegisterType((*StatefulSetOrdinals)(nil), "k8s.io.api.apps.v1.StatefulSetOrdinals") proto.RegisterType((*StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), "k8s.io.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy") proto.RegisterType((*StatefulSetSpec)(nil), "k8s.io.api.apps.v1.StatefulSetSpec") proto.RegisterType((*StatefulSetStatus)(nil), "k8s.io.api.apps.v1.StatefulSetStatus") @@ -899,142 +928,146 @@ func init() { } var fileDescriptor_e1014cab6f31e43b = []byte{ - // 2160 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1c, 0xb7, - 0x15, 0xd7, 0xec, 0x87, 0xb4, 0xa2, 0x2c, 0xc9, 0xa6, 0x54, 0x69, 0x63, 0x37, 0xbb, 0xee, 0xd6, - 0x75, 0x94, 0x38, 0xde, 0xad, 0x1d, 0x27, 0x08, 0xe2, 0x22, 0x81, 0x66, 0x95, 0xa6, 0x69, 0x24, - 0x59, 0xa5, 0x2c, 0x07, 0x70, 0xd3, 0xa2, 0xd4, 0x2c, 0xbd, 0x9a, 0x68, 0xbe, 0x30, 0xc3, 0x51, - 0x2c, 0xf4, 0x52, 0x14, 0xe8, 0xad, 0x87, 0xfe, 0x27, 0x45, 0x51, 0x34, 0xb7, 0x20, 0x08, 0x7a, - 0xf1, 0xa5, 0x68, 0xd0, 0x4b, 0x73, 0x5a, 0xd4, 0x9b, 0x53, 0x51, 0xf4, 0xd6, 0x5e, 0x7c, 0x69, - 0x41, 0x0e, 0xe7, 0x9b, 0xa3, 0x5d, 0xc9, 0xb1, 0xf2, 0x01, 0xdf, 0xb4, 0xe4, 0xef, 0xfd, 0xf8, - 0x48, 0xbe, 0xc7, 0xf7, 0x23, 0x47, 0xe0, 0xe6, 0xfe, 0xab, 0x5e, 0x5b, 0xb7, 0x3b, 0xfb, 0xfe, - 0x2e, 0x71, 0x2d, 0x42, 0x89, 0xd7, 0x39, 0x20, 0x56, 0xcf, 0x76, 0x3b, 0xa2, 0x03, 0x3b, 0x7a, - 0x07, 0x3b, 0x8e, 0xd7, 0x39, 0xb8, 0xd6, 0xe9, 0x13, 0x8b, 0xb8, 0x98, 0x92, 0x5e, 0xdb, 0x71, - 0x6d, 0x6a, 0x43, 0x18, 0x60, 0xda, 0xd8, 0xd1, 0xdb, 0x0c, 0xd3, 0x3e, 0xb8, 0x76, 0xfe, 0x6a, - 0x5f, 0xa7, 0x7b, 0xfe, 0x6e, 0x5b, 0xb3, 0xcd, 0x4e, 0xdf, 0xee, 0xdb, 0x1d, 0x0e, 0xdd, 0xf5, - 0xef, 0xf1, 0x5f, 0xfc, 0x07, 0xff, 0x2b, 0xa0, 0x38, 0xdf, 0x4a, 0x0c, 0xa3, 0xd9, 0x2e, 0x91, - 0x0c, 0x73, 0xfe, 0x46, 0x8c, 0x31, 0xb1, 0xb6, 0xa7, 0x5b, 0xc4, 0x3d, 0xec, 0x38, 0xfb, 0x7d, - 0xd6, 0xe0, 0x75, 0x4c, 0x42, 0xb1, 0xcc, 0xaa, 0x53, 0x64, 0xe5, 0xfa, 0x16, 0xd5, 0x4d, 0x92, - 0x33, 0x78, 0x65, 0x94, 0x81, 0xa7, 0xed, 0x11, 0x13, 0xe7, 0xec, 0x5e, 0x2a, 0xb2, 0xf3, 0xa9, - 0x6e, 0x74, 0x74, 0x8b, 0x7a, 0xd4, 0xcd, 0x1a, 0xb5, 0xfe, 0xab, 0x00, 0xd8, 0xb5, 0x2d, 0xea, - 0xda, 0x86, 0x41, 0x5c, 0x44, 0x0e, 0x74, 0x4f, 0xb7, 0x2d, 0xf8, 0x0b, 0x50, 0x63, 0xf3, 0xe9, - 0x61, 0x8a, 0xeb, 0xca, 0x45, 0x65, 0x65, 0xe6, 0xfa, 0xf7, 0xdb, 0xf1, 0x22, 0x47, 0xf4, 0x6d, - 0x67, 0xbf, 0xcf, 0x1a, 0xbc, 0x36, 0x43, 0xb7, 0x0f, 0xae, 0xb5, 0x6f, 0xed, 0xbe, 0x4f, 0x34, - 0xba, 0x41, 0x28, 0x56, 0xe1, 0x83, 0x41, 0x73, 0x62, 0x38, 0x68, 0x82, 0xb8, 0x0d, 0x45, 0xac, - 0xf0, 0x16, 0xa8, 0x70, 0xf6, 0x12, 0x67, 0xbf, 0x5a, 0xc8, 0x2e, 0x26, 0xdd, 0x46, 0xf8, 0x83, - 0x37, 0xef, 0x53, 0x62, 0x31, 0xf7, 0xd4, 0x33, 0x82, 0xba, 0xb2, 0x86, 0x29, 0x46, 0x9c, 0x08, - 0xbe, 0x08, 0x6a, 0xae, 0x70, 0xbf, 0x5e, 0xbe, 0xa8, 0xac, 0x94, 0xd5, 0xb3, 0x02, 0x55, 0x0b, - 0xa7, 0x85, 0x22, 0x44, 0xeb, 0xcf, 0x0a, 0x58, 0xca, 0xcf, 0x7b, 0x5d, 0xf7, 0x28, 0x7c, 0x2f, - 0x37, 0xf7, 0xf6, 0x78, 0x73, 0x67, 0xd6, 0x7c, 0xe6, 0xd1, 0xc0, 0x61, 0x4b, 0x62, 0xde, 0xef, - 0x80, 0xaa, 0x4e, 0x89, 0xe9, 0xd5, 0x4b, 0x17, 0xcb, 0x2b, 0x33, 0xd7, 0x2f, 0xb7, 0xf3, 0xb1, - 0xdb, 0xce, 0x3b, 0xa6, 0xce, 0x0a, 0xca, 0xea, 0xdb, 0xcc, 0x18, 0x05, 0x1c, 0xad, 0xff, 0x29, - 0x60, 0x7a, 0x0d, 0x13, 0xd3, 0xb6, 0xb6, 0x09, 0x3d, 0x85, 0x4d, 0xeb, 0x82, 0x8a, 0xe7, 0x10, - 0x4d, 0x6c, 0xda, 0x77, 0x64, 0xbe, 0x47, 0xee, 0x6c, 0x3b, 0x44, 0x8b, 0x37, 0x8a, 0xfd, 0x42, - 0xdc, 0x18, 0xbe, 0x03, 0x26, 0x3d, 0x8a, 0xa9, 0xef, 0xf1, 0x6d, 0x9a, 0xb9, 0xfe, 0xdd, 0xa3, - 0x69, 0x38, 0x54, 0x9d, 0x13, 0x44, 0x93, 0xc1, 0x6f, 0x24, 0x28, 0x5a, 0xff, 0x2c, 0x01, 0x18, - 0x61, 0xbb, 0xb6, 0xd5, 0xd3, 0x29, 0x8b, 0xdf, 0xd7, 0x40, 0x85, 0x1e, 0x3a, 0x84, 0x2f, 0xc3, - 0xb4, 0x7a, 0x39, 0xf4, 0xe2, 0xf6, 0xa1, 0x43, 0x1e, 0x0d, 0x9a, 0x4b, 0x79, 0x0b, 0xd6, 0x83, - 0xb8, 0x0d, 0x5c, 0x8f, 0xfc, 0x2b, 0x71, 0xeb, 0x1b, 0xe9, 0xa1, 0x1f, 0x0d, 0x9a, 0x92, 0xc3, - 0xa2, 0x1d, 0x31, 0xa5, 0x1d, 0x84, 0x07, 0x00, 0x1a, 0xd8, 0xa3, 0xb7, 0x5d, 0x6c, 0x79, 0xc1, - 0x48, 0xba, 0x49, 0xc4, 0xcc, 0x5f, 0x18, 0x6f, 0x7b, 0x98, 0x85, 0x7a, 0x5e, 0x78, 0x01, 0xd7, - 0x73, 0x6c, 0x48, 0x32, 0x02, 0xbc, 0x0c, 0x26, 0x5d, 0x82, 0x3d, 0xdb, 0xaa, 0x57, 0xf8, 0x2c, - 0xa2, 0x05, 0x44, 0xbc, 0x15, 0x89, 0x5e, 0xf8, 0x3c, 0x98, 0x32, 0x89, 0xe7, 0xe1, 0x3e, 0xa9, - 0x57, 0x39, 0x70, 0x5e, 0x00, 0xa7, 0x36, 0x82, 0x66, 0x14, 0xf6, 0xb7, 0xfe, 0xa0, 0x80, 0xd9, - 0x68, 0xe5, 0x4e, 0x21, 0x55, 0xd4, 0x74, 0xaa, 0x3c, 0x7b, 0x64, 0x9c, 0x14, 0x64, 0xc8, 0xc7, - 0xe5, 0x84, 0xcf, 0x2c, 0x08, 0xe1, 0xcf, 0x40, 0xcd, 0x23, 0x06, 0xd1, 0xa8, 0xed, 0x0a, 0x9f, - 0x5f, 0x1a, 0xd3, 0x67, 0xbc, 0x4b, 0x8c, 0x6d, 0x61, 0xaa, 0x9e, 0x61, 0x4e, 0x87, 0xbf, 0x50, - 0x44, 0x09, 0x7f, 0x02, 0x6a, 0x94, 0x98, 0x8e, 0x81, 0x29, 0x11, 0x69, 0x92, 0x8a, 0x6f, 0x16, - 0x2e, 0x8c, 0x6c, 0xcb, 0xee, 0xdd, 0x16, 0x30, 0x9e, 0x28, 0xd1, 0x3a, 0x84, 0xad, 0x28, 0xa2, - 0x81, 0xfb, 0x60, 0xce, 0x77, 0x7a, 0x0c, 0x49, 0xd9, 0xd1, 0xdd, 0x3f, 0x14, 0xe1, 0x73, 0xe5, - 0xc8, 0x05, 0xd9, 0x49, 0x99, 0xa8, 0x4b, 0x62, 0x80, 0xb9, 0x74, 0x3b, 0xca, 0x50, 0xc3, 0x55, - 0x30, 0x6f, 0xea, 0x16, 0x22, 0xb8, 0x77, 0xb8, 0x4d, 0x34, 0xdb, 0xea, 0x79, 0x3c, 0x80, 0xaa, - 0xea, 0xb2, 0x20, 0x98, 0xdf, 0x48, 0x77, 0xa3, 0x2c, 0x1e, 0xae, 0x83, 0xc5, 0xf0, 0x9c, 0xfd, - 0x91, 0xee, 0x51, 0xdb, 0x3d, 0x5c, 0xd7, 0x4d, 0x9d, 0xd6, 0x27, 0x39, 0x4f, 0x7d, 0x38, 0x68, - 0x2e, 0x22, 0x49, 0x3f, 0x92, 0x5a, 0xb5, 0x7e, 0x3b, 0x09, 0xe6, 0x33, 0xa7, 0x01, 0xbc, 0x03, - 0x96, 0x34, 0xdf, 0x75, 0x89, 0x45, 0x37, 0x7d, 0x73, 0x97, 0xb8, 0xdb, 0xda, 0x1e, 0xe9, 0xf9, - 0x06, 0xe9, 0xf1, 0x1d, 0xad, 0xaa, 0x0d, 0xe1, 0xeb, 0x52, 0x57, 0x8a, 0x42, 0x05, 0xd6, 0xf0, - 0xc7, 0x00, 0x5a, 0xbc, 0x69, 0x43, 0xf7, 0xbc, 0x88, 0xb3, 0xc4, 0x39, 0xa3, 0x04, 0xdc, 0xcc, - 0x21, 0x90, 0xc4, 0x8a, 0xf9, 0xd8, 0x23, 0x9e, 0xee, 0x92, 0x5e, 0xd6, 0xc7, 0x72, 0xda, 0xc7, - 0x35, 0x29, 0x0a, 0x15, 0x58, 0xc3, 0x97, 0xc1, 0x4c, 0x30, 0x1a, 0x5f, 0x73, 0xb1, 0x39, 0x0b, - 0x82, 0x6c, 0x66, 0x33, 0xee, 0x42, 0x49, 0x1c, 0x9b, 0x9a, 0xbd, 0xeb, 0x11, 0xf7, 0x80, 0xf4, - 0xde, 0x0a, 0x34, 0x00, 0x2b, 0x94, 0x55, 0x5e, 0x28, 0xa3, 0xa9, 0xdd, 0xca, 0x21, 0x90, 0xc4, - 0x8a, 0x4d, 0x2d, 0x88, 0x9a, 0xdc, 0xd4, 0x26, 0xd3, 0x53, 0xdb, 0x91, 0xa2, 0x50, 0x81, 0x35, - 0x8b, 0xbd, 0xc0, 0xe5, 0xd5, 0x03, 0xac, 0x1b, 0x78, 0xd7, 0x20, 0xf5, 0xa9, 0x74, 0xec, 0x6d, - 0xa6, 0xbb, 0x51, 0x16, 0x0f, 0xdf, 0x02, 0xe7, 0x82, 0xa6, 0x1d, 0x0b, 0x47, 0x24, 0x35, 0x4e, - 0xf2, 0x8c, 0x20, 0x39, 0xb7, 0x99, 0x05, 0xa0, 0xbc, 0x0d, 0x7c, 0x0d, 0xcc, 0x69, 0xb6, 0x61, - 0xf0, 0x78, 0xec, 0xda, 0xbe, 0x45, 0xeb, 0xd3, 0x9c, 0x05, 0xb2, 0x1c, 0xea, 0xa6, 0x7a, 0x50, - 0x06, 0x09, 0xef, 0x02, 0xa0, 0x85, 0xe5, 0xc0, 0xab, 0x83, 0xe2, 0x42, 0x9f, 0xaf, 0x43, 0x71, - 0x01, 0x8e, 0x9a, 0x3c, 0x94, 0x60, 0x6b, 0x7d, 0xac, 0x80, 0xe5, 0x82, 0x1c, 0x87, 0x6f, 0xa4, - 0xaa, 0xde, 0x95, 0x4c, 0xd5, 0xbb, 0x50, 0x60, 0x96, 0x28, 0x7d, 0x1a, 0x98, 0x65, 0xba, 0x43, - 0xb7, 0xfa, 0x01, 0x44, 0x9c, 0x60, 0x2f, 0xc8, 0x7c, 0x47, 0x49, 0x60, 0x7c, 0x0c, 0x9f, 0x1b, - 0x0e, 0x9a, 0xb3, 0xa9, 0x3e, 0x94, 0xe6, 0x6c, 0xfd, 0xba, 0x04, 0xc0, 0x1a, 0x71, 0x0c, 0xfb, - 0xd0, 0x24, 0xd6, 0x69, 0xa8, 0x96, 0xb5, 0x94, 0x6a, 0x69, 0x49, 0x37, 0x22, 0xf2, 0xa7, 0x50, - 0xb6, 0xac, 0x67, 0x64, 0xcb, 0xa5, 0x11, 0x3c, 0x47, 0xeb, 0x96, 0xbf, 0x97, 0xc1, 0x42, 0x0c, - 0x8e, 0x85, 0xcb, 0xcd, 0xd4, 0x16, 0x3e, 0x97, 0xd9, 0xc2, 0x65, 0x89, 0xc9, 0x13, 0x53, 0x2e, - 0xef, 0x83, 0x39, 0xa6, 0x2b, 0x82, 0x5d, 0xe3, 0xaa, 0x65, 0xf2, 0xd8, 0xaa, 0x25, 0xaa, 0x3a, - 0xeb, 0x29, 0x26, 0x94, 0x61, 0x2e, 0x50, 0x49, 0x53, 0x5f, 0x47, 0x95, 0xf4, 0x47, 0x05, 0xcc, - 0xc5, 0xdb, 0x74, 0x0a, 0x32, 0xa9, 0x9b, 0x96, 0x49, 0x8d, 0xa3, 0xe3, 0xb2, 0x40, 0x27, 0xfd, - 0xad, 0x92, 0xf4, 0x9a, 0x0b, 0xa5, 0x15, 0x76, 0xa1, 0x72, 0x0c, 0x5d, 0xc3, 0x9e, 0x28, 0xab, - 0x67, 0x82, 0xcb, 0x54, 0xd0, 0x86, 0xa2, 0xde, 0x94, 0xa4, 0x2a, 0x3d, 0x59, 0x49, 0x55, 0xfe, - 0x62, 0x24, 0xd5, 0x6d, 0x50, 0xf3, 0x42, 0x31, 0x55, 0xe1, 0x94, 0x97, 0x47, 0xa5, 0xb3, 0xd0, - 0x51, 0x11, 0x6b, 0xa4, 0xa0, 0x22, 0x26, 0x99, 0x76, 0xaa, 0x7e, 0x99, 0xda, 0x89, 0x85, 0xb7, - 0x83, 0x7d, 0x8f, 0xf4, 0x78, 0x2a, 0xd5, 0xe2, 0xf0, 0xde, 0xe2, 0xad, 0x48, 0xf4, 0xc2, 0x1d, - 0xb0, 0xec, 0xb8, 0x76, 0xdf, 0x25, 0x9e, 0xb7, 0x46, 0x70, 0xcf, 0xd0, 0x2d, 0x12, 0x4e, 0x20, - 0xa8, 0x7a, 0x17, 0x86, 0x83, 0xe6, 0xf2, 0x96, 0x1c, 0x82, 0x8a, 0x6c, 0x5b, 0x1f, 0x55, 0xc0, - 0xd9, 0xec, 0x89, 0x58, 0x20, 0x44, 0x94, 0x13, 0x09, 0x91, 0x17, 0x13, 0x21, 0x1a, 0xa8, 0xb4, - 0xc4, 0x9d, 0x3f, 0x17, 0xa6, 0xab, 0x60, 0x5e, 0x08, 0x8f, 0xb0, 0x53, 0x48, 0xb1, 0x68, 0x7b, - 0x76, 0xd2, 0xdd, 0x28, 0x8b, 0x87, 0x37, 0xc1, 0xac, 0xcb, 0xb5, 0x55, 0x48, 0x10, 0xe8, 0x93, - 0x6f, 0x09, 0x82, 0x59, 0x94, 0xec, 0x44, 0x69, 0x2c, 0xd3, 0x26, 0xb1, 0xe4, 0x08, 0x09, 0x2a, - 0x69, 0x6d, 0xb2, 0x9a, 0x05, 0xa0, 0xbc, 0x0d, 0xdc, 0x00, 0x0b, 0xbe, 0x95, 0xa7, 0x0a, 0x62, - 0xed, 0x82, 0xa0, 0x5a, 0xd8, 0xc9, 0x43, 0x90, 0xcc, 0x0e, 0xfe, 0x34, 0x25, 0x57, 0x26, 0xf9, - 0x29, 0xf2, 0xdc, 0xd1, 0xe9, 0x30, 0xb6, 0x5e, 0x91, 0xe8, 0xa8, 0xda, 0xb8, 0x3a, 0xaa, 0xf5, - 0xa1, 0x02, 0x60, 0x3e, 0x05, 0x47, 0x5e, 0xee, 0x73, 0x16, 0x89, 0x12, 0xd9, 0x93, 0x2b, 0x9c, - 0x2b, 0xa3, 0x15, 0x4e, 0x7c, 0x82, 0x8e, 0x27, 0x71, 0xc4, 0xf2, 0x9e, 0xce, 0xc3, 0xcc, 0x18, - 0x12, 0x27, 0xf6, 0xe7, 0xf1, 0x24, 0x4e, 0x82, 0xe7, 0x68, 0x89, 0xf3, 0xaf, 0x12, 0x58, 0x88, - 0xc1, 0x63, 0x4b, 0x1c, 0x89, 0xc9, 0xd3, 0xc7, 0x99, 0xf1, 0x64, 0x47, 0xbc, 0x74, 0x5f, 0x11, - 0xd9, 0x11, 0x3b, 0x54, 0x20, 0x3b, 0x7e, 0x5f, 0x4a, 0x7a, 0x7d, 0x4c, 0xd9, 0xf1, 0x05, 0x3c, - 0x55, 0x7c, 0xed, 0x94, 0x4b, 0xeb, 0x93, 0x32, 0x38, 0x9b, 0x4d, 0xc1, 0x54, 0x1d, 0x54, 0x46, - 0xd6, 0xc1, 0x2d, 0xb0, 0x78, 0xcf, 0x37, 0x8c, 0x43, 0x3e, 0x87, 0x44, 0x31, 0x0c, 0x2a, 0xe8, - 0xb7, 0x85, 0xe5, 0xe2, 0x0f, 0x25, 0x18, 0x24, 0xb5, 0xcc, 0x97, 0xc5, 0xca, 0xe3, 0x96, 0xc5, - 0xea, 0x09, 0xca, 0xa2, 0x5c, 0x59, 0x94, 0x4f, 0xa4, 0x2c, 0xc6, 0xae, 0x89, 0x92, 0xe3, 0x6a, - 0xe4, 0x1d, 0x7e, 0xa8, 0x80, 0x25, 0xf9, 0xf5, 0x19, 0x1a, 0x60, 0xce, 0xc4, 0xf7, 0x93, 0x8f, - 0x17, 0xa3, 0x0a, 0x86, 0x4f, 0x75, 0xa3, 0x1d, 0x7c, 0xdd, 0x69, 0xbf, 0x6d, 0xd1, 0x5b, 0xee, - 0x36, 0x75, 0x75, 0xab, 0x1f, 0x14, 0xd8, 0x8d, 0x14, 0x17, 0xca, 0x70, 0xc3, 0xbb, 0xa0, 0x66, - 0xe2, 0xfb, 0xdb, 0xbe, 0xdb, 0x0f, 0x0b, 0xe1, 0xf1, 0xc7, 0xe1, 0xb1, 0xbf, 0x21, 0x58, 0x50, - 0xc4, 0xd7, 0xfa, 0x5c, 0x01, 0xcb, 0x05, 0x15, 0xf4, 0x1b, 0x34, 0xcb, 0x8f, 0x14, 0x70, 0x31, - 0x35, 0x4b, 0x96, 0x91, 0xe4, 0x9e, 0x6f, 0xf0, 0xe4, 0x14, 0x82, 0xe5, 0x0a, 0x98, 0x76, 0xb0, - 0x4b, 0xf5, 0x48, 0xe9, 0x56, 0xd5, 0xd9, 0xe1, 0xa0, 0x39, 0xbd, 0x15, 0x36, 0xa2, 0xb8, 0x5f, - 0xb2, 0x36, 0xa5, 0x27, 0xb7, 0x36, 0xad, 0xdf, 0x94, 0xc0, 0x4c, 0xc2, 0xe5, 0x53, 0x90, 0x2a, - 0x6f, 0xa6, 0xa4, 0x8a, 0xf4, 0xe3, 0x4f, 0x72, 0x0d, 0x8b, 0xb4, 0xca, 0x46, 0x46, 0xab, 0x7c, - 0x6f, 0x14, 0xd1, 0xd1, 0x62, 0xe5, 0xdf, 0x25, 0xb0, 0x98, 0x40, 0xc7, 0x6a, 0xe5, 0x07, 0x29, - 0xb5, 0xb2, 0x92, 0x51, 0x2b, 0x75, 0x99, 0xcd, 0x53, 0xb9, 0x32, 0x5a, 0xae, 0xfc, 0x49, 0x01, - 0xf3, 0x89, 0xb5, 0x3b, 0x05, 0xbd, 0xb2, 0x96, 0xd6, 0x2b, 0xcd, 0x11, 0xf1, 0x52, 0x20, 0x58, - 0xfe, 0xa3, 0x80, 0x4e, 0x02, 0xb5, 0x45, 0x5c, 0x4f, 0xf7, 0x28, 0xb1, 0xe8, 0x1d, 0xdb, 0xf0, - 0x4d, 0xd2, 0x35, 0xb0, 0x6e, 0x22, 0xc2, 0x1a, 0x74, 0xdb, 0xda, 0xb2, 0x0d, 0x5d, 0x3b, 0x84, - 0x18, 0xcc, 0x7c, 0xb0, 0x47, 0xac, 0x35, 0x62, 0x10, 0x2a, 0x3e, 0x51, 0x4c, 0xab, 0x6f, 0x84, - 0x2f, 0xf6, 0xef, 0xc6, 0x5d, 0x8f, 0x06, 0xcd, 0x95, 0x71, 0x18, 0x79, 0x80, 0x25, 0x39, 0xe1, - 0xcf, 0x01, 0x60, 0x3f, 0xb7, 0x35, 0x1c, 0x7e, 0xb0, 0x98, 0x56, 0x5f, 0x0f, 0xd3, 0xf0, 0xdd, - 0xa8, 0xe7, 0x58, 0x03, 0x24, 0x18, 0x5b, 0x7f, 0x9d, 0x4a, 0x6d, 0xd7, 0x37, 0xfe, 0x7d, 0xe8, - 0x97, 0x60, 0xf1, 0x20, 0x5e, 0x9d, 0x10, 0xc0, 0x74, 0x0d, 0x8b, 0x9d, 0xe7, 0xa5, 0xf4, 0xb2, - 0x75, 0x8d, 0xd5, 0xd4, 0x1d, 0x09, 0x1d, 0x92, 0x0e, 0x02, 0x5f, 0x06, 0x33, 0x4c, 0x8f, 0xe8, - 0x1a, 0xd9, 0xc4, 0x66, 0x98, 0x4a, 0xd1, 0x17, 0x9e, 0xed, 0xb8, 0x0b, 0x25, 0x71, 0x70, 0x0f, - 0x2c, 0x38, 0x76, 0x6f, 0x03, 0x5b, 0xb8, 0x4f, 0x58, 0x95, 0x0d, 0xb6, 0x92, 0xbf, 0x1c, 0x4d, - 0xab, 0xaf, 0x84, 0xaf, 0x02, 0x5b, 0x79, 0x08, 0xbb, 0x75, 0x49, 0x9a, 0x79, 0x10, 0xc8, 0x28, - 0xa1, 0x99, 0xfb, 0x20, 0x39, 0x95, 0xfb, 0x2f, 0x0e, 0x59, 0x4e, 0x9d, 0xf0, 0x93, 0x64, 0xd1, - 0x9b, 0x58, 0xed, 0x44, 0x6f, 0x62, 0x92, 0x5b, 0xc3, 0xf4, 0x31, 0x6f, 0x0d, 0x9f, 0x28, 0xe0, - 0x92, 0x33, 0x46, 0x1a, 0xd5, 0x01, 0x5f, 0x96, 0xee, 0x88, 0x65, 0x19, 0x27, 0x23, 0xd5, 0x95, - 0xe1, 0xa0, 0x79, 0x69, 0x1c, 0x24, 0x1a, 0xcb, 0xb5, 0xd6, 0x87, 0x55, 0x70, 0x2e, 0x57, 0x1e, - 0xbf, 0xc4, 0xc7, 0xb9, 0xdc, 0x15, 0xa2, 0x7c, 0x8c, 0x2b, 0xc4, 0x2a, 0x98, 0x17, 0x5f, 0x74, - 0x33, 0x37, 0x90, 0x68, 0x4f, 0xbb, 0xe9, 0x6e, 0x94, 0xc5, 0xcb, 0x1e, 0x07, 0xab, 0xc7, 0x7c, - 0x1c, 0x4c, 0x7a, 0x21, 0xfe, 0x11, 0x29, 0x48, 0xbe, 0xbc, 0x17, 0xe2, 0xff, 0x91, 0xb2, 0x78, - 0xf8, 0x7a, 0x98, 0x59, 0x11, 0xc3, 0x14, 0x67, 0xc8, 0xa4, 0x4a, 0x44, 0x90, 0x41, 0x3f, 0xd6, - 0x57, 0xcb, 0xf7, 0x24, 0x5f, 0x2d, 0x57, 0x46, 0x84, 0xee, 0xf8, 0xef, 0x80, 0xd2, 0x5b, 0xde, - 0xcc, 0xf1, 0x6f, 0x79, 0xad, 0xbf, 0x28, 0xe0, 0x99, 0xc2, 0x33, 0x05, 0xae, 0xa6, 0xe4, 0xda, - 0xd5, 0x8c, 0x5c, 0x7b, 0xb6, 0xd0, 0x30, 0xa1, 0xd9, 0x4c, 0xf9, 0x13, 0xe1, 0x8d, 0x91, 0x4f, - 0x84, 0x12, 0xe9, 0x3f, 0xfa, 0xad, 0x50, 0x7d, 0xf5, 0xc1, 0xc3, 0xc6, 0xc4, 0xa7, 0x0f, 0x1b, - 0x13, 0x9f, 0x3d, 0x6c, 0x4c, 0xfc, 0x6a, 0xd8, 0x50, 0x1e, 0x0c, 0x1b, 0xca, 0xa7, 0xc3, 0x86, - 0xf2, 0xd9, 0xb0, 0xa1, 0xfc, 0x63, 0xd8, 0x50, 0x7e, 0xf7, 0x79, 0x63, 0xe2, 0x2e, 0xcc, 0xff, - 0x1b, 0xe4, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x92, 0xcf, 0x5d, 0xcc, 0x34, 0x29, 0x00, 0x00, + // 2213 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x6f, 0x1b, 0xc7, + 0x19, 0xd7, 0xf2, 0x21, 0x51, 0x43, 0x4b, 0xb2, 0x47, 0xaa, 0xc4, 0xd8, 0x0d, 0xe9, 0x6e, 0x5d, + 0x5b, 0x89, 0x63, 0xb2, 0x76, 0x9c, 0x20, 0x88, 0x8b, 0x18, 0x22, 0x95, 0xa6, 0x69, 0xf4, 0xea, + 0xd0, 0x72, 0x00, 0x37, 0x2d, 0x3a, 0x22, 0xc7, 0xd4, 0x46, 0xfb, 0xc2, 0xee, 0x50, 0x31, 0xd1, + 0x4b, 0x51, 0xa0, 0xb7, 0x1e, 0xfa, 0x37, 0xf4, 0x1f, 0x28, 0x8a, 0xa2, 0xb9, 0x05, 0x41, 0xd0, + 0x8b, 0x2f, 0x05, 0x82, 0x5e, 0x9a, 0x13, 0x51, 0x33, 0xa7, 0xa2, 0xe8, 0xad, 0xbd, 0xf8, 0xd2, + 0x62, 0x66, 0x67, 0xdf, 0xb3, 0x22, 0x25, 0xc7, 0xca, 0x03, 0xbe, 0x71, 0x67, 0x7e, 0xdf, 0x6f, + 0xbf, 0x99, 0xf9, 0xbe, 0xf9, 0x7e, 0x33, 0x4b, 0x70, 0xeb, 0xe0, 0x35, 0xb7, 0xae, 0x59, 0x8d, + 0x83, 0xfe, 0x1e, 0x71, 0x4c, 0x42, 0x89, 0xdb, 0x38, 0x24, 0x66, 0xd7, 0x72, 0x1a, 0xa2, 0x03, + 0xdb, 0x5a, 0x03, 0xdb, 0xb6, 0xdb, 0x38, 0xbc, 0xde, 0xe8, 0x11, 0x93, 0x38, 0x98, 0x92, 0x6e, + 0xdd, 0x76, 0x2c, 0x6a, 0x41, 0xe8, 0x61, 0xea, 0xd8, 0xd6, 0xea, 0x0c, 0x53, 0x3f, 0xbc, 0x7e, + 0xfe, 0x5a, 0x4f, 0xa3, 0xfb, 0xfd, 0xbd, 0x7a, 0xc7, 0x32, 0x1a, 0x3d, 0xab, 0x67, 0x35, 0x38, + 0x74, 0xaf, 0x7f, 0x9f, 0x3f, 0xf1, 0x07, 0xfe, 0xcb, 0xa3, 0x38, 0xaf, 0x46, 0x5e, 0xd3, 0xb1, + 0x1c, 0x22, 0x79, 0xcd, 0xf9, 0x9b, 0x21, 0xc6, 0xc0, 0x9d, 0x7d, 0xcd, 0x24, 0xce, 0xa0, 0x61, + 0x1f, 0xf4, 0x58, 0x83, 0xdb, 0x30, 0x08, 0xc5, 0x32, 0xab, 0x46, 0x96, 0x95, 0xd3, 0x37, 0xa9, + 0x66, 0x90, 0x94, 0xc1, 0xab, 0xe3, 0x0c, 0xdc, 0xce, 0x3e, 0x31, 0x70, 0xca, 0xee, 0xe5, 0x2c, + 0xbb, 0x3e, 0xd5, 0xf4, 0x86, 0x66, 0x52, 0x97, 0x3a, 0x49, 0x23, 0xf5, 0xbf, 0x0a, 0x80, 0x2d, + 0xcb, 0xa4, 0x8e, 0xa5, 0xeb, 0xc4, 0x41, 0xe4, 0x50, 0x73, 0x35, 0xcb, 0x84, 0xbf, 0x00, 0x25, + 0x36, 0x9e, 0x2e, 0xa6, 0xb8, 0xa2, 0x5c, 0x54, 0x56, 0xcb, 0x37, 0xbe, 0x5f, 0x0f, 0x27, 0x39, + 0xa0, 0xaf, 0xdb, 0x07, 0x3d, 0xd6, 0xe0, 0xd6, 0x19, 0xba, 0x7e, 0x78, 0xbd, 0xbe, 0xbd, 0xf7, + 0x3e, 0xe9, 0xd0, 0x4d, 0x42, 0x71, 0x13, 0x3e, 0x1c, 0xd6, 0xa6, 0x46, 0xc3, 0x1a, 0x08, 0xdb, + 0x50, 0xc0, 0x0a, 0xb7, 0x41, 0x81, 0xb3, 0xe7, 0x38, 0xfb, 0xb5, 0x4c, 0x76, 0x31, 0xe8, 0x3a, + 0xc2, 0x1f, 0xbc, 0xf9, 0x80, 0x12, 0x93, 0xb9, 0xd7, 0x3c, 0x23, 0xa8, 0x0b, 0xeb, 0x98, 0x62, + 0xc4, 0x89, 0xe0, 0x4b, 0xa0, 0xe4, 0x08, 0xf7, 0x2b, 0xf9, 0x8b, 0xca, 0x6a, 0xbe, 0x79, 0x56, + 0xa0, 0x4a, 0xfe, 0xb0, 0x50, 0x80, 0x50, 0xff, 0xa2, 0x80, 0xe5, 0xf4, 0xb8, 0x37, 0x34, 0x97, + 0xc2, 0xf7, 0x52, 0x63, 0xaf, 0x4f, 0x36, 0x76, 0x66, 0xcd, 0x47, 0x1e, 0xbc, 0xd8, 0x6f, 0x89, + 0x8c, 0xfb, 0x1d, 0x50, 0xd4, 0x28, 0x31, 0xdc, 0x4a, 0xee, 0x62, 0x7e, 0xb5, 0x7c, 0xe3, 0x72, + 0x3d, 0x1d, 0xbb, 0xf5, 0xb4, 0x63, 0xcd, 0x39, 0x41, 0x59, 0x7c, 0x9b, 0x19, 0x23, 0x8f, 0x43, + 0xfd, 0x9f, 0x02, 0x66, 0xd7, 0x31, 0x31, 0x2c, 0xb3, 0x4d, 0xe8, 0x29, 0x2c, 0x5a, 0x0b, 0x14, + 0x5c, 0x9b, 0x74, 0xc4, 0xa2, 0x7d, 0x47, 0xe6, 0x7b, 0xe0, 0x4e, 0xdb, 0x26, 0x9d, 0x70, 0xa1, + 0xd8, 0x13, 0xe2, 0xc6, 0xf0, 0x1d, 0x30, 0xed, 0x52, 0x4c, 0xfb, 0x2e, 0x5f, 0xa6, 0xf2, 0x8d, + 0xef, 0x1e, 0x4d, 0xc3, 0xa1, 0xcd, 0x79, 0x41, 0x34, 0xed, 0x3d, 0x23, 0x41, 0xa1, 0xfe, 0x33, + 0x07, 0x60, 0x80, 0x6d, 0x59, 0x66, 0x57, 0xa3, 0x2c, 0x7e, 0x5f, 0x07, 0x05, 0x3a, 0xb0, 0x09, + 0x9f, 0x86, 0xd9, 0xe6, 0x65, 0xdf, 0x8b, 0x3b, 0x03, 0x9b, 0x3c, 0x1e, 0xd6, 0x96, 0xd3, 0x16, + 0xac, 0x07, 0x71, 0x1b, 0xb8, 0x11, 0xf8, 0x97, 0xe3, 0xd6, 0x37, 0xe3, 0xaf, 0x7e, 0x3c, 0xac, + 0x49, 0x36, 0x8b, 0x7a, 0xc0, 0x14, 0x77, 0x10, 0x1e, 0x02, 0xa8, 0x63, 0x97, 0xde, 0x71, 0xb0, + 0xe9, 0x7a, 0x6f, 0xd2, 0x0c, 0x22, 0x46, 0xfe, 0xe2, 0x64, 0xcb, 0xc3, 0x2c, 0x9a, 0xe7, 0x85, + 0x17, 0x70, 0x23, 0xc5, 0x86, 0x24, 0x6f, 0x80, 0x97, 0xc1, 0xb4, 0x43, 0xb0, 0x6b, 0x99, 0x95, + 0x02, 0x1f, 0x45, 0x30, 0x81, 0x88, 0xb7, 0x22, 0xd1, 0x0b, 0x5f, 0x00, 0x33, 0x06, 0x71, 0x5d, + 0xdc, 0x23, 0x95, 0x22, 0x07, 0x2e, 0x08, 0xe0, 0xcc, 0xa6, 0xd7, 0x8c, 0xfc, 0x7e, 0xf5, 0x8f, + 0x0a, 0x98, 0x0b, 0x66, 0xee, 0x14, 0x52, 0xa5, 0x19, 0x4f, 0x95, 0xe7, 0x8f, 0x8c, 0x93, 0x8c, + 0x0c, 0xf9, 0x38, 0x1f, 0xf1, 0x99, 0x05, 0x21, 0xfc, 0x19, 0x28, 0xb9, 0x44, 0x27, 0x1d, 0x6a, + 0x39, 0xc2, 0xe7, 0x97, 0x27, 0xf4, 0x19, 0xef, 0x11, 0xbd, 0x2d, 0x4c, 0x9b, 0x67, 0x98, 0xd3, + 0xfe, 0x13, 0x0a, 0x28, 0xe1, 0x4f, 0x40, 0x89, 0x12, 0xc3, 0xd6, 0x31, 0x25, 0x22, 0x4d, 0x62, + 0xf1, 0xcd, 0xc2, 0x85, 0x91, 0xed, 0x58, 0xdd, 0x3b, 0x02, 0xc6, 0x13, 0x25, 0x98, 0x07, 0xbf, + 0x15, 0x05, 0x34, 0xf0, 0x00, 0xcc, 0xf7, 0xed, 0x2e, 0x43, 0x52, 0xb6, 0x75, 0xf7, 0x06, 0x22, + 0x7c, 0xae, 0x1e, 0x39, 0x21, 0xbb, 0x31, 0x93, 0xe6, 0xb2, 0x78, 0xc1, 0x7c, 0xbc, 0x1d, 0x25, + 0xa8, 0xe1, 0x1a, 0x58, 0x30, 0x34, 0x13, 0x11, 0xdc, 0x1d, 0xb4, 0x49, 0xc7, 0x32, 0xbb, 0x2e, + 0x0f, 0xa0, 0x62, 0x73, 0x45, 0x10, 0x2c, 0x6c, 0xc6, 0xbb, 0x51, 0x12, 0x0f, 0x37, 0xc0, 0x92, + 0xbf, 0xcf, 0xfe, 0x48, 0x73, 0xa9, 0xe5, 0x0c, 0x36, 0x34, 0x43, 0xa3, 0x95, 0x69, 0xce, 0x53, + 0x19, 0x0d, 0x6b, 0x4b, 0x48, 0xd2, 0x8f, 0xa4, 0x56, 0xea, 0x6f, 0xa7, 0xc1, 0x42, 0x62, 0x37, + 0x80, 0x77, 0xc1, 0x72, 0xa7, 0xef, 0x38, 0xc4, 0xa4, 0x5b, 0x7d, 0x63, 0x8f, 0x38, 0xed, 0xce, + 0x3e, 0xe9, 0xf6, 0x75, 0xd2, 0xe5, 0x2b, 0x5a, 0x6c, 0x56, 0x85, 0xaf, 0xcb, 0x2d, 0x29, 0x0a, + 0x65, 0x58, 0xc3, 0x1f, 0x03, 0x68, 0xf2, 0xa6, 0x4d, 0xcd, 0x75, 0x03, 0xce, 0x1c, 0xe7, 0x0c, + 0x12, 0x70, 0x2b, 0x85, 0x40, 0x12, 0x2b, 0xe6, 0x63, 0x97, 0xb8, 0x9a, 0x43, 0xba, 0x49, 0x1f, + 0xf3, 0x71, 0x1f, 0xd7, 0xa5, 0x28, 0x94, 0x61, 0x0d, 0x5f, 0x01, 0x65, 0xef, 0x6d, 0x7c, 0xce, + 0xc5, 0xe2, 0x2c, 0x0a, 0xb2, 0xf2, 0x56, 0xd8, 0x85, 0xa2, 0x38, 0x36, 0x34, 0x6b, 0xcf, 0x25, + 0xce, 0x21, 0xe9, 0xbe, 0xe5, 0x69, 0x00, 0x56, 0x28, 0x8b, 0xbc, 0x50, 0x06, 0x43, 0xdb, 0x4e, + 0x21, 0x90, 0xc4, 0x8a, 0x0d, 0xcd, 0x8b, 0x9a, 0xd4, 0xd0, 0xa6, 0xe3, 0x43, 0xdb, 0x95, 0xa2, + 0x50, 0x86, 0x35, 0x8b, 0x3d, 0xcf, 0xe5, 0xb5, 0x43, 0xac, 0xe9, 0x78, 0x4f, 0x27, 0x95, 0x99, + 0x78, 0xec, 0x6d, 0xc5, 0xbb, 0x51, 0x12, 0x0f, 0xdf, 0x02, 0xe7, 0xbc, 0xa6, 0x5d, 0x13, 0x07, + 0x24, 0x25, 0x4e, 0xf2, 0x9c, 0x20, 0x39, 0xb7, 0x95, 0x04, 0xa0, 0xb4, 0x0d, 0x7c, 0x1d, 0xcc, + 0x77, 0x2c, 0x5d, 0xe7, 0xf1, 0xd8, 0xb2, 0xfa, 0x26, 0xad, 0xcc, 0x72, 0x16, 0xc8, 0x72, 0xa8, + 0x15, 0xeb, 0x41, 0x09, 0x24, 0xbc, 0x07, 0x40, 0xc7, 0x2f, 0x07, 0x6e, 0x05, 0x64, 0x17, 0xfa, + 0x74, 0x1d, 0x0a, 0x0b, 0x70, 0xd0, 0xe4, 0xa2, 0x08, 0x9b, 0xfa, 0xb1, 0x02, 0x56, 0x32, 0x72, + 0x1c, 0xde, 0x8e, 0x55, 0xbd, 0xab, 0x89, 0xaa, 0x77, 0x21, 0xc3, 0x2c, 0x52, 0xfa, 0x3a, 0x60, + 0x8e, 0xe9, 0x0e, 0xcd, 0xec, 0x79, 0x10, 0xb1, 0x83, 0xbd, 0x28, 0xf3, 0x1d, 0x45, 0x81, 0xe1, + 0x36, 0x7c, 0x6e, 0x34, 0xac, 0xcd, 0xc5, 0xfa, 0x50, 0x9c, 0x53, 0xfd, 0x75, 0x0e, 0x80, 0x75, + 0x62, 0xeb, 0xd6, 0xc0, 0x20, 0xe6, 0x69, 0xa8, 0x96, 0xf5, 0x98, 0x6a, 0x51, 0xa5, 0x0b, 0x11, + 0xf8, 0x93, 0x29, 0x5b, 0x36, 0x12, 0xb2, 0xe5, 0xd2, 0x18, 0x9e, 0xa3, 0x75, 0xcb, 0xdf, 0xf3, + 0x60, 0x31, 0x04, 0x87, 0xc2, 0xe5, 0x56, 0x6c, 0x09, 0xaf, 0x24, 0x96, 0x70, 0x45, 0x62, 0xf2, + 0xd4, 0x94, 0xcb, 0xfb, 0x60, 0x9e, 0xe9, 0x0a, 0x6f, 0xd5, 0xb8, 0x6a, 0x99, 0x3e, 0xb6, 0x6a, + 0x09, 0xaa, 0xce, 0x46, 0x8c, 0x09, 0x25, 0x98, 0x33, 0x54, 0xd2, 0xcc, 0xd7, 0x51, 0x25, 0xfd, + 0x49, 0x01, 0xf3, 0xe1, 0x32, 0x9d, 0x82, 0x4c, 0x6a, 0xc5, 0x65, 0x52, 0xf5, 0xe8, 0xb8, 0xcc, + 0xd0, 0x49, 0x7f, 0x2b, 0x44, 0xbd, 0xe6, 0x42, 0x69, 0x95, 0x1d, 0xa8, 0x6c, 0x5d, 0xeb, 0x60, + 0x57, 0x94, 0xd5, 0x33, 0xde, 0x61, 0xca, 0x6b, 0x43, 0x41, 0x6f, 0x4c, 0x52, 0xe5, 0x9e, 0xae, + 0xa4, 0xca, 0x7f, 0x31, 0x92, 0xea, 0x0e, 0x28, 0xb9, 0xbe, 0x98, 0x2a, 0x70, 0xca, 0xcb, 0xe3, + 0xd2, 0x59, 0xe8, 0xa8, 0x80, 0x35, 0x50, 0x50, 0x01, 0x93, 0x4c, 0x3b, 0x15, 0xbf, 0x4c, 0xed, + 0xc4, 0xc2, 0xdb, 0xc6, 0x7d, 0x97, 0x74, 0x79, 0x2a, 0x95, 0xc2, 0xf0, 0xde, 0xe1, 0xad, 0x48, + 0xf4, 0xc2, 0x5d, 0xb0, 0x62, 0x3b, 0x56, 0xcf, 0x21, 0xae, 0xbb, 0x4e, 0x70, 0x57, 0xd7, 0x4c, + 0xe2, 0x0f, 0xc0, 0xab, 0x7a, 0x17, 0x46, 0xc3, 0xda, 0xca, 0x8e, 0x1c, 0x82, 0xb2, 0x6c, 0xd5, + 0x8f, 0x0a, 0xe0, 0x6c, 0x72, 0x47, 0xcc, 0x10, 0x22, 0xca, 0x89, 0x84, 0xc8, 0x4b, 0x91, 0x10, + 0xf5, 0x54, 0x5a, 0xe4, 0xcc, 0x9f, 0x0a, 0xd3, 0x35, 0xb0, 0x20, 0x84, 0x87, 0xdf, 0x29, 0xa4, + 0x58, 0xb0, 0x3c, 0xbb, 0xf1, 0x6e, 0x94, 0xc4, 0xc3, 0x5b, 0x60, 0xce, 0xe1, 0xda, 0xca, 0x27, + 0xf0, 0xf4, 0xc9, 0xb7, 0x04, 0xc1, 0x1c, 0x8a, 0x76, 0xa2, 0x38, 0x96, 0x69, 0x93, 0x50, 0x72, + 0xf8, 0x04, 0x85, 0xb8, 0x36, 0x59, 0x4b, 0x02, 0x50, 0xda, 0x06, 0x6e, 0x82, 0xc5, 0xbe, 0x99, + 0xa6, 0xf2, 0x62, 0xed, 0x82, 0xa0, 0x5a, 0xdc, 0x4d, 0x43, 0x90, 0xcc, 0x0e, 0xfe, 0x34, 0x26, + 0x57, 0xa6, 0xf9, 0x2e, 0x72, 0xe5, 0xe8, 0x74, 0x98, 0x58, 0xaf, 0x48, 0x74, 0x54, 0x69, 0x52, + 0x1d, 0xa5, 0x7e, 0xa8, 0x00, 0x98, 0x4e, 0xc1, 0xb1, 0x87, 0xfb, 0x94, 0x45, 0xa4, 0x44, 0x76, + 0xe5, 0x0a, 0xe7, 0xea, 0x78, 0x85, 0x13, 0xee, 0xa0, 0x93, 0x49, 0x1c, 0x31, 0xbd, 0xa7, 0x73, + 0x31, 0x33, 0x81, 0xc4, 0x09, 0xfd, 0x79, 0x32, 0x89, 0x13, 0xe1, 0x39, 0x5a, 0xe2, 0xfc, 0x2b, + 0x07, 0x16, 0x43, 0xf0, 0xc4, 0x12, 0x47, 0x62, 0xf2, 0xec, 0x72, 0x66, 0x32, 0xd9, 0x11, 0x4e, + 0xdd, 0x57, 0x44, 0x76, 0x84, 0x0e, 0x65, 0xc8, 0x8e, 0x3f, 0xe4, 0xa2, 0x5e, 0x1f, 0x53, 0x76, + 0x7c, 0x01, 0x57, 0x15, 0x5f, 0x3b, 0xe5, 0xa2, 0x7e, 0x92, 0x07, 0x67, 0x93, 0x29, 0x18, 0xab, + 0x83, 0xca, 0xd8, 0x3a, 0xb8, 0x03, 0x96, 0xee, 0xf7, 0x75, 0x7d, 0xc0, 0xc7, 0x10, 0x29, 0x86, + 0x5e, 0x05, 0xfd, 0xb6, 0xb0, 0x5c, 0xfa, 0xa1, 0x04, 0x83, 0xa4, 0x96, 0xe9, 0xb2, 0x58, 0x78, + 0xd2, 0xb2, 0x58, 0x3c, 0x41, 0x59, 0x94, 0x2b, 0x8b, 0xfc, 0x89, 0x94, 0xc5, 0xc4, 0x35, 0x51, + 0xb2, 0x5d, 0x8d, 0x3d, 0xc3, 0x8f, 0x14, 0xb0, 0x2c, 0x3f, 0x3e, 0x43, 0x1d, 0xcc, 0x1b, 0xf8, + 0x41, 0xf4, 0xf2, 0x62, 0x5c, 0xc1, 0xe8, 0x53, 0x4d, 0xaf, 0x7b, 0x5f, 0x77, 0xea, 0x6f, 0x9b, + 0x74, 0xdb, 0x69, 0x53, 0x47, 0x33, 0x7b, 0x5e, 0x81, 0xdd, 0x8c, 0x71, 0xa1, 0x04, 0x37, 0xbc, + 0x07, 0x4a, 0x06, 0x7e, 0xd0, 0xee, 0x3b, 0x3d, 0xbf, 0x10, 0x1e, 0xff, 0x3d, 0x3c, 0xf6, 0x37, + 0x05, 0x0b, 0x0a, 0xf8, 0xd4, 0xcf, 0x15, 0xb0, 0x92, 0x51, 0x41, 0xbf, 0x41, 0xa3, 0xfc, 0x48, + 0x01, 0x17, 0x63, 0xa3, 0x64, 0x19, 0x49, 0xee, 0xf7, 0x75, 0x9e, 0x9c, 0x42, 0xb0, 0x5c, 0x05, + 0xb3, 0x36, 0x76, 0xa8, 0x16, 0x28, 0xdd, 0x62, 0x73, 0x6e, 0x34, 0xac, 0xcd, 0xee, 0xf8, 0x8d, + 0x28, 0xec, 0x97, 0xcc, 0x4d, 0xee, 0xe9, 0xcd, 0x8d, 0xfa, 0x9b, 0x1c, 0x28, 0x47, 0x5c, 0x3e, + 0x05, 0xa9, 0xf2, 0x66, 0x4c, 0xaa, 0x48, 0x3f, 0xfe, 0x44, 0xe7, 0x30, 0x4b, 0xab, 0x6c, 0x26, + 0xb4, 0xca, 0xf7, 0xc6, 0x11, 0x1d, 0x2d, 0x56, 0xfe, 0x9d, 0x03, 0x4b, 0x11, 0x74, 0xa8, 0x56, + 0x7e, 0x10, 0x53, 0x2b, 0xab, 0x09, 0xb5, 0x52, 0x91, 0xd9, 0x3c, 0x93, 0x2b, 0xe3, 0xe5, 0xca, + 0x9f, 0x15, 0xb0, 0x10, 0x99, 0xbb, 0x53, 0xd0, 0x2b, 0xeb, 0x71, 0xbd, 0x52, 0x1b, 0x13, 0x2f, + 0x19, 0x82, 0xe5, 0x2e, 0x58, 0x8c, 0x80, 0xb6, 0x9d, 0xae, 0x66, 0x62, 0xdd, 0x85, 0xb7, 0xc1, + 0xa2, 0x28, 0xaf, 0x6d, 0x8a, 0x1d, 0xbf, 0xdd, 0xcf, 0x75, 0x9f, 0x89, 0xf7, 0x21, 0x19, 0x52, + 0xfd, 0x8f, 0x02, 0x1a, 0x11, 0xe2, 0x1d, 0xe2, 0xb8, 0x9a, 0x4b, 0x89, 0x49, 0xef, 0x5a, 0x7a, + 0xdf, 0x20, 0x2d, 0x1d, 0x6b, 0x06, 0x22, 0xac, 0x41, 0xb3, 0xcc, 0x1d, 0x4b, 0xd7, 0x3a, 0x03, + 0x88, 0x41, 0xf9, 0x83, 0x7d, 0x62, 0xae, 0x13, 0x9d, 0x50, 0xf1, 0xe9, 0x63, 0xb6, 0x79, 0xdb, + 0xff, 0x12, 0xf0, 0x6e, 0xd8, 0xf5, 0x78, 0x58, 0x5b, 0x9d, 0x84, 0x91, 0x07, 0x6e, 0x94, 0x13, + 0xfe, 0x1c, 0x00, 0xf6, 0xd8, 0xee, 0x60, 0xff, 0x43, 0xc8, 0x6c, 0xf3, 0x0d, 0x3f, 0xbd, 0xdf, + 0x0d, 0x7a, 0x8e, 0xf5, 0x82, 0x08, 0xa3, 0xfa, 0xfb, 0x52, 0x2c, 0x0c, 0xbe, 0xf1, 0xf7, 0x4e, + 0xbf, 0x04, 0x4b, 0x87, 0xe1, 0xec, 0xf8, 0x00, 0xa6, 0x97, 0x58, 0x4c, 0xbe, 0x20, 0xa5, 0x97, + 0xcd, 0x6b, 0xa8, 0xd2, 0xee, 0x4a, 0xe8, 0x90, 0xf4, 0x25, 0xf0, 0x15, 0x50, 0x66, 0x3a, 0x47, + 0xeb, 0x90, 0x2d, 0x6c, 0xf8, 0x29, 0x1a, 0x7c, 0x39, 0x6a, 0x87, 0x5d, 0x28, 0x8a, 0x83, 0xfb, + 0x60, 0xd1, 0xb6, 0xba, 0x9b, 0xd8, 0xc4, 0x3d, 0xc2, 0xaa, 0xb7, 0xb7, 0x94, 0xfc, 0x46, 0x6a, + 0xb6, 0xf9, 0xaa, 0x7f, 0xdb, 0xb0, 0x93, 0x86, 0xb0, 0xd3, 0x9c, 0xa4, 0x99, 0x07, 0x81, 0x8c, + 0x12, 0x1a, 0xa9, 0x0f, 0x9d, 0x33, 0xa9, 0x7f, 0x87, 0xc8, 0x72, 0xf5, 0x84, 0x9f, 0x3a, 0xb3, + 0xee, 0xda, 0x4a, 0x27, 0xba, 0x6b, 0x93, 0x9c, 0x46, 0x66, 0x8f, 0x79, 0x1a, 0xf9, 0x44, 0x01, + 0x97, 0xec, 0x09, 0xd2, 0xa8, 0x02, 0xf8, 0xb4, 0xb4, 0xc6, 0x4c, 0xcb, 0x24, 0x19, 0xd9, 0x5c, + 0x1d, 0x0d, 0x6b, 0x97, 0x26, 0x41, 0xa2, 0x89, 0x5c, 0x63, 0x49, 0x63, 0x89, 0x5d, 0xb1, 0x52, + 0xe6, 0x6e, 0x5e, 0x19, 0xe3, 0xa6, 0xbf, 0x89, 0x7a, 0x79, 0xe8, 0x3f, 0xa1, 0x80, 0x46, 0xfd, + 0xb0, 0x08, 0xce, 0xa5, 0x2a, 0xf9, 0x97, 0x78, 0x8f, 0x98, 0x3a, 0xed, 0xe4, 0x8f, 0x71, 0xda, + 0x59, 0x03, 0x0b, 0xe2, 0xe3, 0x73, 0xe2, 0xb0, 0x14, 0x84, 0x49, 0x2b, 0xde, 0x8d, 0x92, 0x78, + 0xd9, 0x3d, 0x66, 0xf1, 0x98, 0xf7, 0x98, 0x51, 0x2f, 0xc4, 0x7f, 0xa6, 0xbc, 0x7c, 0x4e, 0x7b, + 0x21, 0xfe, 0x3a, 0x95, 0xc4, 0xc3, 0x37, 0xfc, 0x64, 0x0d, 0x18, 0x66, 0x38, 0x43, 0x22, 0xfb, + 0x02, 0x82, 0x04, 0xfa, 0x89, 0x3e, 0xb0, 0xbe, 0x27, 0xf9, 0xc0, 0xba, 0x3a, 0x26, 0xcc, 0x26, + 0xbf, 0xb2, 0x94, 0x1e, 0x48, 0xcb, 0xc7, 0x3f, 0x90, 0xaa, 0x7f, 0x55, 0xc0, 0x73, 0x99, 0xdb, + 0x14, 0x5c, 0x8b, 0x29, 0xcb, 0x6b, 0x09, 0x65, 0xf9, 0x7c, 0xa6, 0x61, 0x44, 0x5e, 0x1a, 0xf2, + 0xdb, 0xcc, 0x9b, 0x63, 0x6f, 0x33, 0x25, 0xa7, 0x94, 0xf1, 0xd7, 0x9a, 0xcd, 0xd7, 0x1e, 0x3e, + 0xaa, 0x4e, 0x7d, 0xfa, 0xa8, 0x3a, 0xf5, 0xd9, 0xa3, 0xea, 0xd4, 0xaf, 0x46, 0x55, 0xe5, 0xe1, + 0xa8, 0xaa, 0x7c, 0x3a, 0xaa, 0x2a, 0x9f, 0x8d, 0xaa, 0xca, 0x3f, 0x46, 0x55, 0xe5, 0x77, 0x9f, + 0x57, 0xa7, 0xee, 0xc1, 0xf4, 0x3f, 0x36, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x67, 0x59, 0x8d, + 0x9b, 0xdf, 0x29, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { @@ -2341,6 +2374,32 @@ func (m *StatefulSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *StatefulSetOrdinals) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StatefulSetOrdinals) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetOrdinals) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2394,6 +2453,18 @@ func (m *StatefulSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Ordinals != nil { + { + size, err := m.Ordinals.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } if m.PersistentVolumeClaimRetentionPolicy != nil { { size, err := m.PersistentVolumeClaimRetentionPolicy.MarshalToSizedBuffer(dAtA[:i]) @@ -3054,6 +3125,16 @@ func (m *StatefulSetList) Size() (n int) { return n } +func (m *StatefulSetOrdinals) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Start)) + return n +} + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Size() (n int) { if m == nil { return 0 @@ -3102,6 +3183,10 @@ func (m *StatefulSetSpec) Size() (n int) { l = m.PersistentVolumeClaimRetentionPolicy.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Ordinals != nil { + l = m.Ordinals.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -3516,6 +3601,16 @@ func (this *StatefulSetList) String() string { }, "") return s } +func (this *StatefulSetOrdinals) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatefulSetOrdinals{`, + `Start:` + fmt.Sprintf("%v", this.Start) + `,`, + `}`, + }, "") + return s +} func (this *StatefulSetPersistentVolumeClaimRetentionPolicy) String() string { if this == nil { return "nil" @@ -3547,6 +3642,7 @@ func (this *StatefulSetSpec) String() string { `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `PersistentVolumeClaimRetentionPolicy:` + strings.Replace(this.PersistentVolumeClaimRetentionPolicy.String(), "StatefulSetPersistentVolumeClaimRetentionPolicy", "StatefulSetPersistentVolumeClaimRetentionPolicy", 1) + `,`, + `Ordinals:` + strings.Replace(this.Ordinals.String(), "StatefulSetOrdinals", "StatefulSetOrdinals", 1) + `,`, `}`, }, "") return s @@ -7626,6 +7722,75 @@ func (m *StatefulSetList) Unmarshal(dAtA []byte) error { } return nil } +func (m *StatefulSetOrdinals) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatefulSetOrdinals: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatefulSetOrdinals: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -8064,6 +8229,42 @@ func (m *StatefulSetSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ordinals", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Ordinals == nil { + m.Ordinals = &StatefulSetOrdinals{} + } + if err := m.Ordinals.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/apps/v1/generated.proto b/staging/src/k8s.io/api/apps/v1/generated.proto index 1e0356282b3..361d1980412 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1/generated.proto @@ -622,6 +622,17 @@ message StatefulSetList { repeated StatefulSet items = 2; } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +message StatefulSetOrdinals { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + optional int32 replicaStartOrdinal = 1; +} + // StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs // created from the StatefulSet VolumeClaimTemplates. message StatefulSetPersistentVolumeClaimRetentionPolicy { @@ -713,6 +724,14 @@ message StatefulSetSpec { // down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, // which is alpha. +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + optional StatefulSetOrdinals ordinals = 11; } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1/types.go b/staging/src/k8s.io/api/apps/v1/types.go index d94f90b4c79..f1239211ca5 100644 --- a/staging/src/k8s.io/api/apps/v1/types.go +++ b/staging/src/k8s.io/api/apps/v1/types.go @@ -163,6 +163,17 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { WhenScaled PersistentVolumeClaimRetentionPolicyType `json:"whenScaled,omitempty" protobuf:"bytes,2,opt,name=whenScaled,casttype=PersistentVolumeClaimRetentionPolicyType"` } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +type StatefulSetOrdinals struct { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` +} + // A StatefulSetSpec is the specification of a StatefulSet. type StatefulSetSpec struct { // replicas is the desired number of replicas of the given Template. @@ -237,6 +248,14 @@ type StatefulSetSpec struct { // down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, // which is alpha. +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go index 2dda5ac8bae..97aca78daa6 100644 --- a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go @@ -324,6 +324,15 @@ func (StatefulSetList) SwaggerDoc() map[string]string { return map_StatefulSetList } +var map_StatefulSetOrdinals = map[string]string{ + "": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + "start": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", +} + +func (StatefulSetOrdinals) SwaggerDoc() map[string]string { + return map_StatefulSetOrdinals +} + var map_StatefulSetPersistentVolumeClaimRetentionPolicy = map[string]string{ "": "StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates.", "whenDeleted": "WhenDeleted specifies what happens to PVCs created from StatefulSet VolumeClaimTemplates when the StatefulSet is deleted. The default policy of `Retain` causes PVCs to not be affected by StatefulSet deletion. The `Delete` policy causes those PVCs to be deleted.", @@ -346,6 +355,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "persistentVolumeClaimRetentionPolicy describes the lifecycle of persistent volume claims created from volumeClaimTemplates. By default, all persistent volume claims are created as needed and retained until manually deleted. This policy allows the lifecycle to be altered, for example by deleting persistent volume claims when their stateful set is deleted, or when their pod is scaled down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. +optional", + "ordinals": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/apps/v1/zz_generated.deepcopy.go index 72d76670e78..6912986ac37 100644 --- a/staging/src/k8s.io/api/apps/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/apps/v1/zz_generated.deepcopy.go @@ -693,6 +693,22 @@ func (in *StatefulSetList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatefulSetOrdinals) DeepCopyInto(out *StatefulSetOrdinals) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetOrdinals. +func (in *StatefulSetOrdinals) DeepCopy() *StatefulSetOrdinals { + if in == nil { + return nil + } + out := new(StatefulSetOrdinals) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StatefulSetPersistentVolumeClaimRetentionPolicy) DeepCopyInto(out *StatefulSetPersistentVolumeClaimRetentionPolicy) { *out = *in @@ -741,6 +757,11 @@ func (in *StatefulSetSpec) DeepCopyInto(out *StatefulSetSpec) { *out = new(StatefulSetPersistentVolumeClaimRetentionPolicy) **out = **in } + if in.Ordinals != nil { + in, out := &in.Ordinals, &out.Ordinals + *out = new(StatefulSetOrdinals) + **out = **in + } return } diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go b/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go index 48ac988f452..26ac84bbdea 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go @@ -553,12 +553,40 @@ func (m *StatefulSetList) XXX_DiscardUnknown() { var xxx_messageInfo_StatefulSetList proto.InternalMessageInfo +func (m *StatefulSetOrdinals) Reset() { *m = StatefulSetOrdinals{} } +func (*StatefulSetOrdinals) ProtoMessage() {} +func (*StatefulSetOrdinals) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{18} +} +func (m *StatefulSetOrdinals) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetOrdinals) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetOrdinals) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetOrdinals.Merge(m, src) +} +func (m *StatefulSetOrdinals) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetOrdinals) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetOrdinals.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetOrdinals proto.InternalMessageInfo + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Reset() { *m = StatefulSetPersistentVolumeClaimRetentionPolicy{} } func (*StatefulSetPersistentVolumeClaimRetentionPolicy) ProtoMessage() {} func (*StatefulSetPersistentVolumeClaimRetentionPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_2a07313e8f66e805, []int{18} + return fileDescriptor_2a07313e8f66e805, []int{19} } func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -586,7 +614,7 @@ var xxx_messageInfo_StatefulSetPersistentVolumeClaimRetentionPolicy proto.Intern func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } func (*StatefulSetSpec) ProtoMessage() {} func (*StatefulSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_2a07313e8f66e805, []int{19} + return fileDescriptor_2a07313e8f66e805, []int{20} } func (m *StatefulSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -614,7 +642,7 @@ var xxx_messageInfo_StatefulSetSpec proto.InternalMessageInfo func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } func (*StatefulSetStatus) ProtoMessage() {} func (*StatefulSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_2a07313e8f66e805, []int{20} + return fileDescriptor_2a07313e8f66e805, []int{21} } func (m *StatefulSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -642,7 +670,7 @@ var xxx_messageInfo_StatefulSetStatus proto.InternalMessageInfo func (m *StatefulSetUpdateStrategy) Reset() { *m = StatefulSetUpdateStrategy{} } func (*StatefulSetUpdateStrategy) ProtoMessage() {} func (*StatefulSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_2a07313e8f66e805, []int{21} + return fileDescriptor_2a07313e8f66e805, []int{22} } func (m *StatefulSetUpdateStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -688,6 +716,7 @@ func init() { proto.RegisterType((*StatefulSet)(nil), "k8s.io.api.apps.v1beta1.StatefulSet") proto.RegisterType((*StatefulSetCondition)(nil), "k8s.io.api.apps.v1beta1.StatefulSetCondition") proto.RegisterType((*StatefulSetList)(nil), "k8s.io.api.apps.v1beta1.StatefulSetList") + proto.RegisterType((*StatefulSetOrdinals)(nil), "k8s.io.api.apps.v1beta1.StatefulSetOrdinals") proto.RegisterType((*StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), "k8s.io.api.apps.v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy") proto.RegisterType((*StatefulSetSpec)(nil), "k8s.io.api.apps.v1beta1.StatefulSetSpec") proto.RegisterType((*StatefulSetStatus)(nil), "k8s.io.api.apps.v1beta1.StatefulSetStatus") @@ -699,131 +728,135 @@ func init() { } var fileDescriptor_2a07313e8f66e805 = []byte{ - // 1982 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcf, 0x6f, 0x1b, 0xc7, - 0xf5, 0xd7, 0x52, 0xa2, 0x44, 0x3d, 0x45, 0x94, 0x3d, 0xd2, 0xd7, 0x62, 0x94, 0x6f, 0x49, 0x81, - 0x35, 0x12, 0xe5, 0x87, 0x97, 0xb1, 0x92, 0x06, 0x89, 0xdd, 0xba, 0x15, 0x25, 0x37, 0x76, 0x20, - 0xc5, 0xca, 0x48, 0x8a, 0xd1, 0xf4, 0x07, 0x32, 0x24, 0xc7, 0xd4, 0x46, 0xfb, 0x0b, 0xbb, 0x43, - 0xc6, 0x44, 0x2f, 0xfd, 0x03, 0x0a, 0xa4, 0xe7, 0xfe, 0x15, 0xbd, 0xb5, 0x68, 0xd1, 0x4b, 0x0f, - 0x85, 0x8f, 0x41, 0x2f, 0x4d, 0x2f, 0x44, 0xcd, 0x5c, 0xdb, 0x5b, 0x7b, 0x31, 0x50, 0xa0, 0x98, - 0xd9, 0xd9, 0xdf, 0xbb, 0xd2, 0xb2, 0x80, 0x05, 0xb4, 0x37, 0xed, 0xbc, 0xf7, 0x3e, 0x6f, 0xe6, - 0xcd, 0x7b, 0x6f, 0xde, 0x87, 0x82, 0xef, 0x9d, 0xbd, 0xeb, 0xaa, 0x9a, 0xd5, 0x3a, 0x1b, 0x74, - 0xa8, 0x63, 0x52, 0x46, 0xdd, 0xd6, 0x90, 0x9a, 0x3d, 0xcb, 0x69, 0x49, 0x01, 0xb1, 0xb5, 0x16, - 0xb1, 0x6d, 0xb7, 0x35, 0xbc, 0xd9, 0xa1, 0x8c, 0xdc, 0x6c, 0xf5, 0xa9, 0x49, 0x1d, 0xc2, 0x68, - 0x4f, 0xb5, 0x1d, 0x8b, 0x59, 0x68, 0xdd, 0x53, 0x54, 0x89, 0xad, 0xa9, 0x5c, 0x51, 0x95, 0x8a, - 0x1b, 0x37, 0xfa, 0x1a, 0x3b, 0x1d, 0x74, 0xd4, 0xae, 0x65, 0xb4, 0xfa, 0x56, 0xdf, 0x6a, 0x09, - 0xfd, 0xce, 0xe0, 0x91, 0xf8, 0x12, 0x1f, 0xe2, 0x2f, 0x0f, 0x67, 0xa3, 0x19, 0x71, 0xd8, 0xb5, - 0x1c, 0xda, 0x1a, 0xa6, 0x7c, 0x6d, 0xbc, 0x1d, 0xea, 0x18, 0xa4, 0x7b, 0xaa, 0x99, 0xd4, 0x19, - 0xb5, 0xec, 0xb3, 0x3e, 0x5f, 0x70, 0x5b, 0x06, 0x65, 0x24, 0xcb, 0xaa, 0x95, 0x67, 0xe5, 0x0c, - 0x4c, 0xa6, 0x19, 0x34, 0x65, 0xf0, 0xce, 0x45, 0x06, 0x6e, 0xf7, 0x94, 0x1a, 0x24, 0x65, 0xf7, - 0x56, 0x9e, 0xdd, 0x80, 0x69, 0x7a, 0x4b, 0x33, 0x99, 0xcb, 0x9c, 0xa4, 0x51, 0xf3, 0x9f, 0x0a, - 0xa0, 0x5d, 0xcb, 0x64, 0x8e, 0xa5, 0xeb, 0xd4, 0xc1, 0x74, 0xa8, 0xb9, 0x9a, 0x65, 0xa2, 0x4f, - 0xa1, 0xc2, 0xcf, 0xd3, 0x23, 0x8c, 0xd4, 0x94, 0x4d, 0x65, 0x6b, 0x69, 0xfb, 0x4d, 0x35, 0x8c, - 0x74, 0x00, 0xaf, 0xda, 0x67, 0x7d, 0xbe, 0xe0, 0xaa, 0x5c, 0x5b, 0x1d, 0xde, 0x54, 0x1f, 0x74, - 0x3e, 0xa3, 0x5d, 0x76, 0x40, 0x19, 0x69, 0xa3, 0x27, 0xe3, 0xc6, 0xcc, 0x64, 0xdc, 0x80, 0x70, - 0x0d, 0x07, 0xa8, 0xe8, 0x01, 0xcc, 0x09, 0xf4, 0x92, 0x40, 0xbf, 0x91, 0x8b, 0x2e, 0x0f, 0xad, - 0x62, 0xf2, 0xf9, 0xdd, 0xc7, 0x8c, 0x9a, 0x7c, 0x7b, 0xed, 0x17, 0x24, 0xf4, 0xdc, 0x1e, 0x61, - 0x04, 0x0b, 0x20, 0xf4, 0x06, 0x54, 0x1c, 0xb9, 0xfd, 0xda, 0xec, 0xa6, 0xb2, 0x35, 0xdb, 0xbe, - 0x22, 0xb5, 0x2a, 0xfe, 0xb1, 0x70, 0xa0, 0xd1, 0x7c, 0xa2, 0xc0, 0xb5, 0xf4, 0xb9, 0xf7, 0x35, - 0x97, 0xa1, 0x1f, 0xa5, 0xce, 0xae, 0x16, 0x3b, 0x3b, 0xb7, 0x16, 0x27, 0x0f, 0x1c, 0xfb, 0x2b, - 0x91, 0x73, 0x1f, 0x42, 0x59, 0x63, 0xd4, 0x70, 0x6b, 0xa5, 0xcd, 0xd9, 0xad, 0xa5, 0xed, 0xd7, - 0xd5, 0x9c, 0x04, 0x56, 0xd3, 0xbb, 0x6b, 0x2f, 0x4b, 0xdc, 0xf2, 0x7d, 0x8e, 0x80, 0x3d, 0xa0, - 0xe6, 0xcf, 0x4b, 0x00, 0x7b, 0xd4, 0xd6, 0xad, 0x91, 0x41, 0x4d, 0x76, 0x09, 0x57, 0x77, 0x1f, - 0xe6, 0x5c, 0x9b, 0x76, 0xe5, 0xd5, 0xbd, 0x92, 0x7b, 0x82, 0x70, 0x53, 0x47, 0x36, 0xed, 0x86, - 0x97, 0xc6, 0xbf, 0xb0, 0x80, 0x40, 0x1f, 0xc1, 0xbc, 0xcb, 0x08, 0x1b, 0xb8, 0xe2, 0xca, 0x96, - 0xb6, 0x5f, 0x2d, 0x02, 0x26, 0x0c, 0xda, 0x55, 0x09, 0x37, 0xef, 0x7d, 0x63, 0x09, 0xd4, 0xfc, - 0xf3, 0x2c, 0xac, 0x86, 0xca, 0xbb, 0x96, 0xd9, 0xd3, 0x18, 0x4f, 0xe9, 0xdb, 0x30, 0xc7, 0x46, - 0x36, 0x15, 0x31, 0x59, 0x6c, 0xbf, 0xe2, 0x6f, 0xe6, 0x78, 0x64, 0xd3, 0x67, 0xe3, 0xc6, 0x7a, - 0x86, 0x09, 0x17, 0x61, 0x61, 0x84, 0xf6, 0x83, 0x7d, 0x96, 0x84, 0xf9, 0xdb, 0x71, 0xe7, 0xcf, - 0xc6, 0x8d, 0x8c, 0x06, 0xa2, 0x06, 0x48, 0xf1, 0x2d, 0xa2, 0xcf, 0xa0, 0xaa, 0x13, 0x97, 0x9d, - 0xd8, 0x3d, 0xc2, 0xe8, 0xb1, 0x66, 0xd0, 0xda, 0xbc, 0x38, 0xfd, 0x6b, 0xc5, 0x2e, 0x8a, 0x5b, - 0xb4, 0xaf, 0xc9, 0x1d, 0x54, 0xf7, 0x63, 0x48, 0x38, 0x81, 0x8c, 0x86, 0x80, 0xf8, 0xca, 0xb1, - 0x43, 0x4c, 0xd7, 0x3b, 0x15, 0xf7, 0xb7, 0x30, 0xb5, 0xbf, 0x0d, 0xe9, 0x0f, 0xed, 0xa7, 0xd0, - 0x70, 0x86, 0x07, 0xf4, 0x32, 0xcc, 0x3b, 0x94, 0xb8, 0x96, 0x59, 0x9b, 0x13, 0x11, 0x0b, 0xae, - 0x0b, 0x8b, 0x55, 0x2c, 0xa5, 0xe8, 0x55, 0x58, 0x30, 0xa8, 0xeb, 0x92, 0x3e, 0xad, 0x95, 0x85, - 0xe2, 0x8a, 0x54, 0x5c, 0x38, 0xf0, 0x96, 0xb1, 0x2f, 0x6f, 0xfe, 0x46, 0x81, 0x6a, 0x78, 0x4d, - 0x97, 0x50, 0xab, 0xf7, 0xe2, 0xb5, 0xfa, 0xcd, 0x02, 0xc9, 0x99, 0x53, 0xa3, 0x7f, 0x2b, 0x01, - 0x0a, 0x95, 0xb0, 0xa5, 0xeb, 0x1d, 0xd2, 0x3d, 0x43, 0x9b, 0x30, 0x67, 0x12, 0xc3, 0xcf, 0xc9, - 0xa0, 0x40, 0x3e, 0x24, 0x06, 0xc5, 0x42, 0x82, 0xbe, 0x50, 0x00, 0x0d, 0xc4, 0x6d, 0xf6, 0x76, - 0x4c, 0xd3, 0x62, 0x84, 0x07, 0xd8, 0xdf, 0xd0, 0x6e, 0x81, 0x0d, 0xf9, 0xbe, 0xd4, 0x93, 0x14, - 0xca, 0x5d, 0x93, 0x39, 0xa3, 0xf0, 0x62, 0xd3, 0x0a, 0x38, 0xc3, 0x35, 0xfa, 0x21, 0x80, 0x23, - 0x31, 0x8f, 0x2d, 0x59, 0xb6, 0xf9, 0x3d, 0xc0, 0x77, 0xbf, 0x6b, 0x99, 0x8f, 0xb4, 0x7e, 0xd8, - 0x58, 0x70, 0x00, 0x81, 0x23, 0x70, 0x1b, 0x77, 0x61, 0x3d, 0x67, 0x9f, 0xe8, 0x0a, 0xcc, 0x9e, - 0xd1, 0x91, 0x17, 0x2a, 0xcc, 0xff, 0x44, 0x6b, 0x50, 0x1e, 0x12, 0x7d, 0x40, 0xbd, 0x9a, 0xc4, - 0xde, 0xc7, 0xad, 0xd2, 0xbb, 0x4a, 0xf3, 0x57, 0xe5, 0x68, 0xa6, 0xf0, 0x7e, 0x83, 0xb6, 0xf8, - 0xf3, 0x60, 0xeb, 0x5a, 0x97, 0xb8, 0x02, 0xa3, 0xdc, 0x7e, 0xc1, 0x7b, 0x1a, 0xbc, 0x35, 0x1c, - 0x48, 0xd1, 0x8f, 0xa1, 0xe2, 0x52, 0x9d, 0x76, 0x99, 0xe5, 0xc8, 0x16, 0xf7, 0x56, 0xc1, 0x9c, - 0x22, 0x1d, 0xaa, 0x1f, 0x49, 0x53, 0x0f, 0xde, 0xff, 0xc2, 0x01, 0x24, 0xfa, 0x08, 0x2a, 0x8c, - 0x1a, 0xb6, 0x4e, 0x18, 0x95, 0xd1, 0x8b, 0xe5, 0x15, 0xef, 0x1d, 0x1c, 0xec, 0xd0, 0xea, 0x1d, - 0x4b, 0x35, 0xd1, 0x3d, 0x83, 0x3c, 0xf5, 0x57, 0x71, 0x00, 0x83, 0x7e, 0x00, 0x15, 0x97, 0xf1, - 0x57, 0xbd, 0x3f, 0x12, 0xd5, 0x76, 0xde, 0xb3, 0x12, 0xed, 0xa3, 0x9e, 0x49, 0x08, 0xed, 0xaf, - 0xe0, 0x00, 0x0e, 0xed, 0xc0, 0x8a, 0xa1, 0x99, 0x98, 0x92, 0xde, 0xe8, 0x88, 0x76, 0x2d, 0xb3, - 0xe7, 0x8a, 0x32, 0x2d, 0xb7, 0xd7, 0xa5, 0xd1, 0xca, 0x41, 0x5c, 0x8c, 0x93, 0xfa, 0x68, 0x1f, - 0xd6, 0xfc, 0x67, 0xf7, 0x9e, 0xe6, 0x32, 0xcb, 0x19, 0xed, 0x6b, 0x86, 0xc6, 0x44, 0xcf, 0x2b, - 0xb7, 0x6b, 0x93, 0x71, 0x63, 0x0d, 0x67, 0xc8, 0x71, 0xa6, 0x15, 0xef, 0x2b, 0x36, 0x19, 0xb8, - 0xb4, 0x27, 0x7a, 0x58, 0x25, 0xec, 0x2b, 0x87, 0x62, 0x15, 0x4b, 0x29, 0x7a, 0x18, 0x4b, 0xd3, - 0xca, 0x74, 0x69, 0x5a, 0xcd, 0x4f, 0x51, 0x74, 0x02, 0xeb, 0xb6, 0x63, 0xf5, 0x1d, 0xea, 0xba, - 0x7b, 0x94, 0xf4, 0x74, 0xcd, 0xa4, 0x7e, 0x64, 0x16, 0xc5, 0x89, 0x5e, 0x9a, 0x8c, 0x1b, 0xeb, - 0x87, 0xd9, 0x2a, 0x38, 0xcf, 0xb6, 0xf9, 0x87, 0x39, 0xb8, 0x92, 0x7c, 0xe3, 0xd0, 0x07, 0x80, - 0xac, 0x8e, 0x4b, 0x9d, 0x21, 0xed, 0xbd, 0xef, 0x0d, 0x6e, 0x7c, 0xba, 0x51, 0xc4, 0x74, 0x13, - 0xd4, 0xed, 0x83, 0x94, 0x06, 0xce, 0xb0, 0xf2, 0xe6, 0x23, 0x59, 0x00, 0x25, 0xb1, 0xd1, 0xc8, - 0x7c, 0x94, 0x2a, 0x82, 0x1d, 0x58, 0x91, 0xb5, 0xef, 0x0b, 0x45, 0xb2, 0x46, 0xee, 0xfd, 0x24, - 0x2e, 0xc6, 0x49, 0x7d, 0x74, 0x1b, 0x96, 0x1d, 0x9e, 0x07, 0x01, 0xc0, 0x82, 0x00, 0xf8, 0x3f, - 0x09, 0xb0, 0x8c, 0xa3, 0x42, 0x1c, 0xd7, 0x45, 0xef, 0xc3, 0x55, 0x32, 0x24, 0x9a, 0x4e, 0x3a, - 0x3a, 0x0d, 0x00, 0xe6, 0x04, 0xc0, 0x8b, 0x12, 0xe0, 0xea, 0x4e, 0x52, 0x01, 0xa7, 0x6d, 0xd0, - 0x01, 0xac, 0x0e, 0xcc, 0x34, 0x94, 0x97, 0xc4, 0x2f, 0x49, 0xa8, 0xd5, 0x93, 0xb4, 0x0a, 0xce, - 0xb2, 0x43, 0x9f, 0x02, 0x74, 0xfd, 0x57, 0xdd, 0xad, 0xcd, 0x8b, 0x36, 0xfc, 0x46, 0x81, 0x62, - 0x0b, 0x46, 0x81, 0xb0, 0x05, 0x06, 0x4b, 0x2e, 0x8e, 0x60, 0xa2, 0x5b, 0x50, 0xed, 0x5a, 0xba, - 0x2e, 0x32, 0x7f, 0xd7, 0x1a, 0x98, 0x4c, 0x24, 0x6f, 0xb9, 0x8d, 0xf8, 0x63, 0xbf, 0x1b, 0x93, - 0xe0, 0x84, 0x66, 0xf3, 0x77, 0x4a, 0xf4, 0x99, 0xf1, 0xcb, 0x19, 0xdd, 0x8a, 0x8d, 0x3e, 0x2f, - 0x27, 0x46, 0x9f, 0x6b, 0x69, 0x8b, 0xc8, 0xe4, 0xa3, 0xc1, 0x32, 0x4f, 0x7e, 0xcd, 0xec, 0x7b, - 0x17, 0x2e, 0x5b, 0xe2, 0x9b, 0xe7, 0x96, 0x52, 0xa0, 0x1d, 0x79, 0x18, 0xaf, 0x8a, 0x3b, 0x8f, - 0x0a, 0x71, 0x1c, 0xb9, 0x79, 0x07, 0xaa, 0xf1, 0x3a, 0x8c, 0xcd, 0xf4, 0xca, 0x85, 0x33, 0xfd, - 0xd7, 0x0a, 0xac, 0xe7, 0x78, 0x47, 0x3a, 0x54, 0x0d, 0xf2, 0x38, 0x72, 0xcd, 0x17, 0xce, 0xc6, - 0x9c, 0x35, 0xa9, 0x1e, 0x6b, 0x52, 0xef, 0x9b, 0xec, 0x81, 0x73, 0xc4, 0x1c, 0xcd, 0xec, 0x7b, - 0xf7, 0x70, 0x10, 0xc3, 0xc2, 0x09, 0x6c, 0xf4, 0x09, 0x54, 0x0c, 0xf2, 0xf8, 0x68, 0xe0, 0xf4, - 0xb3, 0xe2, 0x55, 0xcc, 0x8f, 0x78, 0x3f, 0x0e, 0x24, 0x0a, 0x0e, 0xf0, 0x9a, 0xbf, 0x57, 0x60, - 0x33, 0x76, 0x4a, 0xde, 0x2b, 0xe8, 0xa3, 0x81, 0x7e, 0x44, 0xc3, 0x1b, 0x7f, 0x1d, 0x16, 0x6d, - 0xe2, 0x30, 0x2d, 0xe8, 0x17, 0xe5, 0xf6, 0xf2, 0x64, 0xdc, 0x58, 0x3c, 0xf4, 0x17, 0x71, 0x28, - 0xcf, 0x88, 0x4d, 0xe9, 0xf9, 0xc5, 0xa6, 0xf9, 0x2f, 0x05, 0xca, 0x47, 0x5d, 0xa2, 0xd3, 0x4b, - 0x60, 0x2a, 0x7b, 0x31, 0xa6, 0xd2, 0xcc, 0xcd, 0x59, 0xb1, 0x9f, 0x5c, 0x92, 0xb2, 0x9f, 0x20, - 0x29, 0xd7, 0x2f, 0xc0, 0x39, 0x9f, 0x9f, 0xbc, 0x07, 0x8b, 0x81, 0xbb, 0x58, 0x53, 0x56, 0x2e, - 0x6a, 0xca, 0xcd, 0x5f, 0x96, 0x60, 0x29, 0xe2, 0x62, 0x3a, 0x6b, 0x1e, 0xee, 0xc8, 0x5c, 0xc3, - 0x1b, 0xd7, 0x76, 0x91, 0x83, 0xa8, 0xfe, 0x0c, 0xe3, 0x8d, 0x8b, 0xe1, 0xb0, 0x90, 0x1e, 0x6d, - 0xee, 0x40, 0x95, 0x11, 0xa7, 0x4f, 0x99, 0x2f, 0x13, 0x01, 0x5b, 0x0c, 0xb9, 0xca, 0x71, 0x4c, - 0x8a, 0x13, 0xda, 0x1b, 0xb7, 0x61, 0x39, 0xe6, 0x6c, 0xaa, 0x99, 0xef, 0x0b, 0x1e, 0x9c, 0xb0, - 0x14, 0x2e, 0x21, 0xbb, 0x3e, 0x88, 0x65, 0xd7, 0x56, 0x7e, 0x30, 0x23, 0x05, 0x9a, 0x97, 0x63, - 0x38, 0x91, 0x63, 0xaf, 0x15, 0x42, 0x3b, 0x3f, 0xd3, 0xfe, 0x5e, 0x82, 0xb5, 0x88, 0x76, 0x48, - 0x85, 0xbf, 0x1d, 0x7b, 0x0f, 0xb6, 0x12, 0xef, 0x41, 0x2d, 0xcb, 0xe6, 0xb9, 0x71, 0xe1, 0x6c, - 0x7e, 0x3a, 0xfb, 0xdf, 0xc8, 0x4f, 0x7f, 0xab, 0xc0, 0x4a, 0x24, 0x76, 0x97, 0x40, 0x50, 0xef, - 0xc7, 0x09, 0xea, 0xf5, 0x22, 0x49, 0x93, 0xc3, 0x50, 0xff, 0xa1, 0x40, 0x2b, 0xa2, 0x75, 0x48, - 0x1d, 0x57, 0x73, 0x19, 0x35, 0xd9, 0xc7, 0x96, 0x3e, 0x30, 0xe8, 0xae, 0x4e, 0x34, 0x03, 0x53, - 0xbe, 0xa0, 0x59, 0xe6, 0xa1, 0xa5, 0x6b, 0xdd, 0x11, 0x22, 0xb0, 0xf4, 0xf9, 0x29, 0x35, 0xf7, - 0xa8, 0x4e, 0x19, 0xed, 0xc9, 0x74, 0xfa, 0xae, 0x84, 0x5f, 0x7a, 0x18, 0x8a, 0x9e, 0x8d, 0x1b, - 0x5b, 0x45, 0x10, 0x45, 0x96, 0x45, 0x31, 0xd1, 0x4f, 0x00, 0xf8, 0xa7, 0xe8, 0x47, 0x3d, 0x99, - 0x70, 0x77, 0xfc, 0xaa, 0x7c, 0x18, 0x48, 0xa6, 0x72, 0x10, 0x41, 0x6c, 0xfe, 0x65, 0x21, 0x76, - 0x67, 0xff, 0xf3, 0x54, 0xf1, 0xa7, 0xb0, 0x36, 0x0c, 0xa3, 0xe3, 0x2b, 0xf0, 0xd1, 0x7a, 0x36, - 0xf9, 0xf3, 0x5b, 0x00, 0x9f, 0x15, 0xd7, 0xf6, 0xff, 0x4b, 0x27, 0x6b, 0x1f, 0x67, 0xc0, 0xe1, - 0x4c, 0x27, 0xe8, 0x5b, 0xb0, 0xc4, 0x69, 0x89, 0xd6, 0xa5, 0x1f, 0x12, 0xc3, 0xaf, 0xa7, 0x55, - 0x3f, 0x5f, 0x8e, 0x42, 0x11, 0x8e, 0xea, 0xa1, 0x53, 0x58, 0xb5, 0xad, 0xde, 0x01, 0x31, 0x49, - 0x9f, 0xf2, 0x61, 0xce, 0xbb, 0x4a, 0xc1, 0x1f, 0x17, 0xdb, 0xef, 0xf8, 0x23, 0xfc, 0x61, 0x5a, - 0xe5, 0x19, 0x27, 0x62, 0xe9, 0x65, 0x91, 0x04, 0x59, 0x90, 0xc8, 0x81, 0xea, 0x40, 0xce, 0x54, - 0x92, 0x4e, 0x7b, 0x3f, 0x94, 0x6d, 0x17, 0x29, 0xac, 0x93, 0x98, 0x65, 0xf8, 0xe8, 0xc5, 0xd7, - 0x71, 0xc2, 0x43, 0x2e, 0x3d, 0xae, 0xfc, 0x47, 0xf4, 0x38, 0x83, 0xaf, 0x2f, 0x4e, 0xc9, 0xd7, - 0xff, 0xa8, 0xc0, 0x75, 0xbb, 0x40, 0x2d, 0xd5, 0x40, 0xc4, 0xe6, 0x5e, 0x91, 0xd8, 0x14, 0xa9, - 0xcd, 0xf6, 0xd6, 0x64, 0xdc, 0xb8, 0x5e, 0x44, 0x13, 0x17, 0xda, 0x5f, 0xf3, 0xd7, 0x65, 0xb8, - 0x9a, 0x7a, 0x2d, 0xd1, 0xf7, 0xcf, 0xe1, 0xd4, 0xd7, 0x9e, 0x1b, 0x9f, 0x4e, 0x91, 0xe1, 0xd9, - 0x29, 0xc8, 0xf0, 0x0e, 0xac, 0x74, 0x07, 0x8e, 0x43, 0x4d, 0x96, 0xa0, 0xc2, 0xc1, 0xa5, 0xee, - 0xc6, 0xc5, 0x38, 0xa9, 0x9f, 0xc5, 0xe7, 0xcb, 0x53, 0xf2, 0xf9, 0xe8, 0x2e, 0x24, 0x27, 0xf3, - 0x4a, 0x30, 0xbd, 0x0b, 0x49, 0xcd, 0x92, 0xfa, 0x7c, 0x40, 0xf4, 0x50, 0x03, 0x84, 0x85, 0xf8, - 0x80, 0x78, 0x12, 0x93, 0xe2, 0x84, 0x76, 0x06, 0x37, 0x5e, 0x2c, 0xca, 0x8d, 0x11, 0x89, 0x31, - 0x77, 0x10, 0xfd, 0xee, 0x46, 0x91, 0xdc, 0x2d, 0x4e, 0xdd, 0x33, 0x7f, 0xb4, 0x58, 0x9a, 0xfe, - 0x47, 0x8b, 0xe6, 0x9f, 0x14, 0x78, 0x31, 0xb7, 0xb3, 0xa0, 0x9d, 0xd8, 0xf8, 0x76, 0x23, 0x31, - 0xbe, 0x7d, 0x23, 0xd7, 0x30, 0x32, 0xc3, 0x39, 0xd9, 0xac, 0xfe, 0xbd, 0x62, 0xac, 0x3e, 0x83, - 0x71, 0x5e, 0x4c, 0xef, 0xdb, 0xdf, 0x79, 0xf2, 0xb4, 0x3e, 0xf3, 0xe5, 0xd3, 0xfa, 0xcc, 0x57, - 0x4f, 0xeb, 0x33, 0x3f, 0x9b, 0xd4, 0x95, 0x27, 0x93, 0xba, 0xf2, 0xe5, 0xa4, 0xae, 0x7c, 0x35, - 0xa9, 0x2b, 0x7f, 0x9d, 0xd4, 0x95, 0x5f, 0x7c, 0x5d, 0x9f, 0xf9, 0x64, 0x3d, 0xe7, 0x3f, 0xbf, - 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x15, 0x68, 0x85, 0x2c, 0x1e, 0x00, 0x00, + // 2038 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0x52, 0xa2, 0x44, 0x3d, 0x45, 0x54, 0x3c, 0x52, 0x2d, 0x46, 0x69, 0x25, 0x61, 0x6b, + 0x24, 0x4a, 0x62, 0x2f, 0x63, 0x25, 0x0d, 0x12, 0xbb, 0x75, 0x2a, 0x4a, 0x6e, 0xec, 0x40, 0x8a, + 0x94, 0x91, 0x64, 0xa3, 0xe9, 0x07, 0x32, 0x22, 0xc7, 0xd4, 0x46, 0xfb, 0x85, 0xdd, 0x21, 0x63, + 0xa2, 0x97, 0xfe, 0x01, 0x05, 0xd2, 0x73, 0xff, 0x8a, 0xf6, 0xd4, 0xa2, 0x45, 0x2f, 0x3d, 0x14, + 0x3e, 0x06, 0xbd, 0x34, 0x27, 0xa2, 0x66, 0xae, 0xed, 0xad, 0xbd, 0x18, 0x28, 0x50, 0xcc, 0xec, + 0xec, 0xf7, 0xae, 0xb4, 0x2c, 0x60, 0x01, 0xed, 0x8d, 0x3b, 0xef, 0xbd, 0xdf, 0x7b, 0xf3, 0xe6, + 0xbd, 0x37, 0xef, 0x0d, 0xe1, 0xfb, 0x67, 0xef, 0x7a, 0x9a, 0x6e, 0x37, 0xcf, 0x7a, 0x27, 0xd4, + 0xb5, 0x28, 0xa3, 0x5e, 0xb3, 0x4f, 0xad, 0x8e, 0xed, 0x36, 0x25, 0x81, 0x38, 0x7a, 0x93, 0x38, + 0x8e, 0xd7, 0xec, 0xdf, 0x3c, 0xa1, 0x8c, 0xdc, 0x6c, 0x76, 0xa9, 0x45, 0x5d, 0xc2, 0x68, 0x47, + 0x73, 0x5c, 0x9b, 0xd9, 0x68, 0xd9, 0x67, 0xd4, 0x88, 0xa3, 0x6b, 0x9c, 0x51, 0x93, 0x8c, 0x2b, + 0x37, 0xba, 0x3a, 0x3b, 0xed, 0x9d, 0x68, 0x6d, 0xdb, 0x6c, 0x76, 0xed, 0xae, 0xdd, 0x14, 0xfc, + 0x27, 0xbd, 0x47, 0xe2, 0x4b, 0x7c, 0x88, 0x5f, 0x3e, 0xce, 0x8a, 0x1a, 0x53, 0xd8, 0xb6, 0x5d, + 0xda, 0xec, 0x67, 0x74, 0xad, 0xbc, 0x1d, 0xf1, 0x98, 0xa4, 0x7d, 0xaa, 0x5b, 0xd4, 0x1d, 0x34, + 0x9d, 0xb3, 0x2e, 0x5f, 0xf0, 0x9a, 0x26, 0x65, 0x24, 0x4f, 0xaa, 0x59, 0x24, 0xe5, 0xf6, 0x2c, + 0xa6, 0x9b, 0x34, 0x23, 0xf0, 0xce, 0x45, 0x02, 0x5e, 0xfb, 0x94, 0x9a, 0x24, 0x23, 0xf7, 0x56, + 0x91, 0x5c, 0x8f, 0xe9, 0x46, 0x53, 0xb7, 0x98, 0xc7, 0xdc, 0xb4, 0x90, 0xfa, 0x2f, 0x05, 0xd0, + 0xb6, 0x6d, 0x31, 0xd7, 0x36, 0x0c, 0xea, 0x62, 0xda, 0xd7, 0x3d, 0xdd, 0xb6, 0xd0, 0xa7, 0x50, + 0xe3, 0xfb, 0xe9, 0x10, 0x46, 0x1a, 0xca, 0xba, 0xb2, 0x31, 0xb7, 0xf9, 0xa6, 0x16, 0x79, 0x3a, + 0x84, 0xd7, 0x9c, 0xb3, 0x2e, 0x5f, 0xf0, 0x34, 0xce, 0xad, 0xf5, 0x6f, 0x6a, 0xfb, 0x27, 0x9f, + 0xd1, 0x36, 0xdb, 0xa3, 0x8c, 0xb4, 0xd0, 0x93, 0xe1, 0xda, 0xc4, 0x68, 0xb8, 0x06, 0xd1, 0x1a, + 0x0e, 0x51, 0xd1, 0x3e, 0x4c, 0x09, 0xf4, 0x8a, 0x40, 0xbf, 0x51, 0x88, 0x2e, 0x37, 0xad, 0x61, + 0xf2, 0xf9, 0xdd, 0xc7, 0x8c, 0x5a, 0xdc, 0xbc, 0xd6, 0x0b, 0x12, 0x7a, 0x6a, 0x87, 0x30, 0x82, + 0x05, 0x10, 0xba, 0x0e, 0x35, 0x57, 0x9a, 0xdf, 0x98, 0x5c, 0x57, 0x36, 0x26, 0x5b, 0x2f, 0x4a, + 0xae, 0x5a, 0xb0, 0x2d, 0x1c, 0x72, 0xa8, 0x4f, 0x14, 0xb8, 0x9a, 0xdd, 0xf7, 0xae, 0xee, 0x31, + 0xf4, 0xe3, 0xcc, 0xde, 0xb5, 0x72, 0x7b, 0xe7, 0xd2, 0x62, 0xe7, 0xa1, 0xe2, 0x60, 0x25, 0xb6, + 0xef, 0x03, 0xa8, 0xea, 0x8c, 0x9a, 0x5e, 0xa3, 0xb2, 0x3e, 0xb9, 0x31, 0xb7, 0xf9, 0x86, 0x56, + 0x10, 0xc0, 0x5a, 0xd6, 0xba, 0xd6, 0xbc, 0xc4, 0xad, 0xde, 0xe7, 0x08, 0xd8, 0x07, 0x52, 0x7f, + 0x51, 0x01, 0xd8, 0xa1, 0x8e, 0x61, 0x0f, 0x4c, 0x6a, 0xb1, 0x4b, 0x38, 0xba, 0xfb, 0x30, 0xe5, + 0x39, 0xb4, 0x2d, 0x8f, 0xee, 0xd5, 0xc2, 0x1d, 0x44, 0x46, 0x1d, 0x3a, 0xb4, 0x1d, 0x1d, 0x1a, + 0xff, 0xc2, 0x02, 0x02, 0x7d, 0x0c, 0xd3, 0x1e, 0x23, 0xac, 0xe7, 0x89, 0x23, 0x9b, 0xdb, 0x7c, + 0xad, 0x0c, 0x98, 0x10, 0x68, 0xd5, 0x25, 0xdc, 0xb4, 0xff, 0x8d, 0x25, 0x90, 0xfa, 0xd7, 0x49, + 0x58, 0x8c, 0x98, 0xb7, 0x6d, 0xab, 0xa3, 0x33, 0x1e, 0xd2, 0xb7, 0x61, 0x8a, 0x0d, 0x1c, 0x2a, + 0x7c, 0x32, 0xdb, 0x7a, 0x35, 0x30, 0xe6, 0x68, 0xe0, 0xd0, 0x67, 0xc3, 0xb5, 0xe5, 0x1c, 0x11, + 0x4e, 0xc2, 0x42, 0x08, 0xed, 0x86, 0x76, 0x56, 0x84, 0xf8, 0xdb, 0x49, 0xe5, 0xcf, 0x86, 0x6b, + 0x39, 0x05, 0x44, 0x0b, 0x91, 0x92, 0x26, 0xa2, 0xcf, 0xa0, 0x6e, 0x10, 0x8f, 0x1d, 0x3b, 0x1d, + 0xc2, 0xe8, 0x91, 0x6e, 0xd2, 0xc6, 0xb4, 0xd8, 0xfd, 0xeb, 0xe5, 0x0e, 0x8a, 0x4b, 0xb4, 0xae, + 0x4a, 0x0b, 0xea, 0xbb, 0x09, 0x24, 0x9c, 0x42, 0x46, 0x7d, 0x40, 0x7c, 0xe5, 0xc8, 0x25, 0x96, + 0xe7, 0xef, 0x8a, 0xeb, 0x9b, 0x19, 0x5b, 0xdf, 0x8a, 0xd4, 0x87, 0x76, 0x33, 0x68, 0x38, 0x47, + 0x03, 0x7a, 0x05, 0xa6, 0x5d, 0x4a, 0x3c, 0xdb, 0x6a, 0x4c, 0x09, 0x8f, 0x85, 0xc7, 0x85, 0xc5, + 0x2a, 0x96, 0x54, 0xf4, 0x1a, 0xcc, 0x98, 0xd4, 0xf3, 0x48, 0x97, 0x36, 0xaa, 0x82, 0x71, 0x41, + 0x32, 0xce, 0xec, 0xf9, 0xcb, 0x38, 0xa0, 0xab, 0xbf, 0x53, 0xa0, 0x1e, 0x1d, 0xd3, 0x25, 0xe4, + 0xea, 0xbd, 0x64, 0xae, 0x7e, 0xbb, 0x44, 0x70, 0x16, 0xe4, 0xe8, 0xdf, 0x2b, 0x80, 0x22, 0x26, + 0x6c, 0x1b, 0xc6, 0x09, 0x69, 0x9f, 0xa1, 0x75, 0x98, 0xb2, 0x88, 0x19, 0xc4, 0x64, 0x98, 0x20, + 0x1f, 0x11, 0x93, 0x62, 0x41, 0x41, 0x5f, 0x28, 0x80, 0x7a, 0xe2, 0x34, 0x3b, 0x5b, 0x96, 0x65, + 0x33, 0xc2, 0x1d, 0x1c, 0x18, 0xb4, 0x5d, 0xc2, 0xa0, 0x40, 0x97, 0x76, 0x9c, 0x41, 0xb9, 0x6b, + 0x31, 0x77, 0x10, 0x1d, 0x6c, 0x96, 0x01, 0xe7, 0xa8, 0x46, 0x3f, 0x02, 0x70, 0x25, 0xe6, 0x91, + 0x2d, 0xd3, 0xb6, 0xb8, 0x06, 0x04, 0xea, 0xb7, 0x6d, 0xeb, 0x91, 0xde, 0x8d, 0x0a, 0x0b, 0x0e, + 0x21, 0x70, 0x0c, 0x6e, 0xe5, 0x2e, 0x2c, 0x17, 0xd8, 0x89, 0x5e, 0x84, 0xc9, 0x33, 0x3a, 0xf0, + 0x5d, 0x85, 0xf9, 0x4f, 0xb4, 0x04, 0xd5, 0x3e, 0x31, 0x7a, 0xd4, 0xcf, 0x49, 0xec, 0x7f, 0xdc, + 0xaa, 0xbc, 0xab, 0xa8, 0xbf, 0xae, 0xc6, 0x23, 0x85, 0xd7, 0x1b, 0xb4, 0xc1, 0xaf, 0x07, 0xc7, + 0xd0, 0xdb, 0xc4, 0x13, 0x18, 0xd5, 0xd6, 0x0b, 0xfe, 0xd5, 0xe0, 0xaf, 0xe1, 0x90, 0x8a, 0x7e, + 0x02, 0x35, 0x8f, 0x1a, 0xb4, 0xcd, 0x6c, 0x57, 0x96, 0xb8, 0xb7, 0x4a, 0xc6, 0x14, 0x39, 0xa1, + 0xc6, 0xa1, 0x14, 0xf5, 0xe1, 0x83, 0x2f, 0x1c, 0x42, 0xa2, 0x8f, 0xa1, 0xc6, 0xa8, 0xe9, 0x18, + 0x84, 0x51, 0xe9, 0xbd, 0x44, 0x5c, 0xf1, 0xda, 0xc1, 0xc1, 0x0e, 0xec, 0xce, 0x91, 0x64, 0x13, + 0xd5, 0x33, 0x8c, 0xd3, 0x60, 0x15, 0x87, 0x30, 0xe8, 0x87, 0x50, 0xf3, 0x18, 0xbf, 0xd5, 0xbb, + 0x03, 0x91, 0x6d, 0xe7, 0x5d, 0x2b, 0xf1, 0x3a, 0xea, 0x8b, 0x44, 0xd0, 0xc1, 0x0a, 0x0e, 0xe1, + 0xd0, 0x16, 0x2c, 0x98, 0xba, 0x85, 0x29, 0xe9, 0x0c, 0x0e, 0x69, 0xdb, 0xb6, 0x3a, 0x9e, 0x48, + 0xd3, 0x6a, 0x6b, 0x59, 0x0a, 0x2d, 0xec, 0x25, 0xc9, 0x38, 0xcd, 0x8f, 0x76, 0x61, 0x29, 0xb8, + 0x76, 0xef, 0xe9, 0x1e, 0xb3, 0xdd, 0xc1, 0xae, 0x6e, 0xea, 0x4c, 0xd4, 0xbc, 0x6a, 0xab, 0x31, + 0x1a, 0xae, 0x2d, 0xe1, 0x1c, 0x3a, 0xce, 0x95, 0xe2, 0x75, 0xc5, 0x21, 0x3d, 0x8f, 0x76, 0x44, + 0x0d, 0xab, 0x45, 0x75, 0xe5, 0x40, 0xac, 0x62, 0x49, 0x45, 0x0f, 0x13, 0x61, 0x5a, 0x1b, 0x2f, + 0x4c, 0xeb, 0xc5, 0x21, 0x8a, 0x8e, 0x61, 0xd9, 0x71, 0xed, 0xae, 0x4b, 0x3d, 0x6f, 0x87, 0x92, + 0x8e, 0xa1, 0x5b, 0x34, 0xf0, 0xcc, 0xac, 0xd8, 0xd1, 0xcb, 0xa3, 0xe1, 0xda, 0xf2, 0x41, 0x3e, + 0x0b, 0x2e, 0x92, 0x55, 0xff, 0x34, 0x05, 0x2f, 0xa6, 0xef, 0x38, 0xf4, 0x21, 0x20, 0xfb, 0xc4, + 0xa3, 0x6e, 0x9f, 0x76, 0x3e, 0xf0, 0x1b, 0x37, 0xde, 0xdd, 0x28, 0xa2, 0xbb, 0x09, 0xf3, 0x76, + 0x3f, 0xc3, 0x81, 0x73, 0xa4, 0xfc, 0xfe, 0x48, 0x26, 0x40, 0x45, 0x18, 0x1a, 0xeb, 0x8f, 0x32, + 0x49, 0xb0, 0x05, 0x0b, 0x32, 0xf7, 0x03, 0xa2, 0x08, 0xd6, 0xd8, 0xb9, 0x1f, 0x27, 0xc9, 0x38, + 0xcd, 0x8f, 0x6e, 0xc3, 0xbc, 0xcb, 0xe3, 0x20, 0x04, 0x98, 0x11, 0x00, 0xdf, 0x90, 0x00, 0xf3, + 0x38, 0x4e, 0xc4, 0x49, 0x5e, 0xf4, 0x01, 0x5c, 0x21, 0x7d, 0xa2, 0x1b, 0xe4, 0xc4, 0xa0, 0x21, + 0xc0, 0x94, 0x00, 0x78, 0x49, 0x02, 0x5c, 0xd9, 0x4a, 0x33, 0xe0, 0xac, 0x0c, 0xda, 0x83, 0xc5, + 0x9e, 0x95, 0x85, 0xf2, 0x83, 0xf8, 0x65, 0x09, 0xb5, 0x78, 0x9c, 0x65, 0xc1, 0x79, 0x72, 0xe8, + 0x53, 0x80, 0x76, 0x70, 0xab, 0x7b, 0x8d, 0x69, 0x51, 0x86, 0xaf, 0x97, 0x48, 0xb6, 0xb0, 0x15, + 0x88, 0x4a, 0x60, 0xb8, 0xe4, 0xe1, 0x18, 0x26, 0xba, 0x05, 0xf5, 0xb6, 0x6d, 0x18, 0x22, 0xf2, + 0xb7, 0xed, 0x9e, 0xc5, 0x44, 0xf0, 0x56, 0x5b, 0x88, 0x5f, 0xf6, 0xdb, 0x09, 0x0a, 0x4e, 0x71, + 0xaa, 0x7f, 0x50, 0xe2, 0xd7, 0x4c, 0x90, 0xce, 0xe8, 0x56, 0xa2, 0xf5, 0x79, 0x25, 0xd5, 0xfa, + 0x5c, 0xcd, 0x4a, 0xc4, 0x3a, 0x1f, 0x1d, 0xe6, 0x79, 0xf0, 0xeb, 0x56, 0xd7, 0x3f, 0x70, 0x59, + 0x12, 0xdf, 0x3c, 0x37, 0x95, 0x42, 0xee, 0xd8, 0xc5, 0x78, 0x45, 0x9c, 0x79, 0x9c, 0x88, 0x93, + 0xc8, 0xea, 0x1d, 0xa8, 0x27, 0xf3, 0x30, 0xd1, 0xd3, 0x2b, 0x17, 0xf6, 0xf4, 0x5f, 0x2b, 0xb0, + 0x5c, 0xa0, 0x1d, 0x19, 0x50, 0x37, 0xc9, 0xe3, 0xd8, 0x31, 0x5f, 0xd8, 0x1b, 0xf3, 0xa9, 0x49, + 0xf3, 0xa7, 0x26, 0xed, 0xbe, 0xc5, 0xf6, 0xdd, 0x43, 0xe6, 0xea, 0x56, 0xd7, 0x3f, 0x87, 0xbd, + 0x04, 0x16, 0x4e, 0x61, 0xa3, 0x4f, 0xa0, 0x66, 0x92, 0xc7, 0x87, 0x3d, 0xb7, 0x9b, 0xe7, 0xaf, + 0x72, 0x7a, 0xc4, 0xfd, 0xb1, 0x27, 0x51, 0x70, 0x88, 0xa7, 0xfe, 0x51, 0x81, 0xf5, 0xc4, 0x2e, + 0x79, 0xad, 0xa0, 0x8f, 0x7a, 0xc6, 0x21, 0x8d, 0x4e, 0xfc, 0x0d, 0x98, 0x75, 0x88, 0xcb, 0xf4, + 0xb0, 0x5e, 0x54, 0x5b, 0xf3, 0xa3, 0xe1, 0xda, 0xec, 0x41, 0xb0, 0x88, 0x23, 0x7a, 0x8e, 0x6f, + 0x2a, 0xcf, 0xcf, 0x37, 0xea, 0xbf, 0x15, 0xa8, 0x1e, 0xb6, 0x89, 0x41, 0x2f, 0x61, 0x52, 0xd9, + 0x49, 0x4c, 0x2a, 0x6a, 0x61, 0xcc, 0x0a, 0x7b, 0x0a, 0x87, 0x94, 0xdd, 0xd4, 0x90, 0x72, 0xed, + 0x02, 0x9c, 0xf3, 0xe7, 0x93, 0xf7, 0x60, 0x36, 0x54, 0x97, 0x28, 0xca, 0xca, 0x45, 0x45, 0x59, + 0xfd, 0x55, 0x05, 0xe6, 0x62, 0x2a, 0xc6, 0x93, 0xe6, 0xee, 0x8e, 0xf5, 0x35, 0xbc, 0x70, 0x6d, + 0x96, 0xd9, 0x88, 0x16, 0xf4, 0x30, 0x7e, 0xbb, 0x18, 0x35, 0x0b, 0xd9, 0xd6, 0xe6, 0x0e, 0xd4, + 0x19, 0x71, 0xbb, 0x94, 0x05, 0x34, 0xe1, 0xb0, 0xd9, 0x68, 0x56, 0x39, 0x4a, 0x50, 0x71, 0x8a, + 0x7b, 0xe5, 0x36, 0xcc, 0x27, 0x94, 0x8d, 0xd5, 0xf3, 0x7d, 0xc1, 0x9d, 0x13, 0xa5, 0xc2, 0x25, + 0x44, 0xd7, 0x87, 0x89, 0xe8, 0xda, 0x28, 0x76, 0x66, 0x2c, 0x41, 0x8b, 0x62, 0x0c, 0xa7, 0x62, + 0xec, 0xf5, 0x52, 0x68, 0xe7, 0x47, 0xda, 0x3f, 0x2a, 0xb0, 0x14, 0xe3, 0x8e, 0x46, 0xe1, 0xef, + 0x26, 0xee, 0x83, 0x8d, 0xd4, 0x7d, 0xd0, 0xc8, 0x93, 0x79, 0x6e, 0xb3, 0x70, 0xfe, 0x7c, 0x3a, + 0xf9, 0xbf, 0x38, 0x9f, 0xfe, 0x5e, 0x81, 0x85, 0x98, 0xef, 0x2e, 0x61, 0x40, 0xbd, 0x9f, 0x1c, + 0x50, 0xaf, 0x95, 0x09, 0x9a, 0x82, 0x09, 0xf5, 0x01, 0x2c, 0xc6, 0x98, 0xf6, 0xdd, 0x8e, 0x6e, + 0x11, 0xc3, 0x43, 0xef, 0xc3, 0xa2, 0x2c, 0x20, 0x87, 0x8c, 0xb8, 0xc1, 0x7a, 0x70, 0xa5, 0x04, + 0x48, 0x82, 0x86, 0xf3, 0x38, 0xd5, 0x7f, 0x2a, 0xd0, 0x8c, 0x01, 0x1f, 0x50, 0xd7, 0xd3, 0x3d, + 0x46, 0x2d, 0xf6, 0xc0, 0x36, 0x7a, 0x26, 0xdd, 0x36, 0x88, 0x6e, 0x62, 0xca, 0x17, 0x74, 0xdb, + 0x3a, 0xb0, 0x0d, 0xbd, 0x3d, 0x40, 0x04, 0xe6, 0x3e, 0x3f, 0xa5, 0xd6, 0x0e, 0x35, 0x28, 0xa3, + 0x1d, 0x19, 0xa6, 0xef, 0x4b, 0x65, 0x73, 0x0f, 0x23, 0xd2, 0xb3, 0xe1, 0xda, 0x46, 0x19, 0x44, + 0x11, 0xbd, 0x71, 0x4c, 0xf4, 0x53, 0x00, 0xfe, 0x29, 0xea, 0x5c, 0x47, 0x06, 0xf2, 0x9d, 0x20, + 0xdb, 0x1f, 0x86, 0x94, 0xb1, 0x14, 0xc4, 0x10, 0xd5, 0xdf, 0xd4, 0x12, 0xb1, 0xf0, 0x7f, 0x3f, + 0x82, 0xfe, 0x0c, 0x96, 0xfa, 0x91, 0x77, 0x02, 0x06, 0xde, 0xb2, 0x4f, 0xa6, 0x9f, 0xf5, 0x42, + 0xf8, 0x3c, 0xbf, 0xb6, 0xbe, 0x29, 0x95, 0x2c, 0x3d, 0xc8, 0x81, 0xc3, 0xb9, 0x4a, 0xd0, 0x77, + 0x60, 0x8e, 0x8f, 0x3b, 0x7a, 0x9b, 0x7e, 0x44, 0xcc, 0x20, 0x4f, 0x17, 0x83, 0x78, 0x39, 0x8c, + 0x48, 0x38, 0xce, 0x87, 0x4e, 0x61, 0xd1, 0xb1, 0x3b, 0x7b, 0xc4, 0x22, 0x5d, 0xca, 0x9b, 0x44, + 0xff, 0x28, 0xc5, 0x5c, 0x3a, 0xdb, 0x7a, 0x27, 0x18, 0x0d, 0x0e, 0xb2, 0x2c, 0xcf, 0xf8, 0x80, + 0x97, 0x5d, 0x16, 0x41, 0x90, 0x07, 0x89, 0x5c, 0xa8, 0xf7, 0x64, 0xaf, 0x26, 0xc7, 0x74, 0xff, + 0x01, 0x6e, 0xb3, 0x4c, 0xc2, 0x1e, 0x27, 0x24, 0xa3, 0xcb, 0x34, 0xb9, 0x8e, 0x53, 0x1a, 0x0a, + 0xc7, 0xee, 0xda, 0x7f, 0x35, 0x76, 0xe7, 0xbc, 0x03, 0xcc, 0x8e, 0xf9, 0x0e, 0xf0, 0x67, 0x05, + 0xae, 0x39, 0x25, 0x72, 0xa9, 0x01, 0xc2, 0x37, 0xf7, 0xca, 0xf8, 0xa6, 0x4c, 0x6e, 0xb6, 0x36, + 0x46, 0xc3, 0xb5, 0x6b, 0x65, 0x38, 0x71, 0x29, 0xfb, 0xd0, 0x03, 0xa8, 0xd9, 0xb2, 0x3e, 0x36, + 0xe6, 0x84, 0xad, 0xd7, 0xcb, 0xd8, 0x1a, 0xd4, 0x54, 0x3f, 0x2d, 0x83, 0x2f, 0x1c, 0x62, 0xa9, + 0xbf, 0xad, 0xc2, 0x95, 0xcc, 0xed, 0x8e, 0x7e, 0x70, 0xce, 0x1b, 0xc0, 0xd5, 0xe7, 0x36, 0xff, + 0x67, 0x86, 0xf7, 0xc9, 0x31, 0x86, 0xf7, 0x2d, 0x58, 0x68, 0xf7, 0x5c, 0x97, 0x5a, 0x2c, 0x35, + 0xba, 0x87, 0xc1, 0xb2, 0x9d, 0x24, 0xe3, 0x34, 0x7f, 0xde, 0xfb, 0x43, 0x75, 0xcc, 0xf7, 0x87, + 0xb8, 0x15, 0x72, 0x86, 0xf4, 0x53, 0x3b, 0x6b, 0x85, 0x1c, 0x25, 0xd3, 0xfc, 0xbc, 0xa1, 0xf5, + 0x51, 0x43, 0x84, 0x99, 0x64, 0x43, 0x7b, 0x9c, 0xa0, 0xe2, 0x14, 0x77, 0xce, 0x2c, 0x3f, 0x5b, + 0x76, 0x96, 0x47, 0x24, 0xf1, 0xd2, 0x00, 0xa2, 0x8e, 0xde, 0x28, 0x13, 0x67, 0xe5, 0x9f, 0x1a, + 0x72, 0x1f, 0x59, 0xe6, 0xc6, 0x7f, 0x64, 0x51, 0xff, 0xa2, 0xc0, 0x4b, 0x85, 0x15, 0x0b, 0x6d, + 0x25, 0xda, 0xcd, 0x1b, 0xa9, 0x76, 0xf3, 0x5b, 0x85, 0x82, 0xb1, 0x9e, 0xd3, 0xcd, 0x7f, 0x85, + 0x78, 0xaf, 0xdc, 0x2b, 0x44, 0xce, 0x84, 0x7c, 0xf1, 0x73, 0x44, 0xeb, 0x7b, 0x4f, 0x9e, 0xae, + 0x4e, 0x7c, 0xf9, 0x74, 0x75, 0xe2, 0xab, 0xa7, 0xab, 0x13, 0x3f, 0x1f, 0xad, 0x2a, 0x4f, 0x46, + 0xab, 0xca, 0x97, 0xa3, 0x55, 0xe5, 0xab, 0xd1, 0xaa, 0xf2, 0xb7, 0xd1, 0xaa, 0xf2, 0xcb, 0xaf, + 0x57, 0x27, 0x3e, 0x59, 0x2e, 0xf8, 0xa7, 0xfa, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0xbb, + 0x1f, 0x87, 0xdc, 0x1e, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { @@ -1737,6 +1770,32 @@ func (m *StatefulSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *StatefulSetOrdinals) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StatefulSetOrdinals) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetOrdinals) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1790,6 +1849,18 @@ func (m *StatefulSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Ordinals != nil { + { + size, err := m.Ordinals.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } if m.PersistentVolumeClaimRetentionPolicy != nil { { size, err := m.PersistentVolumeClaimRetentionPolicy.MarshalToSizedBuffer(dAtA[:i]) @@ -2312,6 +2383,16 @@ func (m *StatefulSetList) Size() (n int) { return n } +func (m *StatefulSetOrdinals) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Start)) + return n +} + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Size() (n int) { if m == nil { return 0 @@ -2360,6 +2441,10 @@ func (m *StatefulSetSpec) Size() (n int) { l = m.PersistentVolumeClaimRetentionPolicy.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Ordinals != nil { + l = m.Ordinals.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -2676,6 +2761,16 @@ func (this *StatefulSetList) String() string { }, "") return s } +func (this *StatefulSetOrdinals) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatefulSetOrdinals{`, + `Start:` + fmt.Sprintf("%v", this.Start) + `,`, + `}`, + }, "") + return s +} func (this *StatefulSetPersistentVolumeClaimRetentionPolicy) String() string { if this == nil { return "nil" @@ -2707,6 +2802,7 @@ func (this *StatefulSetSpec) String() string { `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `PersistentVolumeClaimRetentionPolicy:` + strings.Replace(this.PersistentVolumeClaimRetentionPolicy.String(), "StatefulSetPersistentVolumeClaimRetentionPolicy", "StatefulSetPersistentVolumeClaimRetentionPolicy", 1) + `,`, + `Ordinals:` + strings.Replace(this.Ordinals.String(), "StatefulSetOrdinals", "StatefulSetOrdinals", 1) + `,`, `}`, }, "") return s @@ -5601,6 +5697,75 @@ func (m *StatefulSetList) Unmarshal(dAtA []byte) error { } return nil } +func (m *StatefulSetOrdinals) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatefulSetOrdinals: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatefulSetOrdinals: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -6039,6 +6204,42 @@ func (m *StatefulSetSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ordinals", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Ordinals == nil { + m.Ordinals = &StatefulSetOrdinals{} + } + if err := m.Ordinals.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.proto b/staging/src/k8s.io/api/apps/v1beta1/generated.proto index 5823613ed20..a6d1188b994 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.proto @@ -380,6 +380,17 @@ message StatefulSetList { repeated StatefulSet items = 2; } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +message StatefulSetOrdinals { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + optional int32 replicaStartOrdinal = 1; +} + // StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs // created from the StatefulSet VolumeClaimTemplates. message StatefulSetPersistentVolumeClaimRetentionPolicy { @@ -469,6 +480,14 @@ message StatefulSetSpec { // StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. // +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + optional StatefulSetOrdinals ordinals = 11; } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1beta1/types.go b/staging/src/k8s.io/api/apps/v1beta1/types.go index 4632c63a79e..814296720f1 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types.go @@ -204,6 +204,17 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { WhenScaled PersistentVolumeClaimRetentionPolicyType `json:"whenScaled,omitempty" protobuf:"bytes,2,opt,name=whenScaled,casttype=PersistentVolumeClaimRetentionPolicyType"` } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +type StatefulSetOrdinals struct { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` +} + // A StatefulSetSpec is the specification of a StatefulSet. type StatefulSetSpec struct { // replicas is the desired number of replicas of the given Template. @@ -276,6 +287,14 @@ type StatefulSetSpec struct { // StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go index 47f3414533d..7c79496c66f 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go @@ -228,6 +228,15 @@ func (StatefulSetList) SwaggerDoc() map[string]string { return map_StatefulSetList } +var map_StatefulSetOrdinals = map[string]string{ + "": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + "start": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", +} + +func (StatefulSetOrdinals) SwaggerDoc() map[string]string { + return map_StatefulSetOrdinals +} + var map_StatefulSetPersistentVolumeClaimRetentionPolicy = map[string]string{ "": "StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates.", "whenDeleted": "WhenDeleted specifies what happens to PVCs created from StatefulSet VolumeClaimTemplates when the StatefulSet is deleted. The default policy of `Retain` causes PVCs to not be affected by StatefulSet deletion. The `Delete` policy causes those PVCs to be deleted.", @@ -250,6 +259,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha.", + "ordinals": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go index 185f868cd68..dd73f1a5a9c 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go @@ -505,6 +505,22 @@ func (in *StatefulSetList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatefulSetOrdinals) DeepCopyInto(out *StatefulSetOrdinals) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetOrdinals. +func (in *StatefulSetOrdinals) DeepCopy() *StatefulSetOrdinals { + if in == nil { + return nil + } + out := new(StatefulSetOrdinals) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StatefulSetPersistentVolumeClaimRetentionPolicy) DeepCopyInto(out *StatefulSetPersistentVolumeClaimRetentionPolicy) { *out = *in @@ -553,6 +569,11 @@ func (in *StatefulSetSpec) DeepCopyInto(out *StatefulSetSpec) { *out = new(StatefulSetPersistentVolumeClaimRetentionPolicy) **out = **in } + if in.Ordinals != nil { + in, out := &in.Ordinals, &out.Ordinals + *out = new(StatefulSetOrdinals) + **out = **in + } return } diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go b/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go index df26908fcfc..7ed6589b29b 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go @@ -833,12 +833,40 @@ func (m *StatefulSetList) XXX_DiscardUnknown() { var xxx_messageInfo_StatefulSetList proto.InternalMessageInfo +func (m *StatefulSetOrdinals) Reset() { *m = StatefulSetOrdinals{} } +func (*StatefulSetOrdinals) ProtoMessage() {} +func (*StatefulSetOrdinals) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{28} +} +func (m *StatefulSetOrdinals) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetOrdinals) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetOrdinals) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetOrdinals.Merge(m, src) +} +func (m *StatefulSetOrdinals) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetOrdinals) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetOrdinals.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetOrdinals proto.InternalMessageInfo + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Reset() { *m = StatefulSetPersistentVolumeClaimRetentionPolicy{} } func (*StatefulSetPersistentVolumeClaimRetentionPolicy) ProtoMessage() {} func (*StatefulSetPersistentVolumeClaimRetentionPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_42fe616264472f7e, []int{28} + return fileDescriptor_42fe616264472f7e, []int{29} } func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -866,7 +894,7 @@ var xxx_messageInfo_StatefulSetPersistentVolumeClaimRetentionPolicy proto.Intern func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } func (*StatefulSetSpec) ProtoMessage() {} func (*StatefulSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_42fe616264472f7e, []int{29} + return fileDescriptor_42fe616264472f7e, []int{30} } func (m *StatefulSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -894,7 +922,7 @@ var xxx_messageInfo_StatefulSetSpec proto.InternalMessageInfo func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } func (*StatefulSetStatus) ProtoMessage() {} func (*StatefulSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_42fe616264472f7e, []int{30} + return fileDescriptor_42fe616264472f7e, []int{31} } func (m *StatefulSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -922,7 +950,7 @@ var xxx_messageInfo_StatefulSetStatus proto.InternalMessageInfo func (m *StatefulSetUpdateStrategy) Reset() { *m = StatefulSetUpdateStrategy{} } func (*StatefulSetUpdateStrategy) ProtoMessage() {} func (*StatefulSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_42fe616264472f7e, []int{31} + return fileDescriptor_42fe616264472f7e, []int{32} } func (m *StatefulSetUpdateStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -977,6 +1005,7 @@ func init() { proto.RegisterType((*StatefulSet)(nil), "k8s.io.api.apps.v1beta2.StatefulSet") proto.RegisterType((*StatefulSetCondition)(nil), "k8s.io.api.apps.v1beta2.StatefulSetCondition") proto.RegisterType((*StatefulSetList)(nil), "k8s.io.api.apps.v1beta2.StatefulSetList") + proto.RegisterType((*StatefulSetOrdinals)(nil), "k8s.io.api.apps.v1beta2.StatefulSetOrdinals") proto.RegisterType((*StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), "k8s.io.api.apps.v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy") proto.RegisterType((*StatefulSetSpec)(nil), "k8s.io.api.apps.v1beta2.StatefulSetSpec") proto.RegisterType((*StatefulSetStatus)(nil), "k8s.io.api.apps.v1beta2.StatefulSetStatus") @@ -988,151 +1017,154 @@ func init() { } var fileDescriptor_42fe616264472f7e = []byte{ - // 2295 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcf, 0x6f, 0x1b, 0xc7, - 0xf5, 0xd7, 0xf2, 0x87, 0x44, 0x8e, 0x2c, 0xc9, 0x1e, 0xe9, 0x2b, 0x31, 0xf2, 0xb7, 0xa4, 0xb1, - 0x31, 0x1c, 0x25, 0xb6, 0x49, 0x5b, 0xf9, 0x81, 0xc4, 0x6e, 0x93, 0x8a, 0x52, 0x6a, 0x3b, 0x90, - 0x64, 0x66, 0x64, 0x39, 0x68, 0xd0, 0x1f, 0x1e, 0x91, 0x63, 0x6a, 0xa3, 0xe5, 0xee, 0x62, 0x77, - 0x96, 0x31, 0xd1, 0x4b, 0xaf, 0x05, 0x0a, 0xb4, 0xbd, 0xf6, 0x9f, 0xe8, 0xad, 0x28, 0x1a, 0xf4, - 0x52, 0x04, 0x81, 0x8f, 0x41, 0x2f, 0x49, 0x2f, 0x44, 0xcd, 0x9c, 0x8a, 0xa2, 0xb7, 0xf6, 0x62, - 0xa0, 0x40, 0x31, 0xb3, 0xb3, 0xbf, 0x77, 0xcd, 0xa5, 0x62, 0x2b, 0x4d, 0x90, 0x1b, 0x77, 0xde, - 0x7b, 0x9f, 0x79, 0x33, 0xf3, 0xde, 0xbc, 0xcf, 0xcc, 0x10, 0x7c, 0xff, 0xe8, 0x75, 0xab, 0xae, - 0xe8, 0x8d, 0x23, 0xfb, 0x80, 0x98, 0x1a, 0xa1, 0xc4, 0x6a, 0xf4, 0x89, 0xd6, 0xd1, 0xcd, 0x86, - 0x10, 0x60, 0x43, 0x69, 0x60, 0xc3, 0xb0, 0x1a, 0xfd, 0xab, 0x07, 0x84, 0xe2, 0xf5, 0x46, 0x97, - 0x68, 0xc4, 0xc4, 0x94, 0x74, 0xea, 0x86, 0xa9, 0x53, 0x1d, 0xae, 0x38, 0x8a, 0x75, 0x6c, 0x28, - 0x75, 0xa6, 0x58, 0x17, 0x8a, 0xab, 0x97, 0xbb, 0x0a, 0x3d, 0xb4, 0x0f, 0xea, 0x6d, 0xbd, 0xd7, - 0xe8, 0xea, 0x5d, 0xbd, 0xc1, 0xf5, 0x0f, 0xec, 0xfb, 0xfc, 0x8b, 0x7f, 0xf0, 0x5f, 0x0e, 0xce, - 0xaa, 0x1c, 0xe8, 0xb0, 0xad, 0x9b, 0xa4, 0xd1, 0xbf, 0x1a, 0xed, 0x6b, 0xf5, 0x15, 0x5f, 0xa7, - 0x87, 0xdb, 0x87, 0x8a, 0x46, 0xcc, 0x41, 0xc3, 0x38, 0xea, 0xb2, 0x06, 0xab, 0xd1, 0x23, 0x14, - 0x27, 0x59, 0x35, 0xd2, 0xac, 0x4c, 0x5b, 0xa3, 0x4a, 0x8f, 0xc4, 0x0c, 0x5e, 0x1b, 0x67, 0x60, - 0xb5, 0x0f, 0x49, 0x0f, 0xc7, 0xec, 0x5e, 0x4e, 0xb3, 0xb3, 0xa9, 0xa2, 0x36, 0x14, 0x8d, 0x5a, - 0xd4, 0x8c, 0x1a, 0xc9, 0xff, 0x96, 0x00, 0xdc, 0xd4, 0x35, 0x6a, 0xea, 0xaa, 0x4a, 0x4c, 0x44, - 0xfa, 0x8a, 0xa5, 0xe8, 0x1a, 0xbc, 0x07, 0x4a, 0x6c, 0x3c, 0x1d, 0x4c, 0x71, 0x45, 0x3a, 0x27, - 0xad, 0xcd, 0xae, 0x5f, 0xa9, 0xfb, 0x33, 0xed, 0xc1, 0xd7, 0x8d, 0xa3, 0x2e, 0x6b, 0xb0, 0xea, - 0x4c, 0xbb, 0xde, 0xbf, 0x5a, 0xbf, 0x7d, 0xf0, 0x01, 0x69, 0xd3, 0x1d, 0x42, 0x71, 0x13, 0x3e, - 0x1c, 0xd6, 0xa6, 0x46, 0xc3, 0x1a, 0xf0, 0xdb, 0x90, 0x87, 0x0a, 0x6f, 0x83, 0x02, 0x47, 0xcf, - 0x71, 0xf4, 0xcb, 0xa9, 0xe8, 0x62, 0xd0, 0x75, 0x84, 0x3f, 0x7c, 0xfb, 0x01, 0x25, 0x1a, 0x73, - 0xaf, 0x79, 0x4a, 0x40, 0x17, 0xb6, 0x30, 0xc5, 0x88, 0x03, 0xc1, 0x4b, 0xa0, 0x64, 0x0a, 0xf7, - 0x2b, 0xf9, 0x73, 0xd2, 0x5a, 0xbe, 0x79, 0x5a, 0x68, 0x95, 0xdc, 0x61, 0x21, 0x4f, 0x43, 0x7e, - 0x28, 0x81, 0xe5, 0xf8, 0xb8, 0xb7, 0x15, 0x8b, 0xc2, 0x1f, 0xc5, 0xc6, 0x5e, 0xcf, 0x36, 0x76, - 0x66, 0xcd, 0x47, 0xee, 0x75, 0xec, 0xb6, 0x04, 0xc6, 0xdd, 0x02, 0x45, 0x85, 0x92, 0x9e, 0x55, - 0xc9, 0x9d, 0xcb, 0xaf, 0xcd, 0xae, 0x5f, 0xac, 0xa7, 0x04, 0x70, 0x3d, 0xee, 0x5d, 0x73, 0x4e, - 0xe0, 0x16, 0x6f, 0x31, 0x04, 0xe4, 0x00, 0xc9, 0xbf, 0xc8, 0x81, 0xf2, 0x16, 0x26, 0x3d, 0x5d, - 0xdb, 0x23, 0xf4, 0x04, 0x56, 0xee, 0x26, 0x28, 0x58, 0x06, 0x69, 0x8b, 0x95, 0xbb, 0x90, 0x3a, - 0x00, 0xcf, 0xa7, 0x3d, 0x83, 0xb4, 0xfd, 0x25, 0x63, 0x5f, 0x88, 0x23, 0xc0, 0x16, 0x98, 0xb6, - 0x28, 0xa6, 0xb6, 0xc5, 0x17, 0x6c, 0x76, 0x7d, 0x2d, 0x03, 0x16, 0xd7, 0x6f, 0xce, 0x0b, 0xb4, - 0x69, 0xe7, 0x1b, 0x09, 0x1c, 0xf9, 0xef, 0x39, 0x00, 0x3d, 0xdd, 0x4d, 0x5d, 0xeb, 0x28, 0x94, - 0x85, 0xf3, 0x35, 0x50, 0xa0, 0x03, 0x83, 0xf0, 0x09, 0x29, 0x37, 0x2f, 0xb8, 0xae, 0xdc, 0x19, - 0x18, 0xe4, 0xf1, 0xb0, 0xb6, 0x1c, 0xb7, 0x60, 0x12, 0xc4, 0x6d, 0xe0, 0xb6, 0xe7, 0x64, 0x8e, - 0x5b, 0xbf, 0x12, 0xee, 0xfa, 0xf1, 0xb0, 0x96, 0xb0, 0x77, 0xd4, 0x3d, 0xa4, 0xb0, 0x83, 0xb0, - 0x0f, 0xa0, 0x8a, 0x2d, 0x7a, 0xc7, 0xc4, 0x9a, 0xe5, 0xf4, 0xa4, 0xf4, 0x88, 0x18, 0xfe, 0x4b, - 0xd9, 0x16, 0x8a, 0x59, 0x34, 0x57, 0x85, 0x17, 0x70, 0x3b, 0x86, 0x86, 0x12, 0x7a, 0x80, 0x17, - 0xc0, 0xb4, 0x49, 0xb0, 0xa5, 0x6b, 0x95, 0x02, 0x1f, 0x85, 0x37, 0x81, 0x88, 0xb7, 0x22, 0x21, - 0x85, 0x2f, 0x82, 0x99, 0x1e, 0xb1, 0x2c, 0xdc, 0x25, 0x95, 0x22, 0x57, 0x5c, 0x10, 0x8a, 0x33, - 0x3b, 0x4e, 0x33, 0x72, 0xe5, 0xf2, 0xef, 0x25, 0x30, 0xe7, 0xcd, 0xdc, 0x09, 0x64, 0xce, 0x8d, - 0x70, 0xe6, 0xc8, 0xe3, 0x83, 0x25, 0x25, 0x61, 0x3e, 0xce, 0x07, 0x1c, 0x67, 0xe1, 0x08, 0x7f, - 0x0c, 0x4a, 0x16, 0x51, 0x49, 0x9b, 0xea, 0xa6, 0x70, 0xfc, 0xe5, 0x8c, 0x8e, 0xe3, 0x03, 0xa2, - 0xee, 0x09, 0xd3, 0xe6, 0x29, 0xe6, 0xb9, 0xfb, 0x85, 0x3c, 0x48, 0xf8, 0x2e, 0x28, 0x51, 0xd2, - 0x33, 0x54, 0x4c, 0x89, 0xc8, 0x9a, 0xe7, 0x83, 0xce, 0xb3, 0x98, 0x61, 0x60, 0x2d, 0xbd, 0x73, - 0x47, 0xa8, 0xf1, 0x94, 0xf1, 0x26, 0xc3, 0x6d, 0x45, 0x1e, 0x0c, 0x34, 0xc0, 0xbc, 0x6d, 0x74, - 0x98, 0x26, 0x65, 0xdb, 0x79, 0x77, 0x20, 0x62, 0xe8, 0xca, 0xf8, 0x59, 0xd9, 0x0f, 0xd9, 0x35, - 0x97, 0x45, 0x2f, 0xf3, 0xe1, 0x76, 0x14, 0xc1, 0x87, 0x1b, 0x60, 0xa1, 0xa7, 0x68, 0x88, 0xe0, - 0xce, 0x60, 0x8f, 0xb4, 0x75, 0xad, 0x63, 0xf1, 0x50, 0x2a, 0x36, 0x57, 0x04, 0xc0, 0xc2, 0x4e, - 0x58, 0x8c, 0xa2, 0xfa, 0x70, 0x1b, 0x2c, 0xb9, 0x1b, 0xf0, 0x4d, 0xc5, 0xa2, 0xba, 0x39, 0xd8, - 0x56, 0x7a, 0x0a, 0xad, 0x4c, 0x73, 0x9c, 0xca, 0x68, 0x58, 0x5b, 0x42, 0x09, 0x72, 0x94, 0x68, - 0x25, 0xff, 0x66, 0x1a, 0x2c, 0x44, 0xf6, 0x05, 0x78, 0x17, 0x2c, 0xb7, 0x6d, 0xd3, 0x24, 0x1a, - 0xdd, 0xb5, 0x7b, 0x07, 0xc4, 0xdc, 0x6b, 0x1f, 0x92, 0x8e, 0xad, 0x92, 0x0e, 0x5f, 0xd6, 0x62, - 0xb3, 0x2a, 0x7c, 0x5d, 0xde, 0x4c, 0xd4, 0x42, 0x29, 0xd6, 0xf0, 0x1d, 0x00, 0x35, 0xde, 0xb4, - 0xa3, 0x58, 0x96, 0x87, 0x99, 0xe3, 0x98, 0x5e, 0x2a, 0xee, 0xc6, 0x34, 0x50, 0x82, 0x15, 0xf3, - 0xb1, 0x43, 0x2c, 0xc5, 0x24, 0x9d, 0xa8, 0x8f, 0xf9, 0xb0, 0x8f, 0x5b, 0x89, 0x5a, 0x28, 0xc5, - 0x1a, 0xbe, 0x0a, 0x66, 0x9d, 0xde, 0xf8, 0x9c, 0x8b, 0xc5, 0x59, 0x14, 0x60, 0xb3, 0xbb, 0xbe, - 0x08, 0x05, 0xf5, 0xd8, 0xd0, 0xf4, 0x03, 0x8b, 0x98, 0x7d, 0xd2, 0xb9, 0xe1, 0x90, 0x03, 0x56, - 0x41, 0x8b, 0xbc, 0x82, 0x7a, 0x43, 0xbb, 0x1d, 0xd3, 0x40, 0x09, 0x56, 0x6c, 0x68, 0x4e, 0xd4, - 0xc4, 0x86, 0x36, 0x1d, 0x1e, 0xda, 0x7e, 0xa2, 0x16, 0x4a, 0xb1, 0x66, 0xb1, 0xe7, 0xb8, 0xbc, - 0xd1, 0xc7, 0x8a, 0x8a, 0x0f, 0x54, 0x52, 0x99, 0x09, 0xc7, 0xde, 0x6e, 0x58, 0x8c, 0xa2, 0xfa, - 0xf0, 0x06, 0x38, 0xe3, 0x34, 0xed, 0x6b, 0xd8, 0x03, 0x29, 0x71, 0x90, 0xe7, 0x04, 0xc8, 0x99, - 0xdd, 0xa8, 0x02, 0x8a, 0xdb, 0xc0, 0x6b, 0x60, 0xbe, 0xad, 0xab, 0x2a, 0x8f, 0xc7, 0x4d, 0xdd, - 0xd6, 0x68, 0xa5, 0xcc, 0x51, 0x20, 0xcb, 0xa1, 0xcd, 0x90, 0x04, 0x45, 0x34, 0xe1, 0x4f, 0x01, - 0x68, 0xbb, 0x85, 0xc1, 0xaa, 0x80, 0x31, 0x0c, 0x20, 0x5e, 0x96, 0xfc, 0xca, 0xec, 0x35, 0x59, - 0x28, 0x00, 0x29, 0x7f, 0x2c, 0x81, 0x95, 0x94, 0x44, 0x87, 0x6f, 0x85, 0x8a, 0xe0, 0xc5, 0x48, - 0x11, 0x3c, 0x9b, 0x62, 0x16, 0xa8, 0x84, 0x87, 0x60, 0x8e, 0x11, 0x12, 0x45, 0xeb, 0x3a, 0x2a, - 0x62, 0x2f, 0x6b, 0xa4, 0x0e, 0x00, 0x05, 0xb5, 0xfd, 0x5d, 0xf9, 0xcc, 0x68, 0x58, 0x9b, 0x0b, - 0xc9, 0x50, 0x18, 0x58, 0xfe, 0x65, 0x0e, 0x80, 0x2d, 0x62, 0xa8, 0xfa, 0xa0, 0x47, 0xb4, 0x93, - 0xe0, 0x34, 0xb7, 0x42, 0x9c, 0xe6, 0x85, 0xf4, 0x25, 0xf1, 0x9c, 0x4a, 0x25, 0x35, 0xef, 0x46, - 0x48, 0xcd, 0x8b, 0x59, 0xc0, 0x9e, 0xcc, 0x6a, 0x3e, 0xcb, 0x83, 0x45, 0x5f, 0xd9, 0xa7, 0x35, - 0xd7, 0x43, 0x2b, 0xfa, 0x42, 0x64, 0x45, 0x57, 0x12, 0x4c, 0x9e, 0x19, 0xaf, 0xf9, 0x00, 0xcc, - 0x33, 0xd6, 0xe1, 0xac, 0x1f, 0xe7, 0x34, 0xd3, 0x13, 0x73, 0x1a, 0xaf, 0x12, 0x6d, 0x87, 0x90, - 0x50, 0x04, 0x39, 0x85, 0x43, 0xcd, 0x7c, 0x1d, 0x39, 0xd4, 0x1f, 0x24, 0x30, 0xef, 0x2f, 0xd3, - 0x09, 0x90, 0xa8, 0x9b, 0x61, 0x12, 0xf5, 0x7c, 0x86, 0xe0, 0x4c, 0x61, 0x51, 0x9f, 0x15, 0x82, - 0xae, 0x73, 0x1a, 0xb5, 0xc6, 0x8e, 0x60, 0x86, 0xaa, 0xb4, 0xb1, 0x25, 0xea, 0xed, 0x29, 0xe7, - 0xf8, 0xe5, 0xb4, 0x21, 0x4f, 0x1a, 0x22, 0x5c, 0xb9, 0x67, 0x4b, 0xb8, 0xf2, 0x4f, 0x87, 0x70, - 0xfd, 0x10, 0x94, 0x2c, 0x97, 0x6a, 0x15, 0x38, 0xe4, 0xc5, 0x4c, 0x89, 0x2d, 0x58, 0x96, 0x07, - 0xed, 0xf1, 0x2b, 0x0f, 0x2e, 0x89, 0x59, 0x15, 0xbf, 0x4a, 0x66, 0xc5, 0x02, 0xdd, 0xc0, 0xb6, - 0x45, 0x3a, 0x3c, 0xa9, 0x4a, 0x7e, 0xa0, 0xb7, 0x78, 0x2b, 0x12, 0x52, 0xb8, 0x0f, 0x56, 0x0c, - 0x53, 0xef, 0x9a, 0xc4, 0xb2, 0xb6, 0x08, 0xee, 0xa8, 0x8a, 0x46, 0xdc, 0x01, 0x38, 0x35, 0xf1, - 0xec, 0x68, 0x58, 0x5b, 0x69, 0x25, 0xab, 0xa0, 0x34, 0x5b, 0xf9, 0xcf, 0x05, 0x70, 0x3a, 0xba, - 0x37, 0xa6, 0xd0, 0x14, 0xe9, 0x58, 0x34, 0xe5, 0x52, 0x20, 0x4e, 0x1d, 0x0e, 0x17, 0xb8, 0x2a, - 0x88, 0xc5, 0xea, 0x06, 0x58, 0x10, 0xb4, 0xc4, 0x15, 0x0a, 0xa2, 0xe6, 0x2d, 0xcf, 0x7e, 0x58, - 0x8c, 0xa2, 0xfa, 0xf0, 0x3a, 0x98, 0x33, 0x39, 0xf3, 0x72, 0x01, 0x1c, 0xf6, 0xf2, 0x7f, 0x02, - 0x60, 0x0e, 0x05, 0x85, 0x28, 0xac, 0xcb, 0x98, 0x8b, 0x4f, 0x48, 0x5c, 0x80, 0x42, 0x98, 0xb9, - 0x6c, 0x44, 0x15, 0x50, 0xdc, 0x06, 0xee, 0x80, 0x45, 0x5b, 0x8b, 0x43, 0x39, 0xb1, 0x76, 0x56, - 0x40, 0x2d, 0xee, 0xc7, 0x55, 0x50, 0x92, 0x1d, 0xbc, 0x17, 0x22, 0x33, 0xd3, 0x7c, 0x3f, 0xb9, - 0x94, 0x21, 0x27, 0x32, 0xb3, 0x99, 0x04, 0xaa, 0x55, 0xca, 0x4a, 0xb5, 0xe4, 0x8f, 0x24, 0x00, - 0xe3, 0x79, 0x38, 0xf6, 0x26, 0x20, 0x66, 0x11, 0xa8, 0x98, 0x4a, 0x32, 0xff, 0xb9, 0x92, 0x91, - 0xff, 0xf8, 0x1b, 0x6a, 0x36, 0x02, 0x24, 0x26, 0xfa, 0x64, 0x2e, 0x75, 0xb2, 0x12, 0x20, 0xdf, - 0xa9, 0xa7, 0x40, 0x80, 0x02, 0x60, 0x4f, 0x26, 0x40, 0xff, 0xc8, 0x81, 0x45, 0x5f, 0x39, 0x33, - 0x01, 0x4a, 0x30, 0xf9, 0xf6, 0x62, 0x27, 0x1b, 0x29, 0xf1, 0xa7, 0xee, 0x7f, 0x89, 0x94, 0xf8, - 0x5e, 0xa5, 0x90, 0x92, 0xdf, 0xe5, 0x82, 0xae, 0x4f, 0x48, 0x4a, 0x9e, 0xc2, 0x0d, 0xc7, 0xd7, - 0x8e, 0xd7, 0xc8, 0x9f, 0xe4, 0xc1, 0xe9, 0x68, 0x1e, 0x86, 0x0a, 0xa4, 0x34, 0xb6, 0x40, 0xb6, - 0xc0, 0xd2, 0x7d, 0x5b, 0x55, 0x07, 0x7c, 0x0c, 0x81, 0x2a, 0xe9, 0x94, 0xd6, 0xff, 0x17, 0x96, - 0x4b, 0x3f, 0x48, 0xd0, 0x41, 0x89, 0x96, 0xf1, 0x7a, 0x59, 0xf8, 0xb2, 0xf5, 0xb2, 0x78, 0x8c, - 0x7a, 0x99, 0x4c, 0x39, 0xf2, 0xc7, 0xa2, 0x1c, 0x93, 0x15, 0xcb, 0x84, 0x8d, 0x6b, 0xec, 0xd1, - 0x7f, 0x24, 0x81, 0xe5, 0xe4, 0x03, 0x37, 0x54, 0xc1, 0x7c, 0x0f, 0x3f, 0x08, 0x5e, 0x7c, 0x8c, - 0x2b, 0x22, 0x36, 0x55, 0xd4, 0xba, 0xf3, 0x64, 0x54, 0xbf, 0xa5, 0xd1, 0xdb, 0xe6, 0x1e, 0x35, - 0x15, 0xad, 0xeb, 0x54, 0xde, 0x9d, 0x10, 0x16, 0x8a, 0x60, 0xc3, 0xf7, 0x41, 0xa9, 0x87, 0x1f, - 0xec, 0xd9, 0x66, 0x37, 0xa9, 0x42, 0x66, 0xeb, 0x87, 0x27, 0xc0, 0x8e, 0x40, 0x41, 0x1e, 0x9e, - 0xfc, 0x85, 0x04, 0x56, 0x52, 0xaa, 0xea, 0x37, 0x68, 0x94, 0x7f, 0x92, 0xc0, 0xb9, 0xd0, 0x28, - 0x59, 0x5a, 0x92, 0xfb, 0xb6, 0xca, 0x33, 0x54, 0x30, 0x99, 0x8b, 0xa0, 0x6c, 0x60, 0x93, 0x2a, - 0x1e, 0x0f, 0x2e, 0x36, 0xe7, 0x46, 0xc3, 0x5a, 0xb9, 0xe5, 0x36, 0x22, 0x5f, 0x9e, 0x30, 0x37, - 0xb9, 0x67, 0x37, 0x37, 0xf2, 0x7f, 0x24, 0x50, 0xdc, 0x6b, 0x63, 0x95, 0x9c, 0x00, 0x71, 0xd9, - 0x0a, 0x11, 0x97, 0xf4, 0x47, 0x01, 0xee, 0x4f, 0x2a, 0x67, 0xd9, 0x8e, 0x70, 0x96, 0xf3, 0x63, - 0x70, 0x9e, 0x4c, 0x57, 0xde, 0x00, 0x65, 0xaf, 0xbb, 0xc9, 0xf6, 0x52, 0xf9, 0xb7, 0x39, 0x30, - 0x1b, 0xe8, 0x62, 0xc2, 0x9d, 0xf8, 0x5e, 0xa8, 0xfc, 0xb0, 0x3d, 0x66, 0x3d, 0xcb, 0x40, 0xea, - 0x6e, 0xa9, 0x79, 0x5b, 0xa3, 0x66, 0xf0, 0xac, 0x1a, 0xaf, 0x40, 0x6f, 0x82, 0x79, 0x8a, 0xcd, - 0x2e, 0xa1, 0xae, 0x8c, 0x4f, 0x58, 0xd9, 0xbf, 0xbb, 0xb9, 0x13, 0x92, 0xa2, 0x88, 0xf6, 0xea, - 0x75, 0x30, 0x17, 0xea, 0x0c, 0x9e, 0x06, 0xf9, 0x23, 0x32, 0x70, 0x18, 0x1c, 0x62, 0x3f, 0xe1, - 0x12, 0x28, 0xf6, 0xb1, 0x6a, 0x3b, 0x21, 0x5a, 0x46, 0xce, 0xc7, 0xb5, 0xdc, 0xeb, 0x92, 0xfc, - 0x2b, 0x36, 0x39, 0x7e, 0x2a, 0x9c, 0x40, 0x74, 0xbd, 0x13, 0x8a, 0xae, 0xf4, 0xf7, 0xc9, 0x60, - 0x82, 0xa6, 0xc5, 0x18, 0x8a, 0xc4, 0xd8, 0x4b, 0x99, 0xd0, 0x9e, 0x1c, 0x69, 0xff, 0xcc, 0x81, - 0xa5, 0x80, 0xb6, 0xcf, 0x8c, 0xbf, 0x1b, 0x62, 0xc6, 0x6b, 0x11, 0x66, 0x5c, 0x49, 0xb2, 0xf9, - 0x96, 0x1a, 0x8f, 0xa7, 0xc6, 0x7f, 0x94, 0xc0, 0x42, 0x60, 0xee, 0x4e, 0x80, 0x1b, 0xdf, 0x0a, - 0x73, 0xe3, 0xf3, 0x59, 0x82, 0x26, 0x85, 0x1c, 0xff, 0x4b, 0x02, 0x8d, 0x80, 0x56, 0x8b, 0x98, - 0x96, 0x62, 0x51, 0xa2, 0xd1, 0xbb, 0xba, 0x6a, 0xf7, 0xc8, 0xa6, 0x8a, 0x95, 0x1e, 0x22, 0xac, - 0x41, 0xd1, 0xb5, 0x96, 0xae, 0x2a, 0xed, 0x01, 0xc4, 0x60, 0xf6, 0xc3, 0x43, 0xa2, 0x6d, 0x11, - 0x95, 0x50, 0xf1, 0x8a, 0x56, 0x6e, 0xbe, 0xe5, 0x3e, 0x2a, 0xbd, 0xe7, 0x8b, 0x1e, 0x0f, 0x6b, - 0x6b, 0x59, 0x10, 0x79, 0x94, 0x05, 0x31, 0xe1, 0x4f, 0x00, 0x60, 0x9f, 0x7c, 0x3f, 0xea, 0x88, - 0x80, 0x7b, 0xd3, 0xcd, 0xca, 0xf7, 0x3c, 0xc9, 0x44, 0x1d, 0x04, 0x10, 0xe5, 0xbf, 0xce, 0x84, - 0xd6, 0xec, 0x1b, 0x7f, 0x53, 0xf9, 0x33, 0xb0, 0xd4, 0xf7, 0x67, 0xc7, 0x55, 0x60, 0x1c, 0x3a, - 0x1f, 0x3d, 0x8d, 0x7b, 0xf0, 0x49, 0xf3, 0xea, 0x33, 0xf7, 0xbb, 0x09, 0x70, 0x28, 0xb1, 0x13, - 0xf8, 0x2a, 0x98, 0x65, 0xdc, 0x57, 0x69, 0x93, 0x5d, 0xdc, 0x73, 0xf3, 0xc9, 0x7b, 0x84, 0xdc, - 0xf3, 0x45, 0x28, 0xa8, 0x07, 0x0f, 0xc1, 0xa2, 0xa1, 0x77, 0x76, 0xb0, 0x86, 0xbb, 0x84, 0x91, - 0x39, 0x67, 0x29, 0xf9, 0xf5, 0x65, 0xb9, 0xf9, 0x9a, 0x7b, 0x35, 0xd5, 0x8a, 0xab, 0xb0, 0x63, - 0x7e, 0x42, 0x33, 0x0f, 0x82, 0x24, 0x48, 0x68, 0xc6, 0x1e, 0xce, 0x9d, 0x87, 0x83, 0xf5, 0x2c, - 0x89, 0x75, 0xcc, 0xa7, 0xf3, 0xb4, 0xdb, 0xd9, 0xd2, 0xb1, 0x6e, 0x67, 0x13, 0x8e, 0xa9, 0xe5, - 0x09, 0x8f, 0xa9, 0x9f, 0x48, 0xe0, 0xbc, 0x91, 0x21, 0x97, 0x2a, 0x80, 0xcf, 0xcd, 0xcd, 0x2c, - 0x73, 0x93, 0x25, 0x37, 0x9b, 0x6b, 0xa3, 0x61, 0xed, 0x7c, 0x16, 0x4d, 0x94, 0xc9, 0x3f, 0xf9, - 0xa3, 0x22, 0x38, 0x13, 0xab, 0x96, 0x5f, 0xe1, 0x5d, 0x71, 0xec, 0xe0, 0x9a, 0x9f, 0xe0, 0xe0, - 0xba, 0x01, 0x16, 0xc4, 0xdf, 0x0f, 0x22, 0xe7, 0x5e, 0x6f, 0x61, 0x37, 0xc3, 0x62, 0x14, 0xd5, - 0x4f, 0xba, 0xab, 0x2e, 0x4e, 0x78, 0x57, 0x1d, 0xf4, 0x42, 0xfc, 0x9d, 0xce, 0x49, 0xc3, 0xb8, - 0x17, 0xe2, 0x5f, 0x75, 0x51, 0x7d, 0x46, 0x12, 0x1d, 0x54, 0x0f, 0x61, 0x26, 0x4c, 0x12, 0xf7, - 0x43, 0x52, 0x14, 0xd1, 0xfe, 0x52, 0x4f, 0xec, 0x38, 0xe1, 0x89, 0xfd, 0x72, 0x96, 0xf8, 0xcd, - 0x7e, 0x2d, 0x9d, 0x78, 0xc1, 0x30, 0x3b, 0xf9, 0x05, 0x83, 0xfc, 0x17, 0x09, 0x3c, 0x97, 0xba, - 0xbb, 0xc0, 0x8d, 0x10, 0x85, 0xbb, 0x1c, 0xa1, 0x70, 0xdf, 0x49, 0x35, 0x0c, 0xf0, 0x38, 0x33, - 0xf9, 0xc6, 0xfa, 0x8d, 0x6c, 0x37, 0xd6, 0x09, 0xa7, 0xce, 0xf1, 0x57, 0xd7, 0xcd, 0xef, 0x3d, - 0x7c, 0x54, 0x9d, 0xfa, 0xf4, 0x51, 0x75, 0xea, 0xf3, 0x47, 0xd5, 0xa9, 0x9f, 0x8f, 0xaa, 0xd2, - 0xc3, 0x51, 0x55, 0xfa, 0x74, 0x54, 0x95, 0x3e, 0x1f, 0x55, 0xa5, 0xbf, 0x8d, 0xaa, 0xd2, 0xaf, - 0xbf, 0xa8, 0x4e, 0xbd, 0xbf, 0x92, 0xf2, 0x07, 0xdf, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x5c, - 0xbc, 0x64, 0x9c, 0x13, 0x2c, 0x00, 0x00, + // 2349 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xf7, 0xf2, 0x43, 0x26, 0x87, 0x96, 0x64, 0x8f, 0x54, 0x89, 0xb1, 0x5b, 0xd2, 0xd8, 0x18, + 0x8e, 0x12, 0xdb, 0xa4, 0xad, 0x7c, 0x20, 0xb1, 0xdb, 0xb8, 0xa2, 0x94, 0xda, 0x0e, 0xf4, 0xc1, + 0x0c, 0x2d, 0x05, 0x0d, 0xfa, 0xe1, 0x11, 0x39, 0xa6, 0x36, 0x5a, 0xee, 0x2e, 0x76, 0x87, 0x8c, + 0x89, 0x5e, 0x7a, 0x2d, 0x50, 0xa0, 0xed, 0xb5, 0xff, 0x44, 0xd1, 0x4b, 0x51, 0x34, 0xe8, 0xa5, + 0x08, 0x02, 0x1f, 0x83, 0x5e, 0x92, 0x13, 0x51, 0x33, 0xa7, 0xa2, 0xe8, 0xad, 0xbd, 0x18, 0x28, + 0x50, 0xcc, 0xec, 0xec, 0xf7, 0xae, 0xb9, 0x54, 0x6c, 0xe5, 0x03, 0xb9, 0x71, 0xe7, 0xbd, 0xf7, + 0x9b, 0xf7, 0x66, 0xde, 0x9b, 0xf7, 0xdb, 0x59, 0x82, 0x1f, 0x1e, 0xbe, 0x6e, 0xd5, 0x14, 0xbd, + 0x7e, 0xd8, 0xdf, 0x27, 0xa6, 0x46, 0x28, 0xb1, 0xea, 0x03, 0xa2, 0x75, 0x74, 0xb3, 0x2e, 0x04, + 0xd8, 0x50, 0xea, 0xd8, 0x30, 0xac, 0xfa, 0xe0, 0xda, 0x3e, 0xa1, 0x78, 0xb5, 0xde, 0x25, 0x1a, + 0x31, 0x31, 0x25, 0x9d, 0x9a, 0x61, 0xea, 0x54, 0x87, 0xcb, 0xb6, 0x62, 0x0d, 0x1b, 0x4a, 0x8d, + 0x29, 0xd6, 0x84, 0xe2, 0xd9, 0x2b, 0x5d, 0x85, 0x1e, 0xf4, 0xf7, 0x6b, 0x6d, 0xbd, 0x57, 0xef, + 0xea, 0x5d, 0xbd, 0xce, 0xf5, 0xf7, 0xfb, 0xf7, 0xf9, 0x13, 0x7f, 0xe0, 0xbf, 0x6c, 0x9c, 0xb3, + 0xb2, 0x6f, 0xc2, 0xb6, 0x6e, 0x92, 0xfa, 0xe0, 0x5a, 0x78, 0xae, 0xb3, 0xaf, 0x78, 0x3a, 0x3d, + 0xdc, 0x3e, 0x50, 0x34, 0x62, 0x0e, 0xeb, 0xc6, 0x61, 0x97, 0x0d, 0x58, 0xf5, 0x1e, 0xa1, 0x38, + 0xce, 0xaa, 0x9e, 0x64, 0x65, 0xf6, 0x35, 0xaa, 0xf4, 0x48, 0xc4, 0xe0, 0xb5, 0x49, 0x06, 0x56, + 0xfb, 0x80, 0xf4, 0x70, 0xc4, 0xee, 0xe5, 0x24, 0xbb, 0x3e, 0x55, 0xd4, 0xba, 0xa2, 0x51, 0x8b, + 0x9a, 0x61, 0x23, 0xf9, 0xbf, 0x12, 0x80, 0xeb, 0xba, 0x46, 0x4d, 0x5d, 0x55, 0x89, 0x89, 0xc8, + 0x40, 0xb1, 0x14, 0x5d, 0x83, 0xf7, 0x40, 0x81, 0xc5, 0xd3, 0xc1, 0x14, 0x97, 0xa5, 0xf3, 0xd2, + 0x4a, 0x69, 0xf5, 0x6a, 0xcd, 0x5b, 0x69, 0x17, 0xbe, 0x66, 0x1c, 0x76, 0xd9, 0x80, 0x55, 0x63, + 0xda, 0xb5, 0xc1, 0xb5, 0xda, 0xce, 0xfe, 0xfb, 0xa4, 0x4d, 0xb7, 0x08, 0xc5, 0x0d, 0xf8, 0x70, + 0x54, 0x3d, 0x31, 0x1e, 0x55, 0x81, 0x37, 0x86, 0x5c, 0x54, 0xb8, 0x03, 0x72, 0x1c, 0x3d, 0xc3, + 0xd1, 0xaf, 0x24, 0xa2, 0x8b, 0xa0, 0x6b, 0x08, 0x7f, 0xf0, 0xd6, 0x03, 0x4a, 0x34, 0xe6, 0x5e, + 0xe3, 0x94, 0x80, 0xce, 0x6d, 0x60, 0x8a, 0x11, 0x07, 0x82, 0x97, 0x41, 0xc1, 0x14, 0xee, 0x97, + 0xb3, 0xe7, 0xa5, 0x95, 0x6c, 0xe3, 0xb4, 0xd0, 0x2a, 0x38, 0x61, 0x21, 0x57, 0x43, 0x7e, 0x28, + 0x81, 0xa5, 0x68, 0xdc, 0x9b, 0x8a, 0x45, 0xe1, 0x4f, 0x22, 0xb1, 0xd7, 0xd2, 0xc5, 0xce, 0xac, + 0x79, 0xe4, 0xee, 0xc4, 0xce, 0x88, 0x2f, 0xee, 0x26, 0xc8, 0x2b, 0x94, 0xf4, 0xac, 0x72, 0xe6, + 0x7c, 0x76, 0xa5, 0xb4, 0x7a, 0xa9, 0x96, 0x90, 0xc0, 0xb5, 0xa8, 0x77, 0x8d, 0x59, 0x81, 0x9b, + 0xbf, 0xc3, 0x10, 0x90, 0x0d, 0x24, 0xff, 0x2a, 0x03, 0x8a, 0x1b, 0x98, 0xf4, 0x74, 0xad, 0x45, + 0xe8, 0x31, 0xec, 0xdc, 0x6d, 0x90, 0xb3, 0x0c, 0xd2, 0x16, 0x3b, 0x77, 0x31, 0x31, 0x00, 0xd7, + 0xa7, 0x96, 0x41, 0xda, 0xde, 0x96, 0xb1, 0x27, 0xc4, 0x11, 0x60, 0x13, 0xcc, 0x58, 0x14, 0xd3, + 0xbe, 0xc5, 0x37, 0xac, 0xb4, 0xba, 0x92, 0x02, 0x8b, 0xeb, 0x37, 0xe6, 0x04, 0xda, 0x8c, 0xfd, + 0x8c, 0x04, 0x8e, 0xfc, 0xcf, 0x0c, 0x80, 0xae, 0xee, 0xba, 0xae, 0x75, 0x14, 0xca, 0xd2, 0xf9, + 0x3a, 0xc8, 0xd1, 0xa1, 0x41, 0xf8, 0x82, 0x14, 0x1b, 0x17, 0x1d, 0x57, 0xee, 0x0e, 0x0d, 0xf2, + 0x78, 0x54, 0x5d, 0x8a, 0x5a, 0x30, 0x09, 0xe2, 0x36, 0x70, 0xd3, 0x75, 0x32, 0xc3, 0xad, 0x5f, + 0x09, 0x4e, 0xfd, 0x78, 0x54, 0x8d, 0x39, 0x3b, 0x6a, 0x2e, 0x52, 0xd0, 0x41, 0x38, 0x00, 0x50, + 0xc5, 0x16, 0xbd, 0x6b, 0x62, 0xcd, 0xb2, 0x67, 0x52, 0x7a, 0x44, 0x84, 0xff, 0x52, 0xba, 0x8d, + 0x62, 0x16, 0x8d, 0xb3, 0xc2, 0x0b, 0xb8, 0x19, 0x41, 0x43, 0x31, 0x33, 0xc0, 0x8b, 0x60, 0xc6, + 0x24, 0xd8, 0xd2, 0xb5, 0x72, 0x8e, 0x47, 0xe1, 0x2e, 0x20, 0xe2, 0xa3, 0x48, 0x48, 0xe1, 0x8b, + 0xe0, 0x64, 0x8f, 0x58, 0x16, 0xee, 0x92, 0x72, 0x9e, 0x2b, 0xce, 0x0b, 0xc5, 0x93, 0x5b, 0xf6, + 0x30, 0x72, 0xe4, 0xf2, 0x9f, 0x24, 0x30, 0xeb, 0xae, 0xdc, 0x31, 0x54, 0xce, 0xad, 0x60, 0xe5, + 0xc8, 0x93, 0x93, 0x25, 0xa1, 0x60, 0x3e, 0xca, 0xfa, 0x1c, 0x67, 0xe9, 0x08, 0x7f, 0x0a, 0x0a, + 0x16, 0x51, 0x49, 0x9b, 0xea, 0xa6, 0x70, 0xfc, 0xe5, 0x94, 0x8e, 0xe3, 0x7d, 0xa2, 0xb6, 0x84, + 0x69, 0xe3, 0x14, 0xf3, 0xdc, 0x79, 0x42, 0x2e, 0x24, 0x7c, 0x07, 0x14, 0x28, 0xe9, 0x19, 0x2a, + 0xa6, 0x44, 0x54, 0xcd, 0xf3, 0x7e, 0xe7, 0x59, 0xce, 0x30, 0xb0, 0xa6, 0xde, 0xb9, 0x2b, 0xd4, + 0x78, 0xc9, 0xb8, 0x8b, 0xe1, 0x8c, 0x22, 0x17, 0x06, 0x1a, 0x60, 0xae, 0x6f, 0x74, 0x98, 0x26, + 0x65, 0xc7, 0x79, 0x77, 0x28, 0x72, 0xe8, 0xea, 0xe4, 0x55, 0xd9, 0x0d, 0xd8, 0x35, 0x96, 0xc4, + 0x2c, 0x73, 0xc1, 0x71, 0x14, 0xc2, 0x87, 0x6b, 0x60, 0xbe, 0xa7, 0x68, 0x88, 0xe0, 0xce, 0xb0, + 0x45, 0xda, 0xba, 0xd6, 0xb1, 0x78, 0x2a, 0xe5, 0x1b, 0xcb, 0x02, 0x60, 0x7e, 0x2b, 0x28, 0x46, + 0x61, 0x7d, 0xb8, 0x09, 0x16, 0x9d, 0x03, 0xf8, 0xb6, 0x62, 0x51, 0xdd, 0x1c, 0x6e, 0x2a, 0x3d, + 0x85, 0x96, 0x67, 0x38, 0x4e, 0x79, 0x3c, 0xaa, 0x2e, 0xa2, 0x18, 0x39, 0x8a, 0xb5, 0x92, 0x7f, + 0x37, 0x03, 0xe6, 0x43, 0xe7, 0x02, 0xdc, 0x03, 0x4b, 0xed, 0xbe, 0x69, 0x12, 0x8d, 0x6e, 0xf7, + 0x7b, 0xfb, 0xc4, 0x6c, 0xb5, 0x0f, 0x48, 0xa7, 0xaf, 0x92, 0x0e, 0xdf, 0xd6, 0x7c, 0xa3, 0x22, + 0x7c, 0x5d, 0x5a, 0x8f, 0xd5, 0x42, 0x09, 0xd6, 0xf0, 0x6d, 0x00, 0x35, 0x3e, 0xb4, 0xa5, 0x58, + 0x96, 0x8b, 0x99, 0xe1, 0x98, 0x6e, 0x29, 0x6e, 0x47, 0x34, 0x50, 0x8c, 0x15, 0xf3, 0xb1, 0x43, + 0x2c, 0xc5, 0x24, 0x9d, 0xb0, 0x8f, 0xd9, 0xa0, 0x8f, 0x1b, 0xb1, 0x5a, 0x28, 0xc1, 0x1a, 0xbe, + 0x0a, 0x4a, 0xf6, 0x6c, 0x7c, 0xcd, 0xc5, 0xe6, 0x2c, 0x08, 0xb0, 0xd2, 0xb6, 0x27, 0x42, 0x7e, + 0x3d, 0x16, 0x9a, 0xbe, 0x6f, 0x11, 0x73, 0x40, 0x3a, 0xb7, 0x6c, 0x72, 0xc0, 0x3a, 0x68, 0x9e, + 0x77, 0x50, 0x37, 0xb4, 0x9d, 0x88, 0x06, 0x8a, 0xb1, 0x62, 0xa1, 0xd9, 0x59, 0x13, 0x09, 0x6d, + 0x26, 0x18, 0xda, 0x6e, 0xac, 0x16, 0x4a, 0xb0, 0x66, 0xb9, 0x67, 0xbb, 0xbc, 0x36, 0xc0, 0x8a, + 0x8a, 0xf7, 0x55, 0x52, 0x3e, 0x19, 0xcc, 0xbd, 0xed, 0xa0, 0x18, 0x85, 0xf5, 0xe1, 0x2d, 0x70, + 0xc6, 0x1e, 0xda, 0xd5, 0xb0, 0x0b, 0x52, 0xe0, 0x20, 0xcf, 0x09, 0x90, 0x33, 0xdb, 0x61, 0x05, + 0x14, 0xb5, 0x81, 0xd7, 0xc1, 0x5c, 0x5b, 0x57, 0x55, 0x9e, 0x8f, 0xeb, 0x7a, 0x5f, 0xa3, 0xe5, + 0x22, 0x47, 0x81, 0xac, 0x86, 0xd6, 0x03, 0x12, 0x14, 0xd2, 0x84, 0x3f, 0x07, 0xa0, 0xed, 0x34, + 0x06, 0xab, 0x0c, 0x26, 0x30, 0x80, 0x68, 0x5b, 0xf2, 0x3a, 0xb3, 0x3b, 0x64, 0x21, 0x1f, 0xa4, + 0xfc, 0x91, 0x04, 0x96, 0x13, 0x0a, 0x1d, 0xde, 0x0c, 0x34, 0xc1, 0x4b, 0xa1, 0x26, 0x78, 0x2e, + 0xc1, 0xcc, 0xd7, 0x09, 0x0f, 0xc0, 0x2c, 0x23, 0x24, 0x8a, 0xd6, 0xb5, 0x55, 0xc4, 0x59, 0x56, + 0x4f, 0x0c, 0x00, 0xf9, 0xb5, 0xbd, 0x53, 0xf9, 0xcc, 0x78, 0x54, 0x9d, 0x0d, 0xc8, 0x50, 0x10, + 0x58, 0xfe, 0x75, 0x06, 0x80, 0x0d, 0x62, 0xa8, 0xfa, 0xb0, 0x47, 0xb4, 0xe3, 0xe0, 0x34, 0x77, + 0x02, 0x9c, 0xe6, 0x85, 0xe4, 0x2d, 0x71, 0x9d, 0x4a, 0x24, 0x35, 0xef, 0x84, 0x48, 0xcd, 0x8b, + 0x69, 0xc0, 0x9e, 0xcc, 0x6a, 0x3e, 0xcd, 0x82, 0x05, 0x4f, 0xd9, 0xa3, 0x35, 0x37, 0x02, 0x3b, + 0xfa, 0x42, 0x68, 0x47, 0x97, 0x63, 0x4c, 0x9e, 0x19, 0xaf, 0x79, 0x1f, 0xcc, 0x31, 0xd6, 0x61, + 0xef, 0x1f, 0xe7, 0x34, 0x33, 0x53, 0x73, 0x1a, 0xb7, 0x13, 0x6d, 0x06, 0x90, 0x50, 0x08, 0x39, + 0x81, 0x43, 0x9d, 0xfc, 0x3a, 0x72, 0xa8, 0x3f, 0x4b, 0x60, 0xce, 0xdb, 0xa6, 0x63, 0x20, 0x51, + 0xb7, 0x83, 0x24, 0xea, 0xf9, 0x14, 0xc9, 0x99, 0xc0, 0xa2, 0x3e, 0xcd, 0xf9, 0x5d, 0xe7, 0x34, + 0x6a, 0x85, 0xbd, 0x82, 0x19, 0xaa, 0xd2, 0xc6, 0x96, 0xe8, 0xb7, 0xa7, 0xec, 0xd7, 0x2f, 0x7b, + 0x0c, 0xb9, 0xd2, 0x00, 0xe1, 0xca, 0x3c, 0x5b, 0xc2, 0x95, 0x7d, 0x3a, 0x84, 0xeb, 0xc7, 0xa0, + 0x60, 0x39, 0x54, 0x2b, 0xc7, 0x21, 0x2f, 0xa5, 0x2a, 0x6c, 0xc1, 0xb2, 0x5c, 0x68, 0x97, 0x5f, + 0xb9, 0x70, 0x71, 0xcc, 0x2a, 0xff, 0x65, 0x32, 0x2b, 0x96, 0xe8, 0x06, 0xee, 0x5b, 0xa4, 0xc3, + 0x8b, 0xaa, 0xe0, 0x25, 0x7a, 0x93, 0x8f, 0x22, 0x21, 0x85, 0xbb, 0x60, 0xd9, 0x30, 0xf5, 0xae, + 0x49, 0x2c, 0x6b, 0x83, 0xe0, 0x8e, 0xaa, 0x68, 0xc4, 0x09, 0xc0, 0xee, 0x89, 0xe7, 0xc6, 0xa3, + 0xea, 0x72, 0x33, 0x5e, 0x05, 0x25, 0xd9, 0xca, 0x7f, 0xcb, 0x81, 0xd3, 0xe1, 0xb3, 0x31, 0x81, + 0xa6, 0x48, 0x47, 0xa2, 0x29, 0x97, 0x7d, 0x79, 0x6a, 0x73, 0x38, 0xdf, 0x55, 0x41, 0x24, 0x57, + 0xd7, 0xc0, 0xbc, 0xa0, 0x25, 0x8e, 0x50, 0x10, 0x35, 0x77, 0x7b, 0x76, 0x83, 0x62, 0x14, 0xd6, + 0x87, 0x37, 0xc0, 0xac, 0xc9, 0x99, 0x97, 0x03, 0x60, 0xb3, 0x97, 0xef, 0x08, 0x80, 0x59, 0xe4, + 0x17, 0xa2, 0xa0, 0x2e, 0x63, 0x2e, 0x1e, 0x21, 0x71, 0x00, 0x72, 0x41, 0xe6, 0xb2, 0x16, 0x56, + 0x40, 0x51, 0x1b, 0xb8, 0x05, 0x16, 0xfa, 0x5a, 0x14, 0xca, 0xce, 0xb5, 0x73, 0x02, 0x6a, 0x61, + 0x37, 0xaa, 0x82, 0xe2, 0xec, 0xe0, 0xbd, 0x00, 0x99, 0x99, 0xe1, 0xe7, 0xc9, 0xe5, 0x14, 0x35, + 0x91, 0x9a, 0xcd, 0xc4, 0x50, 0xad, 0x42, 0x5a, 0xaa, 0x25, 0x7f, 0x28, 0x01, 0x18, 0xad, 0xc3, + 0x89, 0x37, 0x01, 0x11, 0x0b, 0x5f, 0xc7, 0x54, 0xe2, 0xf9, 0xcf, 0xd5, 0x94, 0xfc, 0xc7, 0x3b, + 0x50, 0xd3, 0x11, 0x20, 0xb1, 0xd0, 0xc7, 0x73, 0xa9, 0x93, 0x96, 0x00, 0x79, 0x4e, 0x3d, 0x05, + 0x02, 0xe4, 0x03, 0x7b, 0x32, 0x01, 0xfa, 0x57, 0x06, 0x2c, 0x78, 0xca, 0xa9, 0x09, 0x50, 0x8c, + 0xc9, 0xb7, 0x17, 0x3b, 0xe9, 0x48, 0x89, 0xb7, 0x74, 0x5f, 0x25, 0x52, 0xe2, 0x79, 0x95, 0x40, + 0x4a, 0xfe, 0x90, 0xf1, 0xbb, 0x3e, 0x25, 0x29, 0x79, 0x0a, 0x37, 0x1c, 0x5f, 0x3b, 0x5e, 0x23, + 0x7f, 0x9c, 0x05, 0xa7, 0xc3, 0x75, 0x18, 0x68, 0x90, 0xd2, 0xc4, 0x06, 0xd9, 0x04, 0x8b, 0xf7, + 0xfb, 0xaa, 0x3a, 0xe4, 0x31, 0xf8, 0xba, 0xa4, 0xdd, 0x5a, 0xbf, 0x2b, 0x2c, 0x17, 0x7f, 0x14, + 0xa3, 0x83, 0x62, 0x2d, 0xa3, 0xfd, 0x32, 0xf7, 0x45, 0xfb, 0x65, 0xfe, 0x08, 0xfd, 0x32, 0x9e, + 0x72, 0x64, 0x8f, 0x44, 0x39, 0xa6, 0x6b, 0x96, 0x31, 0x07, 0xd7, 0xc4, 0x57, 0xff, 0xb1, 0x04, + 0x96, 0xe2, 0x5f, 0xb8, 0xa1, 0x0a, 0xe6, 0x7a, 0xf8, 0x81, 0xff, 0xe2, 0x63, 0x52, 0x13, 0xe9, + 0x53, 0x45, 0xad, 0xd9, 0x9f, 0x8c, 0x6a, 0x77, 0x34, 0xba, 0x63, 0xb6, 0xa8, 0xa9, 0x68, 0x5d, + 0xbb, 0xf3, 0x6e, 0x05, 0xb0, 0x50, 0x08, 0x1b, 0xbe, 0x07, 0x0a, 0x3d, 0xfc, 0xa0, 0xd5, 0x37, + 0xbb, 0x71, 0x1d, 0x32, 0xdd, 0x3c, 0xbc, 0x00, 0xb6, 0x04, 0x0a, 0x72, 0xf1, 0xe4, 0xcf, 0x25, + 0xb0, 0x9c, 0xd0, 0x55, 0xbf, 0x41, 0x51, 0xfe, 0x55, 0x02, 0xe7, 0x03, 0x51, 0xb2, 0xb2, 0x24, + 0xf7, 0xfb, 0x2a, 0xaf, 0x50, 0xc1, 0x64, 0x2e, 0x81, 0xa2, 0x81, 0x4d, 0xaa, 0xb8, 0x3c, 0x38, + 0xdf, 0x98, 0x1d, 0x8f, 0xaa, 0xc5, 0xa6, 0x33, 0x88, 0x3c, 0x79, 0xcc, 0xda, 0x64, 0x9e, 0xdd, + 0xda, 0xc8, 0xff, 0x93, 0x40, 0xbe, 0xd5, 0xc6, 0x2a, 0x39, 0x06, 0xe2, 0xb2, 0x11, 0x20, 0x2e, + 0xc9, 0x1f, 0x05, 0xb8, 0x3f, 0x89, 0x9c, 0x65, 0x33, 0xc4, 0x59, 0x2e, 0x4c, 0xc0, 0x79, 0x32, + 0x5d, 0x79, 0x03, 0x14, 0xdd, 0xe9, 0xa6, 0x3b, 0x4b, 0xe5, 0xdf, 0x67, 0x40, 0xc9, 0x37, 0xc5, + 0x94, 0x27, 0xf1, 0xbd, 0x40, 0xfb, 0x61, 0x67, 0xcc, 0x6a, 0x9a, 0x40, 0x6a, 0x4e, 0xab, 0x79, + 0x4b, 0xa3, 0xa6, 0xff, 0x5d, 0x35, 0xda, 0x81, 0xde, 0x04, 0x73, 0x14, 0x9b, 0x5d, 0x42, 0x1d, + 0x19, 0x5f, 0xb0, 0xa2, 0x77, 0x77, 0x73, 0x37, 0x20, 0x45, 0x21, 0xed, 0xb3, 0x37, 0xc0, 0x6c, + 0x60, 0x32, 0x78, 0x1a, 0x64, 0x0f, 0xc9, 0xd0, 0x66, 0x70, 0x88, 0xfd, 0x84, 0x8b, 0x20, 0x3f, + 0xc0, 0x6a, 0xdf, 0x4e, 0xd1, 0x22, 0xb2, 0x1f, 0xae, 0x67, 0x5e, 0x97, 0xe4, 0xdf, 0xb0, 0xc5, + 0xf1, 0x4a, 0xe1, 0x18, 0xb2, 0xeb, 0xed, 0x40, 0x76, 0x25, 0x7f, 0x9f, 0xf4, 0x17, 0x68, 0x52, + 0x8e, 0xa1, 0x50, 0x8e, 0xbd, 0x94, 0x0a, 0xed, 0xc9, 0x99, 0xf6, 0xef, 0x0c, 0x58, 0xf4, 0x69, + 0x7b, 0xcc, 0xf8, 0xfb, 0x01, 0x66, 0xbc, 0x12, 0x62, 0xc6, 0xe5, 0x38, 0x9b, 0x6f, 0xa9, 0xf1, + 0x64, 0x6a, 0xfc, 0x17, 0x09, 0xcc, 0xfb, 0xd6, 0xee, 0x18, 0xb8, 0xf1, 0x9d, 0x20, 0x37, 0xbe, + 0x90, 0x26, 0x69, 0x12, 0xc8, 0xf1, 0x1e, 0x58, 0xf0, 0x29, 0xed, 0x98, 0x1d, 0x45, 0xc3, 0xaa, + 0x05, 0x6f, 0x82, 0x05, 0x71, 0x80, 0xb4, 0x28, 0x36, 0x9d, 0x71, 0xa7, 0xa5, 0x38, 0x48, 0x5c, + 0x86, 0xe2, 0x34, 0xe5, 0xff, 0x48, 0xa0, 0xee, 0x03, 0x6e, 0x12, 0xd3, 0x52, 0x2c, 0x4a, 0x34, + 0xba, 0xa7, 0xab, 0xfd, 0x1e, 0x59, 0x57, 0xb1, 0xd2, 0x43, 0x84, 0x0d, 0x28, 0xba, 0xd6, 0xd4, + 0x55, 0xa5, 0x3d, 0x84, 0x18, 0x94, 0x3e, 0x38, 0x20, 0xda, 0x06, 0x51, 0x09, 0x15, 0x5f, 0xe7, + 0x8a, 0x8d, 0x9b, 0xce, 0xc7, 0xaa, 0x77, 0x3d, 0xd1, 0xe3, 0x51, 0x75, 0x25, 0x0d, 0x22, 0xcf, + 0x5e, 0x3f, 0x26, 0xfc, 0x19, 0x00, 0xec, 0x91, 0x9f, 0x73, 0x1d, 0x91, 0xc8, 0x6f, 0x3a, 0xd5, + 0xfe, 0xae, 0x2b, 0x99, 0x6a, 0x02, 0x1f, 0xa2, 0xfc, 0xc7, 0x42, 0x20, 0x17, 0xbe, 0xf1, 0x37, + 0xa0, 0xbf, 0x00, 0x8b, 0x03, 0x6f, 0x75, 0x1c, 0x05, 0xc6, 0xcd, 0xb3, 0xe1, 0xb7, 0x7c, 0x17, + 0x3e, 0x6e, 0x5d, 0xbd, 0x37, 0x82, 0xbd, 0x18, 0x38, 0x14, 0x3b, 0x09, 0x7c, 0x15, 0x94, 0x18, + 0xa7, 0x56, 0xda, 0x64, 0x1b, 0xf7, 0x9c, 0x3a, 0x75, 0x3f, 0x6e, 0xb6, 0x3c, 0x11, 0xf2, 0xeb, + 0xc1, 0x03, 0xb0, 0x60, 0xe8, 0x9d, 0x2d, 0xac, 0xe1, 0x2e, 0x61, 0x24, 0xd1, 0xde, 0x4a, 0x7e, + 0x2d, 0x5a, 0x6c, 0xbc, 0xe6, 0x5c, 0x79, 0x35, 0xa3, 0x2a, 0x8f, 0x47, 0xd5, 0xe5, 0x98, 0x61, + 0x9e, 0x04, 0x71, 0x90, 0xd0, 0x8c, 0x7c, 0x90, 0xb7, 0x3f, 0x48, 0xac, 0xa6, 0x29, 0xd8, 0x23, + 0x7e, 0x92, 0x4f, 0xba, 0xf5, 0x2d, 0x1c, 0xe9, 0xd6, 0x37, 0xe6, 0xf5, 0xb7, 0x38, 0xe5, 0xeb, + 0xef, 0xc7, 0x12, 0xb8, 0x60, 0xa4, 0xa8, 0xa5, 0x32, 0xe0, 0x6b, 0x73, 0x3b, 0xcd, 0xda, 0xa4, + 0xa9, 0xcd, 0xc6, 0xca, 0x78, 0x54, 0xbd, 0x90, 0x46, 0x13, 0xa5, 0xf2, 0x0f, 0xee, 0x81, 0x82, + 0x2e, 0xce, 0xc7, 0x72, 0x89, 0xfb, 0x7a, 0x39, 0x8d, 0xaf, 0xce, 0x99, 0x6a, 0x97, 0xa5, 0xf3, + 0x84, 0x5c, 0x2c, 0xf9, 0xc3, 0x3c, 0x38, 0x13, 0xe9, 0xee, 0x5f, 0xe2, 0xdd, 0x76, 0xe4, 0x45, + 0x3b, 0x3b, 0xc5, 0x8b, 0xf6, 0x1a, 0x98, 0x17, 0x7f, 0x97, 0x08, 0xbd, 0xa7, 0xbb, 0x09, 0xb3, + 0x1e, 0x14, 0xa3, 0xb0, 0x7e, 0xdc, 0xdd, 0x7a, 0x7e, 0xca, 0xbb, 0x75, 0xbf, 0x17, 0xe2, 0xef, + 0x7f, 0x76, 0x79, 0x47, 0xbd, 0x10, 0xff, 0x02, 0x0c, 0xeb, 0x33, 0x52, 0x6b, 0xa3, 0xba, 0x08, + 0x27, 0x83, 0xa4, 0x76, 0x37, 0x20, 0x45, 0x21, 0xed, 0x2f, 0xf4, 0x97, 0x00, 0x1c, 0xf3, 0x97, + 0x80, 0x2b, 0x69, 0x72, 0x2d, 0xfd, 0x35, 0x7a, 0xec, 0x85, 0x48, 0x69, 0xfa, 0x0b, 0x11, 0xf9, + 0xef, 0x12, 0x78, 0x2e, 0xf1, 0xd4, 0x82, 0x6b, 0x01, 0xca, 0x79, 0x25, 0x44, 0x39, 0xbf, 0x97, + 0x68, 0xe8, 0xe3, 0x9d, 0x66, 0xfc, 0x0d, 0xfb, 0x1b, 0xe9, 0x6e, 0xd8, 0x63, 0xde, 0x92, 0x27, + 0x5f, 0xb5, 0x37, 0x7e, 0xf0, 0xf0, 0x51, 0xe5, 0xc4, 0x27, 0x8f, 0x2a, 0x27, 0x3e, 0x7b, 0x54, + 0x39, 0xf1, 0xcb, 0x71, 0x45, 0x7a, 0x38, 0xae, 0x48, 0x9f, 0x8c, 0x2b, 0xd2, 0x67, 0xe3, 0x8a, + 0xf4, 0x8f, 0x71, 0x45, 0xfa, 0xed, 0xe7, 0x95, 0x13, 0xef, 0x2d, 0x27, 0xfc, 0x21, 0xf9, 0xff, + 0x01, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x93, 0x41, 0x4c, 0xc3, 0x2c, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { @@ -2573,6 +2605,32 @@ func (m *StatefulSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *StatefulSetOrdinals) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StatefulSetOrdinals) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetOrdinals) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2626,6 +2684,18 @@ func (m *StatefulSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Ordinals != nil { + { + size, err := m.Ordinals.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } if m.PersistentVolumeClaimRetentionPolicy != nil { { size, err := m.PersistentVolumeClaimRetentionPolicy.MarshalToSizedBuffer(dAtA[:i]) @@ -3331,6 +3401,16 @@ func (m *StatefulSetList) Size() (n int) { return n } +func (m *StatefulSetOrdinals) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Start)) + return n +} + func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Size() (n int) { if m == nil { return 0 @@ -3379,6 +3459,10 @@ func (m *StatefulSetSpec) Size() (n int) { l = m.PersistentVolumeClaimRetentionPolicy.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Ordinals != nil { + l = m.Ordinals.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -3837,6 +3921,16 @@ func (this *StatefulSetList) String() string { }, "") return s } +func (this *StatefulSetOrdinals) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatefulSetOrdinals{`, + `Start:` + fmt.Sprintf("%v", this.Start) + `,`, + `}`, + }, "") + return s +} func (this *StatefulSetPersistentVolumeClaimRetentionPolicy) String() string { if this == nil { return "nil" @@ -3868,6 +3962,7 @@ func (this *StatefulSetSpec) String() string { `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `PersistentVolumeClaimRetentionPolicy:` + strings.Replace(this.PersistentVolumeClaimRetentionPolicy.String(), "StatefulSetPersistentVolumeClaimRetentionPolicy", "StatefulSetPersistentVolumeClaimRetentionPolicy", 1) + `,`, + `Ordinals:` + strings.Replace(this.Ordinals.String(), "StatefulSetOrdinals", "StatefulSetOrdinals", 1) + `,`, `}`, }, "") return s @@ -8393,6 +8488,75 @@ func (m *StatefulSetList) Unmarshal(dAtA []byte) error { } return nil } +func (m *StatefulSetOrdinals) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatefulSetOrdinals: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatefulSetOrdinals: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *StatefulSetPersistentVolumeClaimRetentionPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -8831,6 +8995,42 @@ func (m *StatefulSetSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ordinals", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Ordinals == nil { + m.Ordinals = &StatefulSetOrdinals{} + } + if err := m.Ordinals.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.proto b/staging/src/k8s.io/api/apps/v1beta2/generated.proto index 2851ee7a367..eaf66989145 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.proto @@ -667,6 +667,17 @@ message StatefulSetList { repeated StatefulSet items = 2; } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +message StatefulSetOrdinals { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + optional int32 replicaStartOrdinal = 1; +} + // StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs // created from the StatefulSet VolumeClaimTemplates. message StatefulSetPersistentVolumeClaimRetentionPolicy { @@ -755,6 +766,14 @@ message StatefulSetSpec { // StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. // +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + optional StatefulSetOrdinals ordinals = 11; } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1beta2/types.go b/staging/src/k8s.io/api/apps/v1beta2/types.go index 31a2966fd97..fc84f7c9b4c 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types.go @@ -214,6 +214,17 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { WhenScaled PersistentVolumeClaimRetentionPolicyType `json:"whenScaled,omitempty" protobuf:"bytes,2,opt,name=whenScaled,casttype=PersistentVolumeClaimRetentionPolicyType"` } +// StatefulSetOrdinals describes the policy used for replica ordinal assignment +// in this StatefulSet. +type StatefulSetOrdinals struct { + // Start is the number representing the first index that is used to represent + // replica ordinals. Defaults to 0. + // If set, replica ordinals will be numbered + // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // +optional + Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` +} + // A StatefulSetSpec is the specification of a StatefulSet. type StatefulSetSpec struct { // replicas is the desired number of replicas of the given Template. @@ -285,6 +296,14 @@ type StatefulSetSpec struct { // StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` + + // Ordinals controls how the stateful set creates pod and persistent volume + // claim names. + // The default behavior assigns a number starting with zero and incremented by + // one for each additional replica requested. This requires the + // StatefulSetSlice feature gate to be enabled, which is alpha. + // +optional + Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } // StatefulSetStatus represents the current state of a StatefulSet. diff --git a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go index a91409e3cf7..3019357e111 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go @@ -352,6 +352,15 @@ func (StatefulSetList) SwaggerDoc() map[string]string { return map_StatefulSetList } +var map_StatefulSetOrdinals = map[string]string{ + "": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", + "start": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", +} + +func (StatefulSetOrdinals) SwaggerDoc() map[string]string { + return map_StatefulSetOrdinals +} + var map_StatefulSetPersistentVolumeClaimRetentionPolicy = map[string]string{ "": "StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates.", "whenDeleted": "WhenDeleted specifies what happens to PVCs created from StatefulSet VolumeClaimTemplates when the StatefulSet is deleted. The default policy of `Retain` causes PVCs to not be affected by StatefulSet deletion. The `Delete` policy causes those PVCs to be deleted.", @@ -374,6 +383,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha.", + "ordinals": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go b/staging/src/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go index 118fd38093d..cd92792db56 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go @@ -760,6 +760,22 @@ func (in *StatefulSetList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatefulSetOrdinals) DeepCopyInto(out *StatefulSetOrdinals) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetOrdinals. +func (in *StatefulSetOrdinals) DeepCopy() *StatefulSetOrdinals { + if in == nil { + return nil + } + out := new(StatefulSetOrdinals) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StatefulSetPersistentVolumeClaimRetentionPolicy) DeepCopyInto(out *StatefulSetPersistentVolumeClaimRetentionPolicy) { *out = *in @@ -808,6 +824,11 @@ func (in *StatefulSetSpec) DeepCopyInto(out *StatefulSetSpec) { *out = new(StatefulSetPersistentVolumeClaimRetentionPolicy) **out = **in } + if in.Ordinals != nil { + in, out := &in.Ordinals, &out.Ordinals + *out = new(StatefulSetOrdinals) + **out = **in + } return } diff --git a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetordinals.go b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetordinals.go new file mode 100644 index 00000000000..9778f1c4a04 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetordinals.go @@ -0,0 +1,39 @@ +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// StatefulSetOrdinalsApplyConfiguration represents an declarative configuration of the StatefulSetOrdinals type for use +// with apply. +type StatefulSetOrdinalsApplyConfiguration struct { + Start *int32 `json:"start,omitempty"` +} + +// StatefulSetOrdinalsApplyConfiguration constructs an declarative configuration of the StatefulSetOrdinals type for use with +// apply. +func StatefulSetOrdinals() *StatefulSetOrdinalsApplyConfiguration { + return &StatefulSetOrdinalsApplyConfiguration{} +} + +// WithStart sets the Start field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Start field is set to the value of the last call. +func (b *StatefulSetOrdinalsApplyConfiguration) WithStart(value int32) *StatefulSetOrdinalsApplyConfiguration { + b.Start = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetspec.go b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetspec.go index ee0ed40a569..81afdca5960 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetspec.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1/statefulsetspec.go @@ -37,6 +37,7 @@ type StatefulSetSpecApplyConfiguration struct { RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` MinReadySeconds *int32 `json:"minReadySeconds,omitempty"` PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicyApplyConfiguration `json:"persistentVolumeClaimRetentionPolicy,omitempty"` + Ordinals *StatefulSetOrdinalsApplyConfiguration `json:"ordinals,omitempty"` } // StatefulSetSpecApplyConfiguration constructs an declarative configuration of the StatefulSetSpec type for use with @@ -129,3 +130,11 @@ func (b *StatefulSetSpecApplyConfiguration) WithPersistentVolumeClaimRetentionPo b.PersistentVolumeClaimRetentionPolicy = value return b } + +// WithOrdinals sets the Ordinals field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Ordinals field is set to the value of the last call. +func (b *StatefulSetSpecApplyConfiguration) WithOrdinals(value *StatefulSetOrdinalsApplyConfiguration) *StatefulSetSpecApplyConfiguration { + b.Ordinals = value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetordinals.go b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetordinals.go new file mode 100644 index 00000000000..8f349a2d27c --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetordinals.go @@ -0,0 +1,39 @@ +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// StatefulSetOrdinalsApplyConfiguration represents an declarative configuration of the StatefulSetOrdinals type for use +// with apply. +type StatefulSetOrdinalsApplyConfiguration struct { + Start *int32 `json:"start,omitempty"` +} + +// StatefulSetOrdinalsApplyConfiguration constructs an declarative configuration of the StatefulSetOrdinals type for use with +// apply. +func StatefulSetOrdinals() *StatefulSetOrdinalsApplyConfiguration { + return &StatefulSetOrdinalsApplyConfiguration{} +} + +// WithStart sets the Start field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Start field is set to the value of the last call. +func (b *StatefulSetOrdinalsApplyConfiguration) WithStart(value int32) *StatefulSetOrdinalsApplyConfiguration { + b.Start = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetspec.go b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetspec.go index 886433d9ea3..1eb1ba7b039 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetspec.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta1/statefulsetspec.go @@ -37,6 +37,7 @@ type StatefulSetSpecApplyConfiguration struct { RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` MinReadySeconds *int32 `json:"minReadySeconds,omitempty"` PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicyApplyConfiguration `json:"persistentVolumeClaimRetentionPolicy,omitempty"` + Ordinals *StatefulSetOrdinalsApplyConfiguration `json:"ordinals,omitempty"` } // StatefulSetSpecApplyConfiguration constructs an declarative configuration of the StatefulSetSpec type for use with @@ -129,3 +130,11 @@ func (b *StatefulSetSpecApplyConfiguration) WithPersistentVolumeClaimRetentionPo b.PersistentVolumeClaimRetentionPolicy = value return b } + +// WithOrdinals sets the Ordinals field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Ordinals field is set to the value of the last call. +func (b *StatefulSetSpecApplyConfiguration) WithOrdinals(value *StatefulSetOrdinalsApplyConfiguration) *StatefulSetSpecApplyConfiguration { + b.Ordinals = value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetordinals.go b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetordinals.go new file mode 100644 index 00000000000..c586da775ce --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetordinals.go @@ -0,0 +1,39 @@ +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta2 + +// StatefulSetOrdinalsApplyConfiguration represents an declarative configuration of the StatefulSetOrdinals type for use +// with apply. +type StatefulSetOrdinalsApplyConfiguration struct { + Start *int32 `json:"start,omitempty"` +} + +// StatefulSetOrdinalsApplyConfiguration constructs an declarative configuration of the StatefulSetOrdinals type for use with +// apply. +func StatefulSetOrdinals() *StatefulSetOrdinalsApplyConfiguration { + return &StatefulSetOrdinalsApplyConfiguration{} +} + +// WithStart sets the Start field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Start field is set to the value of the last call. +func (b *StatefulSetOrdinalsApplyConfiguration) WithStart(value int32) *StatefulSetOrdinalsApplyConfiguration { + b.Start = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetspec.go b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetspec.go index 08922cea576..b6165fbd9a2 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetspec.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/apps/v1beta2/statefulsetspec.go @@ -37,6 +37,7 @@ type StatefulSetSpecApplyConfiguration struct { RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` MinReadySeconds *int32 `json:"minReadySeconds,omitempty"` PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicyApplyConfiguration `json:"persistentVolumeClaimRetentionPolicy,omitempty"` + Ordinals *StatefulSetOrdinalsApplyConfiguration `json:"ordinals,omitempty"` } // StatefulSetSpecApplyConfiguration constructs an declarative configuration of the StatefulSetSpec type for use with @@ -129,3 +130,11 @@ func (b *StatefulSetSpecApplyConfiguration) WithPersistentVolumeClaimRetentionPo b.PersistentVolumeClaimRetentionPolicy = value return b } + +// WithOrdinals sets the Ordinals field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Ordinals field is set to the value of the last call. +func (b *StatefulSetSpecApplyConfiguration) WithOrdinals(value *StatefulSetOrdinalsApplyConfiguration) *StatefulSetSpecApplyConfiguration { + b.Ordinals = value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go index 575e49ddbe7..2d9567051ec 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -1039,6 +1039,13 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.apps.v1.StatefulSetOrdinals + map: + fields: + - name: start + type: + scalar: numeric + default: 0 - name: io.k8s.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy map: fields: @@ -1054,6 +1061,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: minReadySeconds type: scalar: numeric + - name: ordinals + type: + namedType: io.k8s.api.apps.v1.StatefulSetOrdinals - name: persistentVolumeClaimRetentionPolicy type: namedType: io.k8s.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy @@ -1342,6 +1352,13 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.apps.v1beta1.StatefulSetOrdinals + map: + fields: + - name: start + type: + scalar: numeric + default: 0 - name: io.k8s.api.apps.v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy map: fields: @@ -1357,6 +1374,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: minReadySeconds type: scalar: numeric + - name: ordinals + type: + namedType: io.k8s.api.apps.v1beta1.StatefulSetOrdinals - name: persistentVolumeClaimRetentionPolicy type: namedType: io.k8s.api.apps.v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy @@ -1843,6 +1863,13 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.apps.v1beta2.StatefulSetOrdinals + map: + fields: + - name: start + type: + scalar: numeric + default: 0 - name: io.k8s.api.apps.v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy map: fields: @@ -1858,6 +1885,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: minReadySeconds type: scalar: numeric + - name: ordinals + type: + namedType: io.k8s.api.apps.v1beta2.StatefulSetOrdinals - name: persistentVolumeClaimRetentionPolicy type: namedType: io.k8s.api.apps.v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy diff --git a/staging/src/k8s.io/client-go/applyconfigurations/utils.go b/staging/src/k8s.io/client-go/applyconfigurations/utils.go index 88250757d0d..1acc51af314 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/utils.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/utils.go @@ -211,6 +211,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsappsv1.StatefulSetApplyConfiguration{} case appsv1.SchemeGroupVersion.WithKind("StatefulSetCondition"): return &applyconfigurationsappsv1.StatefulSetConditionApplyConfiguration{} + case appsv1.SchemeGroupVersion.WithKind("StatefulSetOrdinals"): + return &applyconfigurationsappsv1.StatefulSetOrdinalsApplyConfiguration{} case appsv1.SchemeGroupVersion.WithKind("StatefulSetPersistentVolumeClaimRetentionPolicy"): return &applyconfigurationsappsv1.StatefulSetPersistentVolumeClaimRetentionPolicyApplyConfiguration{} case appsv1.SchemeGroupVersion.WithKind("StatefulSetSpec"): @@ -243,6 +245,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsappsv1beta1.StatefulSetApplyConfiguration{} case appsv1beta1.SchemeGroupVersion.WithKind("StatefulSetCondition"): return &applyconfigurationsappsv1beta1.StatefulSetConditionApplyConfiguration{} + case appsv1beta1.SchemeGroupVersion.WithKind("StatefulSetOrdinals"): + return &applyconfigurationsappsv1beta1.StatefulSetOrdinalsApplyConfiguration{} case appsv1beta1.SchemeGroupVersion.WithKind("StatefulSetPersistentVolumeClaimRetentionPolicy"): return &applyconfigurationsappsv1beta1.StatefulSetPersistentVolumeClaimRetentionPolicyApplyConfiguration{} case appsv1beta1.SchemeGroupVersion.WithKind("StatefulSetSpec"): @@ -295,6 +299,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &appsv1beta2.StatefulSetApplyConfiguration{} case v1beta2.SchemeGroupVersion.WithKind("StatefulSetCondition"): return &appsv1beta2.StatefulSetConditionApplyConfiguration{} + case v1beta2.SchemeGroupVersion.WithKind("StatefulSetOrdinals"): + return &appsv1beta2.StatefulSetOrdinalsApplyConfiguration{} case v1beta2.SchemeGroupVersion.WithKind("StatefulSetPersistentVolumeClaimRetentionPolicy"): return &appsv1beta2.StatefulSetPersistentVolumeClaimRetentionPolicyApplyConfiguration{} case v1beta2.SchemeGroupVersion.WithKind("StatefulSetSpec"): From af58b491ef15830c45039d76c552d1bc772df6bd Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Mon, 10 Oct 2022 18:02:14 -0700 Subject: [PATCH 2/7] Update generated protobuf files --- pkg/apis/apps/v1/zz_generated.conversion.go | 34 ++- .../apps/v1beta1/zz_generated.conversion.go | 34 ++- .../apps/v1beta2/zz_generated.conversion.go | 34 ++- pkg/apis/apps/zz_generated.deepcopy.go | 21 ++ .../src/k8s.io/api/apps/v1/generated.pb.go | 266 ++++++++-------- .../src/k8s.io/api/apps/v1/generated.proto | 2 +- .../k8s.io/api/apps/v1beta1/generated.pb.go | 202 ++++++------ .../k8s.io/api/apps/v1beta1/generated.proto | 2 +- .../k8s.io/api/apps/v1beta2/generated.pb.go | 288 +++++++++--------- .../k8s.io/api/apps/v1beta2/generated.proto | 2 +- 10 files changed, 498 insertions(+), 387 deletions(-) diff --git a/pkg/apis/apps/v1/zz_generated.conversion.go b/pkg/apis/apps/v1/zz_generated.conversion.go index e77da8f6ed3..7783bd26113 100644 --- a/pkg/apis/apps/v1/zz_generated.conversion.go +++ b/pkg/apis/apps/v1/zz_generated.conversion.go @@ -262,6 +262,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.StatefulSetOrdinals)(nil), (*apps.StatefulSetOrdinals)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(a.(*v1.StatefulSetOrdinals), b.(*apps.StatefulSetOrdinals), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apps.StatefulSetOrdinals)(nil), (*v1.StatefulSetOrdinals)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apps_StatefulSetOrdinals_To_v1_StatefulSetOrdinals(a.(*apps.StatefulSetOrdinals), b.(*v1.StatefulSetOrdinals), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_StatefulSetPersistentVolumeClaimRetentionPolicy_To_apps_StatefulSetPersistentVolumeClaimRetentionPolicy(a.(*v1.StatefulSetPersistentVolumeClaimRetentionPolicy), b.(*apps.StatefulSetPersistentVolumeClaimRetentionPolicy), scope) }); err != nil { @@ -1167,6 +1177,26 @@ func Convert_apps_StatefulSetList_To_v1_StatefulSetList(in *apps.StatefulSetList return autoConvert_apps_StatefulSetList_To_v1_StatefulSetList(in, out, s) } +func autoConvert_v1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in *v1.StatefulSetOrdinals, out *apps.StatefulSetOrdinals, s conversion.Scope) error { + out.Start = in.Start + return nil +} + +// Convert_v1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals is an autogenerated conversion function. +func Convert_v1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in *v1.StatefulSetOrdinals, out *apps.StatefulSetOrdinals, s conversion.Scope) error { + return autoConvert_v1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in, out, s) +} + +func autoConvert_apps_StatefulSetOrdinals_To_v1_StatefulSetOrdinals(in *apps.StatefulSetOrdinals, out *v1.StatefulSetOrdinals, s conversion.Scope) error { + out.Start = in.Start + return nil +} + +// Convert_apps_StatefulSetOrdinals_To_v1_StatefulSetOrdinals is an autogenerated conversion function. +func Convert_apps_StatefulSetOrdinals_To_v1_StatefulSetOrdinals(in *apps.StatefulSetOrdinals, out *v1.StatefulSetOrdinals, s conversion.Scope) error { + return autoConvert_apps_StatefulSetOrdinals_To_v1_StatefulSetOrdinals(in, out, s) +} + func autoConvert_v1_StatefulSetPersistentVolumeClaimRetentionPolicy_To_apps_StatefulSetPersistentVolumeClaimRetentionPolicy(in *v1.StatefulSetPersistentVolumeClaimRetentionPolicy, out *apps.StatefulSetPersistentVolumeClaimRetentionPolicy, s conversion.Scope) error { out.WhenDeleted = apps.PersistentVolumeClaimRetentionPolicyType(in.WhenDeleted) out.WhenScaled = apps.PersistentVolumeClaimRetentionPolicyType(in.WhenScaled) @@ -1206,7 +1236,7 @@ func autoConvert_v1_StatefulSetSpec_To_apps_StatefulSetSpec(in *v1.StatefulSetSp out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) - // WARNING: in.Ordinals requires manual conversion: does not exist in peer-type + out.Ordinals = (*apps.StatefulSetOrdinals)(unsafe.Pointer(in.Ordinals)) return nil } @@ -1227,7 +1257,7 @@ func autoConvert_apps_StatefulSetSpec_To_v1_StatefulSetSpec(in *apps.StatefulSet out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*v1.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) - // WARNING: in.ReplicaStartOrdinal requires manual conversion: does not exist in peer-type + out.Ordinals = (*v1.StatefulSetOrdinals)(unsafe.Pointer(in.Ordinals)) return nil } diff --git a/pkg/apis/apps/v1beta1/zz_generated.conversion.go b/pkg/apis/apps/v1beta1/zz_generated.conversion.go index ea937f6f96c..cbbda226aeb 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/apps/v1beta1/zz_generated.conversion.go @@ -213,6 +213,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1beta1.StatefulSetOrdinals)(nil), (*apps.StatefulSetOrdinals)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(a.(*v1beta1.StatefulSetOrdinals), b.(*apps.StatefulSetOrdinals), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apps.StatefulSetOrdinals)(nil), (*v1beta1.StatefulSetOrdinals)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apps_StatefulSetOrdinals_To_v1beta1_StatefulSetOrdinals(a.(*apps.StatefulSetOrdinals), b.(*v1beta1.StatefulSetOrdinals), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_StatefulSetPersistentVolumeClaimRetentionPolicy_To_apps_StatefulSetPersistentVolumeClaimRetentionPolicy(a.(*v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy), b.(*apps.StatefulSetPersistentVolumeClaimRetentionPolicy), scope) }); err != nil { @@ -831,6 +841,26 @@ func Convert_apps_StatefulSetList_To_v1beta1_StatefulSetList(in *apps.StatefulSe return autoConvert_apps_StatefulSetList_To_v1beta1_StatefulSetList(in, out, s) } +func autoConvert_v1beta1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in *v1beta1.StatefulSetOrdinals, out *apps.StatefulSetOrdinals, s conversion.Scope) error { + out.Start = in.Start + return nil +} + +// Convert_v1beta1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals is an autogenerated conversion function. +func Convert_v1beta1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in *v1beta1.StatefulSetOrdinals, out *apps.StatefulSetOrdinals, s conversion.Scope) error { + return autoConvert_v1beta1_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in, out, s) +} + +func autoConvert_apps_StatefulSetOrdinals_To_v1beta1_StatefulSetOrdinals(in *apps.StatefulSetOrdinals, out *v1beta1.StatefulSetOrdinals, s conversion.Scope) error { + out.Start = in.Start + return nil +} + +// Convert_apps_StatefulSetOrdinals_To_v1beta1_StatefulSetOrdinals is an autogenerated conversion function. +func Convert_apps_StatefulSetOrdinals_To_v1beta1_StatefulSetOrdinals(in *apps.StatefulSetOrdinals, out *v1beta1.StatefulSetOrdinals, s conversion.Scope) error { + return autoConvert_apps_StatefulSetOrdinals_To_v1beta1_StatefulSetOrdinals(in, out, s) +} + func autoConvert_v1beta1_StatefulSetPersistentVolumeClaimRetentionPolicy_To_apps_StatefulSetPersistentVolumeClaimRetentionPolicy(in *v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy, out *apps.StatefulSetPersistentVolumeClaimRetentionPolicy, s conversion.Scope) error { out.WhenDeleted = apps.PersistentVolumeClaimRetentionPolicyType(in.WhenDeleted) out.WhenScaled = apps.PersistentVolumeClaimRetentionPolicyType(in.WhenScaled) @@ -870,7 +900,7 @@ func autoConvert_v1beta1_StatefulSetSpec_To_apps_StatefulSetSpec(in *v1beta1.Sta out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) - // WARNING: in.Ordinals requires manual conversion: does not exist in peer-type + out.Ordinals = (*apps.StatefulSetOrdinals)(unsafe.Pointer(in.Ordinals)) return nil } @@ -891,7 +921,7 @@ func autoConvert_apps_StatefulSetSpec_To_v1beta1_StatefulSetSpec(in *apps.Statef out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*v1beta1.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) - // WARNING: in.ReplicaStartOrdinal requires manual conversion: does not exist in peer-type + out.Ordinals = (*v1beta1.StatefulSetOrdinals)(unsafe.Pointer(in.Ordinals)) return nil } diff --git a/pkg/apis/apps/v1beta2/zz_generated.conversion.go b/pkg/apis/apps/v1beta2/zz_generated.conversion.go index 6d1aa2b4ee3..884bb3f0b1a 100644 --- a/pkg/apis/apps/v1beta2/zz_generated.conversion.go +++ b/pkg/apis/apps/v1beta2/zz_generated.conversion.go @@ -283,6 +283,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1beta2.StatefulSetOrdinals)(nil), (*apps.StatefulSetOrdinals)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(a.(*v1beta2.StatefulSetOrdinals), b.(*apps.StatefulSetOrdinals), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apps.StatefulSetOrdinals)(nil), (*v1beta2.StatefulSetOrdinals)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apps_StatefulSetOrdinals_To_v1beta2_StatefulSetOrdinals(a.(*apps.StatefulSetOrdinals), b.(*v1beta2.StatefulSetOrdinals), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_StatefulSetPersistentVolumeClaimRetentionPolicy_To_apps_StatefulSetPersistentVolumeClaimRetentionPolicy(a.(*v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy), b.(*apps.StatefulSetPersistentVolumeClaimRetentionPolicy), scope) }); err != nil { @@ -1263,6 +1273,26 @@ func Convert_apps_StatefulSetList_To_v1beta2_StatefulSetList(in *apps.StatefulSe return autoConvert_apps_StatefulSetList_To_v1beta2_StatefulSetList(in, out, s) } +func autoConvert_v1beta2_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in *v1beta2.StatefulSetOrdinals, out *apps.StatefulSetOrdinals, s conversion.Scope) error { + out.Start = in.Start + return nil +} + +// Convert_v1beta2_StatefulSetOrdinals_To_apps_StatefulSetOrdinals is an autogenerated conversion function. +func Convert_v1beta2_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in *v1beta2.StatefulSetOrdinals, out *apps.StatefulSetOrdinals, s conversion.Scope) error { + return autoConvert_v1beta2_StatefulSetOrdinals_To_apps_StatefulSetOrdinals(in, out, s) +} + +func autoConvert_apps_StatefulSetOrdinals_To_v1beta2_StatefulSetOrdinals(in *apps.StatefulSetOrdinals, out *v1beta2.StatefulSetOrdinals, s conversion.Scope) error { + out.Start = in.Start + return nil +} + +// Convert_apps_StatefulSetOrdinals_To_v1beta2_StatefulSetOrdinals is an autogenerated conversion function. +func Convert_apps_StatefulSetOrdinals_To_v1beta2_StatefulSetOrdinals(in *apps.StatefulSetOrdinals, out *v1beta2.StatefulSetOrdinals, s conversion.Scope) error { + return autoConvert_apps_StatefulSetOrdinals_To_v1beta2_StatefulSetOrdinals(in, out, s) +} + func autoConvert_v1beta2_StatefulSetPersistentVolumeClaimRetentionPolicy_To_apps_StatefulSetPersistentVolumeClaimRetentionPolicy(in *v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy, out *apps.StatefulSetPersistentVolumeClaimRetentionPolicy, s conversion.Scope) error { out.WhenDeleted = apps.PersistentVolumeClaimRetentionPolicyType(in.WhenDeleted) out.WhenScaled = apps.PersistentVolumeClaimRetentionPolicyType(in.WhenScaled) @@ -1302,7 +1332,7 @@ func autoConvert_v1beta2_StatefulSetSpec_To_apps_StatefulSetSpec(in *v1beta2.Sta out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*apps.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) - // WARNING: in.Ordinals requires manual conversion: does not exist in peer-type + out.Ordinals = (*apps.StatefulSetOrdinals)(unsafe.Pointer(in.Ordinals)) return nil } @@ -1323,7 +1353,7 @@ func autoConvert_apps_StatefulSetSpec_To_v1beta2_StatefulSetSpec(in *apps.Statef out.RevisionHistoryLimit = (*int32)(unsafe.Pointer(in.RevisionHistoryLimit)) out.MinReadySeconds = in.MinReadySeconds out.PersistentVolumeClaimRetentionPolicy = (*v1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy)(unsafe.Pointer(in.PersistentVolumeClaimRetentionPolicy)) - // WARNING: in.ReplicaStartOrdinal requires manual conversion: does not exist in peer-type + out.Ordinals = (*v1beta2.StatefulSetOrdinals)(unsafe.Pointer(in.Ordinals)) return nil } diff --git a/pkg/apis/apps/zz_generated.deepcopy.go b/pkg/apis/apps/zz_generated.deepcopy.go index 011086ca23a..3353f125077 100644 --- a/pkg/apis/apps/zz_generated.deepcopy.go +++ b/pkg/apis/apps/zz_generated.deepcopy.go @@ -718,6 +718,22 @@ func (in *StatefulSetList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatefulSetOrdinals) DeepCopyInto(out *StatefulSetOrdinals) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatefulSetOrdinals. +func (in *StatefulSetOrdinals) DeepCopy() *StatefulSetOrdinals { + if in == nil { + return nil + } + out := new(StatefulSetOrdinals) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StatefulSetPersistentVolumeClaimRetentionPolicy) DeepCopyInto(out *StatefulSetPersistentVolumeClaimRetentionPolicy) { *out = *in @@ -761,6 +777,11 @@ func (in *StatefulSetSpec) DeepCopyInto(out *StatefulSetSpec) { *out = new(StatefulSetPersistentVolumeClaimRetentionPolicy) **out = **in } + if in.Ordinals != nil { + in, out := &in.Ordinals, &out.Ordinals + *out = new(StatefulSetOrdinals) + **out = **in + } return } diff --git a/staging/src/k8s.io/api/apps/v1/generated.pb.go b/staging/src/k8s.io/api/apps/v1/generated.pb.go index 3da63d229bf..84a7af5994f 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.pb.go +++ b/staging/src/k8s.io/api/apps/v1/generated.pb.go @@ -928,146 +928,146 @@ func init() { } var fileDescriptor_e1014cab6f31e43b = []byte{ - // 2213 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x6f, 0x1b, 0xc7, - 0x19, 0xd7, 0xf2, 0x21, 0x51, 0x43, 0x4b, 0xb2, 0x47, 0xaa, 0xc4, 0xd8, 0x0d, 0xe9, 0x6e, 0x5d, - 0x5b, 0x89, 0x63, 0xb2, 0x76, 0x9c, 0x20, 0x88, 0x8b, 0x18, 0x22, 0x95, 0xa6, 0x69, 0xf4, 0xea, - 0xd0, 0x72, 0x00, 0x37, 0x2d, 0x3a, 0x22, 0xc7, 0xd4, 0x46, 0xfb, 0xc2, 0xee, 0x50, 0x31, 0xd1, - 0x4b, 0x51, 0xa0, 0xb7, 0x1e, 0xfa, 0x37, 0xf4, 0x1f, 0x28, 0x8a, 0xa2, 0xb9, 0x05, 0x41, 0xd0, - 0x8b, 0x2f, 0x05, 0x82, 0x5e, 0x9a, 0x13, 0x51, 0x33, 0xa7, 0xa2, 0xe8, 0xad, 0xbd, 0xf8, 0xd2, - 0x62, 0x66, 0x67, 0xdf, 0xb3, 0x22, 0x25, 0xc7, 0xca, 0x03, 0xbe, 0x71, 0x67, 0x7e, 0xdf, 0x6f, - 0xbf, 0x99, 0xf9, 0xbe, 0xf9, 0x7e, 0x33, 0x4b, 0x70, 0xeb, 0xe0, 0x35, 0xb7, 0xae, 0x59, 0x8d, - 0x83, 0xfe, 0x1e, 0x71, 0x4c, 0x42, 0x89, 0xdb, 0x38, 0x24, 0x66, 0xd7, 0x72, 0x1a, 0xa2, 0x03, - 0xdb, 0x5a, 0x03, 0xdb, 0xb6, 0xdb, 0x38, 0xbc, 0xde, 0xe8, 0x11, 0x93, 0x38, 0x98, 0x92, 0x6e, - 0xdd, 0x76, 0x2c, 0x6a, 0x41, 0xe8, 0x61, 0xea, 0xd8, 0xd6, 0xea, 0x0c, 0x53, 0x3f, 0xbc, 0x7e, - 0xfe, 0x5a, 0x4f, 0xa3, 0xfb, 0xfd, 0xbd, 0x7a, 0xc7, 0x32, 0x1a, 0x3d, 0xab, 0x67, 0x35, 0x38, - 0x74, 0xaf, 0x7f, 0x9f, 0x3f, 0xf1, 0x07, 0xfe, 0xcb, 0xa3, 0x38, 0xaf, 0x46, 0x5e, 0xd3, 0xb1, - 0x1c, 0x22, 0x79, 0xcd, 0xf9, 0x9b, 0x21, 0xc6, 0xc0, 0x9d, 0x7d, 0xcd, 0x24, 0xce, 0xa0, 0x61, - 0x1f, 0xf4, 0x58, 0x83, 0xdb, 0x30, 0x08, 0xc5, 0x32, 0xab, 0x46, 0x96, 0x95, 0xd3, 0x37, 0xa9, - 0x66, 0x90, 0x94, 0xc1, 0xab, 0xe3, 0x0c, 0xdc, 0xce, 0x3e, 0x31, 0x70, 0xca, 0xee, 0xe5, 0x2c, - 0xbb, 0x3e, 0xd5, 0xf4, 0x86, 0x66, 0x52, 0x97, 0x3a, 0x49, 0x23, 0xf5, 0xbf, 0x0a, 0x80, 0x2d, - 0xcb, 0xa4, 0x8e, 0xa5, 0xeb, 0xc4, 0x41, 0xe4, 0x50, 0x73, 0x35, 0xcb, 0x84, 0xbf, 0x00, 0x25, - 0x36, 0x9e, 0x2e, 0xa6, 0xb8, 0xa2, 0x5c, 0x54, 0x56, 0xcb, 0x37, 0xbe, 0x5f, 0x0f, 0x27, 0x39, - 0xa0, 0xaf, 0xdb, 0x07, 0x3d, 0xd6, 0xe0, 0xd6, 0x19, 0xba, 0x7e, 0x78, 0xbd, 0xbe, 0xbd, 0xf7, - 0x3e, 0xe9, 0xd0, 0x4d, 0x42, 0x71, 0x13, 0x3e, 0x1c, 0xd6, 0xa6, 0x46, 0xc3, 0x1a, 0x08, 0xdb, - 0x50, 0xc0, 0x0a, 0xb7, 0x41, 0x81, 0xb3, 0xe7, 0x38, 0xfb, 0xb5, 0x4c, 0x76, 0x31, 0xe8, 0x3a, - 0xc2, 0x1f, 0xbc, 0xf9, 0x80, 0x12, 0x93, 0xb9, 0xd7, 0x3c, 0x23, 0xa8, 0x0b, 0xeb, 0x98, 0x62, - 0xc4, 0x89, 0xe0, 0x4b, 0xa0, 0xe4, 0x08, 0xf7, 0x2b, 0xf9, 0x8b, 0xca, 0x6a, 0xbe, 0x79, 0x56, - 0xa0, 0x4a, 0xfe, 0xb0, 0x50, 0x80, 0x50, 0xff, 0xa2, 0x80, 0xe5, 0xf4, 0xb8, 0x37, 0x34, 0x97, - 0xc2, 0xf7, 0x52, 0x63, 0xaf, 0x4f, 0x36, 0x76, 0x66, 0xcd, 0x47, 0x1e, 0xbc, 0xd8, 0x6f, 0x89, - 0x8c, 0xfb, 0x1d, 0x50, 0xd4, 0x28, 0x31, 0xdc, 0x4a, 0xee, 0x62, 0x7e, 0xb5, 0x7c, 0xe3, 0x72, - 0x3d, 0x1d, 0xbb, 0xf5, 0xb4, 0x63, 0xcd, 0x39, 0x41, 0x59, 0x7c, 0x9b, 0x19, 0x23, 0x8f, 0x43, - 0xfd, 0x9f, 0x02, 0x66, 0xd7, 0x31, 0x31, 0x2c, 0xb3, 0x4d, 0xe8, 0x29, 0x2c, 0x5a, 0x0b, 0x14, - 0x5c, 0x9b, 0x74, 0xc4, 0xa2, 0x7d, 0x47, 0xe6, 0x7b, 0xe0, 0x4e, 0xdb, 0x26, 0x9d, 0x70, 0xa1, - 0xd8, 0x13, 0xe2, 0xc6, 0xf0, 0x1d, 0x30, 0xed, 0x52, 0x4c, 0xfb, 0x2e, 0x5f, 0xa6, 0xf2, 0x8d, - 0xef, 0x1e, 0x4d, 0xc3, 0xa1, 0xcd, 0x79, 0x41, 0x34, 0xed, 0x3d, 0x23, 0x41, 0xa1, 0xfe, 0x33, - 0x07, 0x60, 0x80, 0x6d, 0x59, 0x66, 0x57, 0xa3, 0x2c, 0x7e, 0x5f, 0x07, 0x05, 0x3a, 0xb0, 0x09, - 0x9f, 0x86, 0xd9, 0xe6, 0x65, 0xdf, 0x8b, 0x3b, 0x03, 0x9b, 0x3c, 0x1e, 0xd6, 0x96, 0xd3, 0x16, - 0xac, 0x07, 0x71, 0x1b, 0xb8, 0x11, 0xf8, 0x97, 0xe3, 0xd6, 0x37, 0xe3, 0xaf, 0x7e, 0x3c, 0xac, - 0x49, 0x36, 0x8b, 0x7a, 0xc0, 0x14, 0x77, 0x10, 0x1e, 0x02, 0xa8, 0x63, 0x97, 0xde, 0x71, 0xb0, - 0xe9, 0x7a, 0x6f, 0xd2, 0x0c, 0x22, 0x46, 0xfe, 0xe2, 0x64, 0xcb, 0xc3, 0x2c, 0x9a, 0xe7, 0x85, - 0x17, 0x70, 0x23, 0xc5, 0x86, 0x24, 0x6f, 0x80, 0x97, 0xc1, 0xb4, 0x43, 0xb0, 0x6b, 0x99, 0x95, - 0x02, 0x1f, 0x45, 0x30, 0x81, 0x88, 0xb7, 0x22, 0xd1, 0x0b, 0x5f, 0x00, 0x33, 0x06, 0x71, 0x5d, - 0xdc, 0x23, 0x95, 0x22, 0x07, 0x2e, 0x08, 0xe0, 0xcc, 0xa6, 0xd7, 0x8c, 0xfc, 0x7e, 0xf5, 0x8f, - 0x0a, 0x98, 0x0b, 0x66, 0xee, 0x14, 0x52, 0xa5, 0x19, 0x4f, 0x95, 0xe7, 0x8f, 0x8c, 0x93, 0x8c, - 0x0c, 0xf9, 0x38, 0x1f, 0xf1, 0x99, 0x05, 0x21, 0xfc, 0x19, 0x28, 0xb9, 0x44, 0x27, 0x1d, 0x6a, - 0x39, 0xc2, 0xe7, 0x97, 0x27, 0xf4, 0x19, 0xef, 0x11, 0xbd, 0x2d, 0x4c, 0x9b, 0x67, 0x98, 0xd3, - 0xfe, 0x13, 0x0a, 0x28, 0xe1, 0x4f, 0x40, 0x89, 0x12, 0xc3, 0xd6, 0x31, 0x25, 0x22, 0x4d, 0x62, - 0xf1, 0xcd, 0xc2, 0x85, 0x91, 0xed, 0x58, 0xdd, 0x3b, 0x02, 0xc6, 0x13, 0x25, 0x98, 0x07, 0xbf, - 0x15, 0x05, 0x34, 0xf0, 0x00, 0xcc, 0xf7, 0xed, 0x2e, 0x43, 0x52, 0xb6, 0x75, 0xf7, 0x06, 0x22, - 0x7c, 0xae, 0x1e, 0x39, 0x21, 0xbb, 0x31, 0x93, 0xe6, 0xb2, 0x78, 0xc1, 0x7c, 0xbc, 0x1d, 0x25, - 0xa8, 0xe1, 0x1a, 0x58, 0x30, 0x34, 0x13, 0x11, 0xdc, 0x1d, 0xb4, 0x49, 0xc7, 0x32, 0xbb, 0x2e, - 0x0f, 0xa0, 0x62, 0x73, 0x45, 0x10, 0x2c, 0x6c, 0xc6, 0xbb, 0x51, 0x12, 0x0f, 0x37, 0xc0, 0x92, - 0xbf, 0xcf, 0xfe, 0x48, 0x73, 0xa9, 0xe5, 0x0c, 0x36, 0x34, 0x43, 0xa3, 0x95, 0x69, 0xce, 0x53, - 0x19, 0x0d, 0x6b, 0x4b, 0x48, 0xd2, 0x8f, 0xa4, 0x56, 0xea, 0x6f, 0xa7, 0xc1, 0x42, 0x62, 0x37, - 0x80, 0x77, 0xc1, 0x72, 0xa7, 0xef, 0x38, 0xc4, 0xa4, 0x5b, 0x7d, 0x63, 0x8f, 0x38, 0xed, 0xce, - 0x3e, 0xe9, 0xf6, 0x75, 0xd2, 0xe5, 0x2b, 0x5a, 0x6c, 0x56, 0x85, 0xaf, 0xcb, 0x2d, 0x29, 0x0a, - 0x65, 0x58, 0xc3, 0x1f, 0x03, 0x68, 0xf2, 0xa6, 0x4d, 0xcd, 0x75, 0x03, 0xce, 0x1c, 0xe7, 0x0c, - 0x12, 0x70, 0x2b, 0x85, 0x40, 0x12, 0x2b, 0xe6, 0x63, 0x97, 0xb8, 0x9a, 0x43, 0xba, 0x49, 0x1f, - 0xf3, 0x71, 0x1f, 0xd7, 0xa5, 0x28, 0x94, 0x61, 0x0d, 0x5f, 0x01, 0x65, 0xef, 0x6d, 0x7c, 0xce, - 0xc5, 0xe2, 0x2c, 0x0a, 0xb2, 0xf2, 0x56, 0xd8, 0x85, 0xa2, 0x38, 0x36, 0x34, 0x6b, 0xcf, 0x25, - 0xce, 0x21, 0xe9, 0xbe, 0xe5, 0x69, 0x00, 0x56, 0x28, 0x8b, 0xbc, 0x50, 0x06, 0x43, 0xdb, 0x4e, - 0x21, 0x90, 0xc4, 0x8a, 0x0d, 0xcd, 0x8b, 0x9a, 0xd4, 0xd0, 0xa6, 0xe3, 0x43, 0xdb, 0x95, 0xa2, - 0x50, 0x86, 0x35, 0x8b, 0x3d, 0xcf, 0xe5, 0xb5, 0x43, 0xac, 0xe9, 0x78, 0x4f, 0x27, 0x95, 0x99, - 0x78, 0xec, 0x6d, 0xc5, 0xbb, 0x51, 0x12, 0x0f, 0xdf, 0x02, 0xe7, 0xbc, 0xa6, 0x5d, 0x13, 0x07, - 0x24, 0x25, 0x4e, 0xf2, 0x9c, 0x20, 0x39, 0xb7, 0x95, 0x04, 0xa0, 0xb4, 0x0d, 0x7c, 0x1d, 0xcc, - 0x77, 0x2c, 0x5d, 0xe7, 0xf1, 0xd8, 0xb2, 0xfa, 0x26, 0xad, 0xcc, 0x72, 0x16, 0xc8, 0x72, 0xa8, - 0x15, 0xeb, 0x41, 0x09, 0x24, 0xbc, 0x07, 0x40, 0xc7, 0x2f, 0x07, 0x6e, 0x05, 0x64, 0x17, 0xfa, - 0x74, 0x1d, 0x0a, 0x0b, 0x70, 0xd0, 0xe4, 0xa2, 0x08, 0x9b, 0xfa, 0xb1, 0x02, 0x56, 0x32, 0x72, - 0x1c, 0xde, 0x8e, 0x55, 0xbd, 0xab, 0x89, 0xaa, 0x77, 0x21, 0xc3, 0x2c, 0x52, 0xfa, 0x3a, 0x60, - 0x8e, 0xe9, 0x0e, 0xcd, 0xec, 0x79, 0x10, 0xb1, 0x83, 0xbd, 0x28, 0xf3, 0x1d, 0x45, 0x81, 0xe1, - 0x36, 0x7c, 0x6e, 0x34, 0xac, 0xcd, 0xc5, 0xfa, 0x50, 0x9c, 0x53, 0xfd, 0x75, 0x0e, 0x80, 0x75, - 0x62, 0xeb, 0xd6, 0xc0, 0x20, 0xe6, 0x69, 0xa8, 0x96, 0xf5, 0x98, 0x6a, 0x51, 0xa5, 0x0b, 0x11, - 0xf8, 0x93, 0x29, 0x5b, 0x36, 0x12, 0xb2, 0xe5, 0xd2, 0x18, 0x9e, 0xa3, 0x75, 0xcb, 0xdf, 0xf3, - 0x60, 0x31, 0x04, 0x87, 0xc2, 0xe5, 0x56, 0x6c, 0x09, 0xaf, 0x24, 0x96, 0x70, 0x45, 0x62, 0xf2, - 0xd4, 0x94, 0xcb, 0xfb, 0x60, 0x9e, 0xe9, 0x0a, 0x6f, 0xd5, 0xb8, 0x6a, 0x99, 0x3e, 0xb6, 0x6a, - 0x09, 0xaa, 0xce, 0x46, 0x8c, 0x09, 0x25, 0x98, 0x33, 0x54, 0xd2, 0xcc, 0xd7, 0x51, 0x25, 0xfd, - 0x49, 0x01, 0xf3, 0xe1, 0x32, 0x9d, 0x82, 0x4c, 0x6a, 0xc5, 0x65, 0x52, 0xf5, 0xe8, 0xb8, 0xcc, - 0xd0, 0x49, 0x7f, 0x2b, 0x44, 0xbd, 0xe6, 0x42, 0x69, 0x95, 0x1d, 0xa8, 0x6c, 0x5d, 0xeb, 0x60, - 0x57, 0x94, 0xd5, 0x33, 0xde, 0x61, 0xca, 0x6b, 0x43, 0x41, 0x6f, 0x4c, 0x52, 0xe5, 0x9e, 0xae, - 0xa4, 0xca, 0x7f, 0x31, 0x92, 0xea, 0x0e, 0x28, 0xb9, 0xbe, 0x98, 0x2a, 0x70, 0xca, 0xcb, 0xe3, - 0xd2, 0x59, 0xe8, 0xa8, 0x80, 0x35, 0x50, 0x50, 0x01, 0x93, 0x4c, 0x3b, 0x15, 0xbf, 0x4c, 0xed, - 0xc4, 0xc2, 0xdb, 0xc6, 0x7d, 0x97, 0x74, 0x79, 0x2a, 0x95, 0xc2, 0xf0, 0xde, 0xe1, 0xad, 0x48, - 0xf4, 0xc2, 0x5d, 0xb0, 0x62, 0x3b, 0x56, 0xcf, 0x21, 0xae, 0xbb, 0x4e, 0x70, 0x57, 0xd7, 0x4c, - 0xe2, 0x0f, 0xc0, 0xab, 0x7a, 0x17, 0x46, 0xc3, 0xda, 0xca, 0x8e, 0x1c, 0x82, 0xb2, 0x6c, 0xd5, - 0x8f, 0x0a, 0xe0, 0x6c, 0x72, 0x47, 0xcc, 0x10, 0x22, 0xca, 0x89, 0x84, 0xc8, 0x4b, 0x91, 0x10, - 0xf5, 0x54, 0x5a, 0xe4, 0xcc, 0x9f, 0x0a, 0xd3, 0x35, 0xb0, 0x20, 0x84, 0x87, 0xdf, 0x29, 0xa4, - 0x58, 0xb0, 0x3c, 0xbb, 0xf1, 0x6e, 0x94, 0xc4, 0xc3, 0x5b, 0x60, 0xce, 0xe1, 0xda, 0xca, 0x27, - 0xf0, 0xf4, 0xc9, 0xb7, 0x04, 0xc1, 0x1c, 0x8a, 0x76, 0xa2, 0x38, 0x96, 0x69, 0x93, 0x50, 0x72, - 0xf8, 0x04, 0x85, 0xb8, 0x36, 0x59, 0x4b, 0x02, 0x50, 0xda, 0x06, 0x6e, 0x82, 0xc5, 0xbe, 0x99, - 0xa6, 0xf2, 0x62, 0xed, 0x82, 0xa0, 0x5a, 0xdc, 0x4d, 0x43, 0x90, 0xcc, 0x0e, 0xfe, 0x34, 0x26, - 0x57, 0xa6, 0xf9, 0x2e, 0x72, 0xe5, 0xe8, 0x74, 0x98, 0x58, 0xaf, 0x48, 0x74, 0x54, 0x69, 0x52, - 0x1d, 0xa5, 0x7e, 0xa8, 0x00, 0x98, 0x4e, 0xc1, 0xb1, 0x87, 0xfb, 0x94, 0x45, 0xa4, 0x44, 0x76, - 0xe5, 0x0a, 0xe7, 0xea, 0x78, 0x85, 0x13, 0xee, 0xa0, 0x93, 0x49, 0x1c, 0x31, 0xbd, 0xa7, 0x73, - 0x31, 0x33, 0x81, 0xc4, 0x09, 0xfd, 0x79, 0x32, 0x89, 0x13, 0xe1, 0x39, 0x5a, 0xe2, 0xfc, 0x2b, - 0x07, 0x16, 0x43, 0xf0, 0xc4, 0x12, 0x47, 0x62, 0xf2, 0xec, 0x72, 0x66, 0x32, 0xd9, 0x11, 0x4e, - 0xdd, 0x57, 0x44, 0x76, 0x84, 0x0e, 0x65, 0xc8, 0x8e, 0x3f, 0xe4, 0xa2, 0x5e, 0x1f, 0x53, 0x76, - 0x7c, 0x01, 0x57, 0x15, 0x5f, 0x3b, 0xe5, 0xa2, 0x7e, 0x92, 0x07, 0x67, 0x93, 0x29, 0x18, 0xab, + // 2211 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0xf2, 0x43, 0xa2, 0x86, 0x96, 0x64, 0x8f, 0x54, 0x89, 0xb1, 0x1b, 0xd2, 0xdd, 0xb8, + 0xb6, 0x12, 0xc7, 0x64, 0xed, 0x38, 0x41, 0x60, 0x17, 0x09, 0x44, 0x2a, 0x4d, 0xd3, 0xe8, 0xab, + 0x43, 0xcb, 0x01, 0xdc, 0xb4, 0xe8, 0x88, 0x1c, 0x53, 0x1b, 0xed, 0x17, 0x76, 0x87, 0x8a, 0x89, + 0x5e, 0x8a, 0x02, 0xbd, 0xf5, 0xd0, 0xbf, 0xa1, 0xff, 0x40, 0x51, 0x14, 0xcd, 0x2d, 0x08, 0x82, + 0x5e, 0x7c, 0x29, 0x10, 0xf4, 0xd2, 0x9c, 0x88, 0x9a, 0x39, 0x15, 0x45, 0x6f, 0xed, 0xc5, 0x97, + 0x16, 0x33, 0x3b, 0xfb, 0x3d, 0x2b, 0x52, 0x72, 0xac, 0x34, 0x81, 0x6f, 0xdc, 0x99, 0xdf, 0xfb, + 0xed, 0x9b, 0x99, 0xf7, 0xe6, 0xfd, 0x66, 0x96, 0xe0, 0xf6, 0xc1, 0xeb, 0x6e, 0x5d, 0xb3, 0x1a, + 0x07, 0xfd, 0x3d, 0xe2, 0x98, 0x84, 0x12, 0xb7, 0x71, 0x48, 0xcc, 0xae, 0xe5, 0x34, 0x44, 0x07, + 0xb6, 0xb5, 0x06, 0xb6, 0x6d, 0xb7, 0x71, 0x78, 0xbd, 0xd1, 0x23, 0x26, 0x71, 0x30, 0x25, 0xdd, + 0xba, 0xed, 0x58, 0xd4, 0x82, 0xd0, 0xc3, 0xd4, 0xb1, 0xad, 0xd5, 0x19, 0xa6, 0x7e, 0x78, 0xfd, + 0xfc, 0xb5, 0x9e, 0x46, 0xf7, 0xfb, 0x7b, 0xf5, 0x8e, 0x65, 0x34, 0x7a, 0x56, 0xcf, 0x6a, 0x70, + 0xe8, 0x5e, 0xff, 0x3e, 0x7f, 0xe2, 0x0f, 0xfc, 0x97, 0x47, 0x71, 0x5e, 0x8d, 0xbc, 0xa6, 0x63, + 0x39, 0x44, 0xf2, 0x9a, 0xf3, 0x37, 0x43, 0x8c, 0x81, 0x3b, 0xfb, 0x9a, 0x49, 0x9c, 0x41, 0xc3, + 0x3e, 0xe8, 0xb1, 0x06, 0xb7, 0x61, 0x10, 0x8a, 0x65, 0x56, 0x8d, 0x2c, 0x2b, 0xa7, 0x6f, 0x52, + 0xcd, 0x20, 0x29, 0x83, 0xd7, 0xc6, 0x19, 0xb8, 0x9d, 0x7d, 0x62, 0xe0, 0x94, 0xdd, 0x2b, 0x59, + 0x76, 0x7d, 0xaa, 0xe9, 0x0d, 0xcd, 0xa4, 0x2e, 0x75, 0x92, 0x46, 0xea, 0x7f, 0x14, 0x00, 0x5b, + 0x96, 0x49, 0x1d, 0x4b, 0xd7, 0x89, 0x83, 0xc8, 0xa1, 0xe6, 0x6a, 0x96, 0x09, 0x7f, 0x0e, 0x4a, + 0x6c, 0x3c, 0x5d, 0x4c, 0x71, 0x45, 0xb9, 0xa8, 0xac, 0x96, 0x6f, 0x7c, 0xaf, 0x1e, 0x4e, 0x72, + 0x40, 0x5f, 0xb7, 0x0f, 0x7a, 0xac, 0xc1, 0xad, 0x33, 0x74, 0xfd, 0xf0, 0x7a, 0x7d, 0x7b, 0xef, + 0x03, 0xd2, 0xa1, 0x9b, 0x84, 0xe2, 0x26, 0x7c, 0x38, 0xac, 0x4d, 0x8d, 0x86, 0x35, 0x10, 0xb6, + 0xa1, 0x80, 0x15, 0x6e, 0x83, 0x02, 0x67, 0xcf, 0x71, 0xf6, 0x6b, 0x99, 0xec, 0x62, 0xd0, 0x75, + 0x84, 0x3f, 0x7c, 0xeb, 0x01, 0x25, 0x26, 0x73, 0xaf, 0x79, 0x46, 0x50, 0x17, 0xd6, 0x31, 0xc5, + 0x88, 0x13, 0xc1, 0x97, 0x41, 0xc9, 0x11, 0xee, 0x57, 0xf2, 0x17, 0x95, 0xd5, 0x7c, 0xf3, 0xac, + 0x40, 0x95, 0xfc, 0x61, 0xa1, 0x00, 0xa1, 0xfe, 0x59, 0x01, 0xcb, 0xe9, 0x71, 0x6f, 0x68, 0x2e, + 0x85, 0xef, 0xa7, 0xc6, 0x5e, 0x9f, 0x6c, 0xec, 0xcc, 0x9a, 0x8f, 0x3c, 0x78, 0xb1, 0xdf, 0x12, + 0x19, 0xf7, 0xbb, 0xa0, 0xa8, 0x51, 0x62, 0xb8, 0x95, 0xdc, 0xc5, 0xfc, 0x6a, 0xf9, 0xc6, 0xe5, + 0x7a, 0x3a, 0x76, 0xeb, 0x69, 0xc7, 0x9a, 0x73, 0x82, 0xb2, 0xf8, 0x0e, 0x33, 0x46, 0x1e, 0x87, + 0xfa, 0x5f, 0x05, 0xcc, 0xae, 0x63, 0x62, 0x58, 0x66, 0x9b, 0xd0, 0x53, 0x58, 0xb4, 0x16, 0x28, + 0xb8, 0x36, 0xe9, 0x88, 0x45, 0xfb, 0x8e, 0xcc, 0xf7, 0xc0, 0x9d, 0xb6, 0x4d, 0x3a, 0xe1, 0x42, + 0xb1, 0x27, 0xc4, 0x8d, 0xe1, 0xbb, 0x60, 0xda, 0xa5, 0x98, 0xf6, 0x5d, 0xbe, 0x4c, 0xe5, 0x1b, + 0x2f, 0x1c, 0x4d, 0xc3, 0xa1, 0xcd, 0x79, 0x41, 0x34, 0xed, 0x3d, 0x23, 0x41, 0xa1, 0xfe, 0x23, + 0x07, 0x60, 0x80, 0x6d, 0x59, 0x66, 0x57, 0xa3, 0x2c, 0x7e, 0x6f, 0x81, 0x02, 0x1d, 0xd8, 0x84, + 0x4f, 0xc3, 0x6c, 0xf3, 0xb2, 0xef, 0xc5, 0x9d, 0x81, 0x4d, 0x1e, 0x0f, 0x6b, 0xcb, 0x69, 0x0b, + 0xd6, 0x83, 0xb8, 0x0d, 0xdc, 0x08, 0xfc, 0xcb, 0x71, 0xeb, 0x9b, 0xf1, 0x57, 0x3f, 0x1e, 0xd6, + 0x24, 0x9b, 0x45, 0x3d, 0x60, 0x8a, 0x3b, 0x08, 0x0f, 0x01, 0xd4, 0xb1, 0x4b, 0xef, 0x38, 0xd8, + 0x74, 0xbd, 0x37, 0x69, 0x06, 0x11, 0x23, 0x7f, 0x69, 0xb2, 0xe5, 0x61, 0x16, 0xcd, 0xf3, 0xc2, + 0x0b, 0xb8, 0x91, 0x62, 0x43, 0x92, 0x37, 0xc0, 0xcb, 0x60, 0xda, 0x21, 0xd8, 0xb5, 0xcc, 0x4a, + 0x81, 0x8f, 0x22, 0x98, 0x40, 0xc4, 0x5b, 0x91, 0xe8, 0x85, 0x2f, 0x82, 0x19, 0x83, 0xb8, 0x2e, + 0xee, 0x91, 0x4a, 0x91, 0x03, 0x17, 0x04, 0x70, 0x66, 0xd3, 0x6b, 0x46, 0x7e, 0xbf, 0xfa, 0x07, + 0x05, 0xcc, 0x05, 0x33, 0x77, 0x0a, 0xa9, 0xd2, 0x8c, 0xa7, 0xca, 0xf3, 0x47, 0xc6, 0x49, 0x46, + 0x86, 0x7c, 0x92, 0x8f, 0xf8, 0xcc, 0x82, 0x10, 0xfe, 0x14, 0x94, 0x5c, 0xa2, 0x93, 0x0e, 0xb5, + 0x1c, 0xe1, 0xf3, 0x2b, 0x13, 0xfa, 0x8c, 0xf7, 0x88, 0xde, 0x16, 0xa6, 0xcd, 0x33, 0xcc, 0x69, + 0xff, 0x09, 0x05, 0x94, 0xf0, 0xc7, 0xa0, 0x44, 0x89, 0x61, 0xeb, 0x98, 0x12, 0x91, 0x26, 0xb1, + 0xf8, 0x66, 0xe1, 0xc2, 0xc8, 0x76, 0xac, 0xee, 0x1d, 0x01, 0xe3, 0x89, 0x12, 0xcc, 0x83, 0xdf, + 0x8a, 0x02, 0x1a, 0x78, 0x00, 0xe6, 0xfb, 0x76, 0x97, 0x21, 0x29, 0xdb, 0xba, 0x7b, 0x03, 0x11, + 0x3e, 0x57, 0x8f, 0x9c, 0x90, 0xdd, 0x98, 0x49, 0x73, 0x59, 0xbc, 0x60, 0x3e, 0xde, 0x8e, 0x12, + 0xd4, 0x70, 0x0d, 0x2c, 0x18, 0x9a, 0x89, 0x08, 0xee, 0x0e, 0xda, 0xa4, 0x63, 0x99, 0x5d, 0x97, + 0x07, 0x50, 0xb1, 0xb9, 0x22, 0x08, 0x16, 0x36, 0xe3, 0xdd, 0x28, 0x89, 0x87, 0x1b, 0x60, 0xc9, + 0xdf, 0x67, 0x7f, 0xa8, 0xb9, 0xd4, 0x72, 0x06, 0x1b, 0x9a, 0xa1, 0xd1, 0xca, 0x34, 0xe7, 0xa9, + 0x8c, 0x86, 0xb5, 0x25, 0x24, 0xe9, 0x47, 0x52, 0x2b, 0xf5, 0x37, 0xd3, 0x60, 0x21, 0xb1, 0x1b, + 0xc0, 0xbb, 0x60, 0xb9, 0xd3, 0x77, 0x1c, 0x62, 0xd2, 0xad, 0xbe, 0xb1, 0x47, 0x9c, 0x76, 0x67, + 0x9f, 0x74, 0xfb, 0x3a, 0xe9, 0xf2, 0x15, 0x2d, 0x36, 0xab, 0xc2, 0xd7, 0xe5, 0x96, 0x14, 0x85, + 0x32, 0xac, 0xe1, 0x8f, 0x00, 0x34, 0x79, 0xd3, 0xa6, 0xe6, 0xba, 0x01, 0x67, 0x8e, 0x73, 0x06, + 0x09, 0xb8, 0x95, 0x42, 0x20, 0x89, 0x15, 0xf3, 0xb1, 0x4b, 0x5c, 0xcd, 0x21, 0xdd, 0xa4, 0x8f, + 0xf9, 0xb8, 0x8f, 0xeb, 0x52, 0x14, 0xca, 0xb0, 0x86, 0xaf, 0x82, 0xb2, 0xf7, 0x36, 0x3e, 0xe7, + 0x62, 0x71, 0x16, 0x05, 0x59, 0x79, 0x2b, 0xec, 0x42, 0x51, 0x1c, 0x1b, 0x9a, 0xb5, 0xe7, 0x12, + 0xe7, 0x90, 0x74, 0xdf, 0xf6, 0x34, 0x00, 0x2b, 0x94, 0x45, 0x5e, 0x28, 0x83, 0xa1, 0x6d, 0xa7, + 0x10, 0x48, 0x62, 0xc5, 0x86, 0xe6, 0x45, 0x4d, 0x6a, 0x68, 0xd3, 0xf1, 0xa1, 0xed, 0x4a, 0x51, + 0x28, 0xc3, 0x9a, 0xc5, 0x9e, 0xe7, 0xf2, 0xda, 0x21, 0xd6, 0x74, 0xbc, 0xa7, 0x93, 0xca, 0x4c, + 0x3c, 0xf6, 0xb6, 0xe2, 0xdd, 0x28, 0x89, 0x87, 0x6f, 0x83, 0x73, 0x5e, 0xd3, 0xae, 0x89, 0x03, + 0x92, 0x12, 0x27, 0x79, 0x4e, 0x90, 0x9c, 0xdb, 0x4a, 0x02, 0x50, 0xda, 0x06, 0xde, 0x02, 0xf3, + 0x1d, 0x4b, 0xd7, 0x79, 0x3c, 0xb6, 0xac, 0xbe, 0x49, 0x2b, 0xb3, 0x9c, 0x05, 0xb2, 0x1c, 0x6a, + 0xc5, 0x7a, 0x50, 0x02, 0x09, 0xef, 0x01, 0xd0, 0xf1, 0xcb, 0x81, 0x5b, 0x01, 0xd9, 0x85, 0x3e, + 0x5d, 0x87, 0xc2, 0x02, 0x1c, 0x34, 0xb9, 0x28, 0xc2, 0xa6, 0x7e, 0xa2, 0x80, 0x95, 0x8c, 0x1c, + 0x87, 0x6f, 0xc6, 0xaa, 0xde, 0xd5, 0x44, 0xd5, 0xbb, 0x90, 0x61, 0x16, 0x29, 0x7d, 0x1d, 0x30, + 0xc7, 0x74, 0x87, 0x66, 0xf6, 0x3c, 0x88, 0xd8, 0xc1, 0x5e, 0x92, 0xf9, 0x8e, 0xa2, 0xc0, 0x70, + 0x1b, 0x3e, 0x37, 0x1a, 0xd6, 0xe6, 0x62, 0x7d, 0x28, 0xce, 0xa9, 0xfe, 0x2a, 0x07, 0xc0, 0x3a, + 0xb1, 0x75, 0x6b, 0x60, 0x10, 0xf3, 0x34, 0x54, 0xcb, 0x7a, 0x4c, 0xb5, 0xa8, 0xd2, 0x85, 0x08, + 0xfc, 0xc9, 0x94, 0x2d, 0x1b, 0x09, 0xd9, 0x72, 0x69, 0x0c, 0xcf, 0xd1, 0xba, 0xe5, 0x6f, 0x79, + 0xb0, 0x18, 0x82, 0x43, 0xe1, 0x72, 0x3b, 0xb6, 0x84, 0x57, 0x12, 0x4b, 0xb8, 0x22, 0x31, 0x79, + 0x6a, 0xca, 0xe5, 0x03, 0x30, 0xcf, 0x74, 0x85, 0xb7, 0x6a, 0x5c, 0xb5, 0x4c, 0x1f, 0x5b, 0xb5, + 0x04, 0x55, 0x67, 0x23, 0xc6, 0x84, 0x12, 0xcc, 0x19, 0x2a, 0x69, 0xe6, 0xeb, 0xa8, 0x92, 0xfe, + 0xa8, 0x80, 0xf9, 0x70, 0x99, 0x4e, 0x41, 0x26, 0xb5, 0xe2, 0x32, 0xa9, 0x7a, 0x74, 0x5c, 0x66, + 0xe8, 0xa4, 0xbf, 0x16, 0xa2, 0x5e, 0x73, 0xa1, 0xb4, 0xca, 0x0e, 0x54, 0xb6, 0xae, 0x75, 0xb0, + 0x2b, 0xca, 0xea, 0x19, 0xef, 0x30, 0xe5, 0xb5, 0xa1, 0xa0, 0x37, 0x26, 0xa9, 0x72, 0x4f, 0x57, + 0x52, 0xe5, 0xbf, 0x1c, 0x49, 0x75, 0x07, 0x94, 0x5c, 0x5f, 0x4c, 0x15, 0x38, 0xe5, 0xe5, 0x71, + 0xe9, 0x2c, 0x74, 0x54, 0xc0, 0x1a, 0x28, 0xa8, 0x80, 0x49, 0xa6, 0x9d, 0x8a, 0x5f, 0xa5, 0x76, + 0x62, 0xe1, 0x6d, 0xe3, 0xbe, 0x4b, 0xba, 0x3c, 0x95, 0x4a, 0x61, 0x78, 0xef, 0xf0, 0x56, 0x24, + 0x7a, 0xe1, 0x2e, 0x58, 0xb1, 0x1d, 0xab, 0xe7, 0x10, 0xd7, 0x5d, 0x27, 0xb8, 0xab, 0x6b, 0x26, + 0xf1, 0x07, 0xe0, 0x55, 0xbd, 0x0b, 0xa3, 0x61, 0x6d, 0x65, 0x47, 0x0e, 0x41, 0x59, 0xb6, 0xea, + 0xc7, 0x05, 0x70, 0x36, 0xb9, 0x23, 0x66, 0x08, 0x11, 0xe5, 0x44, 0x42, 0xe4, 0xe5, 0x48, 0x88, + 0x7a, 0x2a, 0x2d, 0x72, 0xe6, 0x4f, 0x85, 0xe9, 0x1a, 0x58, 0x10, 0xc2, 0xc3, 0xef, 0x14, 0x52, + 0x2c, 0x58, 0x9e, 0xdd, 0x78, 0x37, 0x4a, 0xe2, 0xe1, 0x6d, 0x30, 0xe7, 0x70, 0x6d, 0xe5, 0x13, + 0x78, 0xfa, 0xe4, 0x5b, 0x82, 0x60, 0x0e, 0x45, 0x3b, 0x51, 0x1c, 0xcb, 0xb4, 0x49, 0x28, 0x39, + 0x7c, 0x82, 0x42, 0x5c, 0x9b, 0xac, 0x25, 0x01, 0x28, 0x6d, 0x03, 0x37, 0xc1, 0x62, 0xdf, 0x4c, + 0x53, 0x79, 0xb1, 0x76, 0x41, 0x50, 0x2d, 0xee, 0xa6, 0x21, 0x48, 0x66, 0x07, 0x7f, 0x12, 0x93, + 0x2b, 0xd3, 0x7c, 0x17, 0xb9, 0x72, 0x74, 0x3a, 0x4c, 0xac, 0x57, 0x24, 0x3a, 0xaa, 0x34, 0xa9, + 0x8e, 0x52, 0x3f, 0x52, 0x00, 0x4c, 0xa7, 0xe0, 0xd8, 0xc3, 0x7d, 0xca, 0x22, 0x52, 0x22, 0xbb, + 0x72, 0x85, 0x73, 0x75, 0xbc, 0xc2, 0x09, 0x77, 0xd0, 0xc9, 0x24, 0x8e, 0x98, 0xde, 0xd3, 0xb9, + 0x98, 0x99, 0x40, 0xe2, 0x84, 0xfe, 0x3c, 0x99, 0xc4, 0x89, 0xf0, 0x1c, 0x2d, 0x71, 0xfe, 0x99, + 0x03, 0x8b, 0x21, 0x78, 0x62, 0x89, 0x23, 0x31, 0x79, 0x76, 0x39, 0x33, 0x99, 0xec, 0x08, 0xa7, + 0xee, 0xff, 0x44, 0x76, 0x84, 0x0e, 0x65, 0xc8, 0x8e, 0xdf, 0xe7, 0xa2, 0x5e, 0x1f, 0x53, 0x76, + 0x7c, 0x09, 0x57, 0x15, 0x5f, 0x3b, 0xe5, 0xa2, 0x7e, 0x9a, 0x07, 0x67, 0x93, 0x29, 0x18, 0xab, 0x83, 0xca, 0xd8, 0x3a, 0xb8, 0x03, 0x96, 0xee, 0xf7, 0x75, 0x7d, 0xc0, 0xc7, 0x10, 0x29, 0x86, - 0x5e, 0x05, 0xfd, 0xb6, 0xb0, 0x5c, 0xfa, 0xa1, 0x04, 0x83, 0xa4, 0x96, 0xe9, 0xb2, 0x58, 0x78, + 0x5e, 0x05, 0xfd, 0xb6, 0xb0, 0x5c, 0xfa, 0x81, 0x04, 0x83, 0xa4, 0x96, 0xe9, 0xb2, 0x58, 0x78, 0xd2, 0xb2, 0x58, 0x3c, 0x41, 0x59, 0x94, 0x2b, 0x8b, 0xfc, 0x89, 0x94, 0xc5, 0xc4, 0x35, 0x51, 0xb2, 0x5d, 0x8d, 0x3d, 0xc3, 0x8f, 0x14, 0xb0, 0x2c, 0x3f, 0x3e, 0x43, 0x1d, 0xcc, 0x1b, 0xf8, - 0x41, 0xf4, 0xf2, 0x62, 0x5c, 0xc1, 0xe8, 0x53, 0x4d, 0xaf, 0x7b, 0x5f, 0x77, 0xea, 0x6f, 0x9b, + 0x41, 0xf4, 0xf2, 0x62, 0x5c, 0xc1, 0xe8, 0x53, 0x4d, 0xaf, 0x7b, 0x5f, 0x77, 0xea, 0xef, 0x98, 0x74, 0xdb, 0x69, 0x53, 0x47, 0x33, 0x7b, 0x5e, 0x81, 0xdd, 0x8c, 0x71, 0xa1, 0x04, 0x37, 0xbc, 0x07, 0x4a, 0x06, 0x7e, 0xd0, 0xee, 0x3b, 0x3d, 0xbf, 0x10, 0x1e, 0xff, 0x3d, 0x3c, 0xf6, 0x37, - 0x05, 0x0b, 0x0a, 0xf8, 0xd4, 0xcf, 0x15, 0xb0, 0x92, 0x51, 0x41, 0xbf, 0x41, 0xa3, 0xfc, 0x48, + 0x05, 0x0b, 0x0a, 0xf8, 0xd4, 0x2f, 0x14, 0xb0, 0x92, 0x51, 0x41, 0xbf, 0x41, 0xa3, 0xfc, 0x58, 0x01, 0x17, 0x63, 0xa3, 0x64, 0x19, 0x49, 0xee, 0xf7, 0x75, 0x9e, 0x9c, 0x42, 0xb0, 0x5c, 0x05, 0xb3, 0x36, 0x76, 0xa8, 0x16, 0x28, 0xdd, 0x62, 0x73, 0x6e, 0x34, 0xac, 0xcd, 0xee, 0xf8, 0x8d, - 0x28, 0xec, 0x97, 0xcc, 0x4d, 0xee, 0xe9, 0xcd, 0x8d, 0xfa, 0x9b, 0x1c, 0x28, 0x47, 0x5c, 0x3e, - 0x05, 0xa9, 0xf2, 0x66, 0x4c, 0xaa, 0x48, 0x3f, 0xfe, 0x44, 0xe7, 0x30, 0x4b, 0xab, 0x6c, 0x26, - 0xb4, 0xca, 0xf7, 0xc6, 0x11, 0x1d, 0x2d, 0x56, 0xfe, 0x9d, 0x03, 0x4b, 0x11, 0x74, 0xa8, 0x56, - 0x7e, 0x10, 0x53, 0x2b, 0xab, 0x09, 0xb5, 0x52, 0x91, 0xd9, 0x3c, 0x93, 0x2b, 0xe3, 0xe5, 0xca, - 0x9f, 0x15, 0xb0, 0x10, 0x99, 0xbb, 0x53, 0xd0, 0x2b, 0xeb, 0x71, 0xbd, 0x52, 0x1b, 0x13, 0x2f, - 0x19, 0x82, 0xe5, 0x2e, 0x58, 0x8c, 0x80, 0xb6, 0x9d, 0xae, 0x66, 0x62, 0xdd, 0x85, 0xb7, 0xc1, - 0xa2, 0x28, 0xaf, 0x6d, 0x8a, 0x1d, 0xbf, 0xdd, 0xcf, 0x75, 0x9f, 0x89, 0xf7, 0x21, 0x19, 0x52, - 0xfd, 0x8f, 0x02, 0x1a, 0x11, 0xe2, 0x1d, 0xe2, 0xb8, 0x9a, 0x4b, 0x89, 0x49, 0xef, 0x5a, 0x7a, - 0xdf, 0x20, 0x2d, 0x1d, 0x6b, 0x06, 0x22, 0xac, 0x41, 0xb3, 0xcc, 0x1d, 0x4b, 0xd7, 0x3a, 0x03, - 0x88, 0x41, 0xf9, 0x83, 0x7d, 0x62, 0xae, 0x13, 0x9d, 0x50, 0xf1, 0xe9, 0x63, 0xb6, 0x79, 0xdb, - 0xff, 0x12, 0xf0, 0x6e, 0xd8, 0xf5, 0x78, 0x58, 0x5b, 0x9d, 0x84, 0x91, 0x07, 0x6e, 0x94, 0x13, - 0xfe, 0x1c, 0x00, 0xf6, 0xd8, 0xee, 0x60, 0xff, 0x43, 0xc8, 0x6c, 0xf3, 0x0d, 0x3f, 0xbd, 0xdf, - 0x0d, 0x7a, 0x8e, 0xf5, 0x82, 0x08, 0xa3, 0xfa, 0xfb, 0x52, 0x2c, 0x0c, 0xbe, 0xf1, 0xf7, 0x4e, - 0xbf, 0x04, 0x4b, 0x87, 0xe1, 0xec, 0xf8, 0x00, 0xa6, 0x97, 0x58, 0x4c, 0xbe, 0x20, 0xa5, 0x97, - 0xcd, 0x6b, 0xa8, 0xd2, 0xee, 0x4a, 0xe8, 0x90, 0xf4, 0x25, 0xf0, 0x15, 0x50, 0x66, 0x3a, 0x47, - 0xeb, 0x90, 0x2d, 0x6c, 0xf8, 0x29, 0x1a, 0x7c, 0x39, 0x6a, 0x87, 0x5d, 0x28, 0x8a, 0x83, 0xfb, - 0x60, 0xd1, 0xb6, 0xba, 0x9b, 0xd8, 0xc4, 0x3d, 0xc2, 0xaa, 0xb7, 0xb7, 0x94, 0xfc, 0x46, 0x6a, - 0xb6, 0xf9, 0xaa, 0x7f, 0xdb, 0xb0, 0x93, 0x86, 0xb0, 0xd3, 0x9c, 0xa4, 0x99, 0x07, 0x81, 0x8c, - 0x12, 0x1a, 0xa9, 0x0f, 0x9d, 0x33, 0xa9, 0x7f, 0x87, 0xc8, 0x72, 0xf5, 0x84, 0x9f, 0x3a, 0xb3, - 0xee, 0xda, 0x4a, 0x27, 0xba, 0x6b, 0x93, 0x9c, 0x46, 0x66, 0x8f, 0x79, 0x1a, 0xf9, 0x44, 0x01, - 0x97, 0xec, 0x09, 0xd2, 0xa8, 0x02, 0xf8, 0xb4, 0xb4, 0xc6, 0x4c, 0xcb, 0x24, 0x19, 0xd9, 0x5c, - 0x1d, 0x0d, 0x6b, 0x97, 0x26, 0x41, 0xa2, 0x89, 0x5c, 0x63, 0x49, 0x63, 0x89, 0x5d, 0xb1, 0x52, - 0xe6, 0x6e, 0x5e, 0x19, 0xe3, 0xa6, 0xbf, 0x89, 0x7a, 0x79, 0xe8, 0x3f, 0xa1, 0x80, 0x46, 0xfd, - 0xb0, 0x08, 0xce, 0xa5, 0x2a, 0xf9, 0x97, 0x78, 0x8f, 0x98, 0x3a, 0xed, 0xe4, 0x8f, 0x71, 0xda, - 0x59, 0x03, 0x0b, 0xe2, 0xe3, 0x73, 0xe2, 0xb0, 0x14, 0x84, 0x49, 0x2b, 0xde, 0x8d, 0x92, 0x78, - 0xd9, 0x3d, 0x66, 0xf1, 0x98, 0xf7, 0x98, 0x51, 0x2f, 0xc4, 0x7f, 0xa6, 0xbc, 0x7c, 0x4e, 0x7b, - 0x21, 0xfe, 0x3a, 0x95, 0xc4, 0xc3, 0x37, 0xfc, 0x64, 0x0d, 0x18, 0x66, 0x38, 0x43, 0x22, 0xfb, - 0x02, 0x82, 0x04, 0xfa, 0x89, 0x3e, 0xb0, 0xbe, 0x27, 0xf9, 0xc0, 0xba, 0x3a, 0x26, 0xcc, 0x26, - 0xbf, 0xb2, 0x94, 0x1e, 0x48, 0xcb, 0xc7, 0x3f, 0x90, 0xaa, 0x7f, 0x55, 0xc0, 0x73, 0x99, 0xdb, - 0x14, 0x5c, 0x8b, 0x29, 0xcb, 0x6b, 0x09, 0x65, 0xf9, 0x7c, 0xa6, 0x61, 0x44, 0x5e, 0x1a, 0xf2, - 0xdb, 0xcc, 0x9b, 0x63, 0x6f, 0x33, 0x25, 0xa7, 0x94, 0xf1, 0xd7, 0x9a, 0xcd, 0xd7, 0x1e, 0x3e, - 0xaa, 0x4e, 0x7d, 0xfa, 0xa8, 0x3a, 0xf5, 0xd9, 0xa3, 0xea, 0xd4, 0xaf, 0x46, 0x55, 0xe5, 0xe1, - 0xa8, 0xaa, 0x7c, 0x3a, 0xaa, 0x2a, 0x9f, 0x8d, 0xaa, 0xca, 0x3f, 0x46, 0x55, 0xe5, 0x77, 0x9f, - 0x57, 0xa7, 0xee, 0xc1, 0xf4, 0x3f, 0x36, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x67, 0x59, 0x8d, - 0x9b, 0xdf, 0x29, 0x00, 0x00, + 0x28, 0xec, 0x97, 0xcc, 0x4d, 0xee, 0xe9, 0xcd, 0x8d, 0xfa, 0xeb, 0x1c, 0x28, 0x47, 0x5c, 0x3e, + 0x05, 0xa9, 0xf2, 0x56, 0x4c, 0xaa, 0x48, 0x3f, 0xfe, 0x44, 0xe7, 0x30, 0x4b, 0xab, 0x6c, 0x26, + 0xb4, 0xca, 0x77, 0xc7, 0x11, 0x1d, 0x2d, 0x56, 0xfe, 0x95, 0x03, 0x4b, 0x11, 0x74, 0xa8, 0x56, + 0xbe, 0x1f, 0x53, 0x2b, 0xab, 0x09, 0xb5, 0x52, 0x91, 0xd9, 0x3c, 0x93, 0x2b, 0xe3, 0xe5, 0xca, + 0x9f, 0x14, 0xb0, 0x10, 0x99, 0xbb, 0x53, 0xd0, 0x2b, 0xeb, 0x71, 0xbd, 0x52, 0x1b, 0x13, 0x2f, + 0x19, 0x82, 0xe5, 0x16, 0x58, 0x8c, 0x80, 0xb6, 0x9d, 0xae, 0x66, 0x62, 0xdd, 0x85, 0x2f, 0x80, + 0xa2, 0x4b, 0xb1, 0x43, 0xfd, 0xec, 0xf6, 0x6d, 0xdb, 0xac, 0x11, 0x79, 0x7d, 0xea, 0xbf, 0x15, + 0xd0, 0x88, 0x18, 0xef, 0x10, 0xc7, 0xd5, 0x5c, 0x4a, 0x4c, 0x7a, 0xd7, 0xd2, 0xfb, 0x06, 0x69, + 0xe9, 0x58, 0x33, 0x10, 0x61, 0x0d, 0x9a, 0x65, 0xee, 0x58, 0xba, 0xd6, 0x19, 0x40, 0x0c, 0xca, + 0x1f, 0xee, 0x13, 0x73, 0x9d, 0xe8, 0x84, 0x8a, 0xcf, 0x1b, 0xb3, 0xcd, 0x37, 0xfd, 0xdb, 0xfe, + 0xf7, 0xc2, 0xae, 0xc7, 0xc3, 0xda, 0xea, 0x24, 0x8c, 0x3c, 0x38, 0xa3, 0x9c, 0xf0, 0x67, 0x00, + 0xb0, 0xc7, 0x76, 0x07, 0xfb, 0x1f, 0x3b, 0x66, 0x9b, 0x6f, 0xf8, 0x29, 0xfc, 0x5e, 0xd0, 0x73, + 0xac, 0x17, 0x44, 0x18, 0xd5, 0xdf, 0x95, 0x62, 0x4b, 0xfd, 0x8d, 0xbf, 0x5b, 0xfa, 0x05, 0x58, + 0x3a, 0x0c, 0x67, 0xc7, 0x07, 0x30, 0x4d, 0xc4, 0xe2, 0xee, 0x45, 0x29, 0xbd, 0x6c, 0x5e, 0x43, + 0x25, 0x76, 0x57, 0x42, 0x87, 0xa4, 0x2f, 0x81, 0xaf, 0x82, 0x32, 0xd3, 0x32, 0x5a, 0x87, 0x6c, + 0x61, 0xc3, 0x4f, 0xc3, 0xe0, 0xeb, 0x50, 0x3b, 0xec, 0x42, 0x51, 0x1c, 0xdc, 0x07, 0x8b, 0xb6, + 0xd5, 0xdd, 0xc4, 0x26, 0xee, 0x11, 0x56, 0xa1, 0xbd, 0xa5, 0xe4, 0xb7, 0x4e, 0xb3, 0xcd, 0xd7, + 0xfc, 0x1b, 0x85, 0x9d, 0x34, 0x84, 0x9d, 0xd8, 0x24, 0xcd, 0x3c, 0x08, 0x64, 0x94, 0xd0, 0x48, + 0x7d, 0xcc, 0x9c, 0x49, 0xfd, 0x03, 0x44, 0x96, 0x8f, 0x27, 0xfc, 0x9c, 0x99, 0x75, 0x9f, 0x56, + 0x3a, 0xd1, 0x7d, 0x9a, 0xe4, 0xc4, 0x31, 0x7b, 0xcc, 0x13, 0xc7, 0xa7, 0x0a, 0xb8, 0x64, 0x4f, + 0x90, 0x46, 0x15, 0xc0, 0xa7, 0xa5, 0x35, 0x66, 0x5a, 0x26, 0xc9, 0xc8, 0xe6, 0xea, 0x68, 0x58, + 0xbb, 0x34, 0x09, 0x12, 0x4d, 0xe4, 0x1a, 0x4b, 0x1a, 0x4b, 0xec, 0x7c, 0x95, 0x32, 0x77, 0xf3, + 0xca, 0x18, 0x37, 0xfd, 0x8d, 0xd2, 0xcb, 0x43, 0xff, 0x09, 0x05, 0x34, 0xea, 0x47, 0x45, 0x70, + 0x2e, 0x55, 0xad, 0xbf, 0xc2, 0xbb, 0xc2, 0xd4, 0x89, 0x26, 0x7f, 0x8c, 0x13, 0xcd, 0x1a, 0x58, + 0x10, 0x1f, 0x98, 0x13, 0x07, 0xa2, 0x20, 0x4c, 0x5a, 0xf1, 0x6e, 0x94, 0xc4, 0xcb, 0xee, 0x2a, + 0x8b, 0xc7, 0xbc, 0xab, 0x8c, 0x7a, 0x21, 0xfe, 0x17, 0xe5, 0xe5, 0x73, 0xda, 0x0b, 0xf1, 0xf7, + 0xa8, 0x24, 0x1e, 0xbe, 0xe1, 0x27, 0x6b, 0xc0, 0x30, 0xc3, 0x19, 0x12, 0xd9, 0x17, 0x10, 0x24, + 0xd0, 0x4f, 0xf4, 0x11, 0xf5, 0x7d, 0xc9, 0x47, 0xd4, 0xd5, 0x31, 0x61, 0x36, 0xf9, 0xb5, 0xa4, + 0xf4, 0xd0, 0x59, 0x3e, 0xfe, 0xa1, 0x53, 0xfd, 0x8b, 0x02, 0x9e, 0xcb, 0xdc, 0xa6, 0xe0, 0x5a, + 0x4c, 0x3d, 0x5e, 0x4b, 0xa8, 0xc7, 0xe7, 0x33, 0x0d, 0x23, 0x12, 0xd2, 0x90, 0xdf, 0x58, 0xde, + 0x1c, 0x7b, 0x63, 0x29, 0x39, 0x89, 0x8c, 0xbf, 0xba, 0x6c, 0xbe, 0xfe, 0xf0, 0x51, 0x75, 0xea, + 0xb3, 0x47, 0xd5, 0xa9, 0xcf, 0x1f, 0x55, 0xa7, 0x7e, 0x39, 0xaa, 0x2a, 0x0f, 0x47, 0x55, 0xe5, + 0xb3, 0x51, 0x55, 0xf9, 0x7c, 0x54, 0x55, 0xfe, 0x3e, 0xaa, 0x2a, 0xbf, 0xfd, 0xa2, 0x3a, 0x75, + 0x0f, 0xa6, 0xff, 0x95, 0xf9, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xae, 0x39, 0x4c, 0x13, 0xc3, + 0x29, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { diff --git a/staging/src/k8s.io/api/apps/v1/generated.proto b/staging/src/k8s.io/api/apps/v1/generated.proto index 361d1980412..45b9554f4bb 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1/generated.proto @@ -630,7 +630,7 @@ message StatefulSetOrdinals { // If set, replica ordinals will be numbered // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). // +optional - optional int32 replicaStartOrdinal = 1; + optional int32 start = 1; } // StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go b/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go index 26ac84bbdea..2f1e7c00a18 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.pb.go @@ -728,26 +728,26 @@ func init() { } var fileDescriptor_2a07313e8f66e805 = []byte{ - // 2038 bytes of a gzipped FileDescriptorProto + // 2034 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x52, 0xa2, 0x44, 0x3d, 0x45, 0x54, 0x3c, 0x52, 0x2d, 0x46, 0x69, 0x25, 0x61, 0x6b, - 0x24, 0x4a, 0x62, 0x2f, 0x63, 0x25, 0x0d, 0x12, 0xbb, 0x75, 0x2a, 0x4a, 0x6e, 0xec, 0x40, 0x8a, + 0x15, 0xd7, 0x52, 0xa2, 0x44, 0x3d, 0x45, 0x54, 0x3c, 0x52, 0x2d, 0x46, 0x69, 0x25, 0x61, 0x63, + 0x24, 0x4a, 0x62, 0x2f, 0x63, 0x25, 0x0d, 0x12, 0xbb, 0x75, 0x2b, 0x4a, 0x6e, 0xec, 0x40, 0x8a, 0x94, 0x91, 0x64, 0xa3, 0xe9, 0x07, 0x32, 0x22, 0xc7, 0xd4, 0x46, 0xfb, 0x85, 0xdd, 0x21, 0x63, 0xa2, 0x97, 0xfe, 0x01, 0x05, 0xd2, 0x73, 0xff, 0x8a, 0xf6, 0xd4, 0xa2, 0x45, 0x2f, 0x3d, 0x14, 0x3e, 0x06, 0xbd, 0x34, 0x27, 0xa2, 0x66, 0xae, 0xed, 0xad, 0xbd, 0x18, 0x28, 0x50, 0xcc, 0xec, 0xec, 0xf7, 0xae, 0xb4, 0x2c, 0x60, 0x01, 0xed, 0x8d, 0x3b, 0xef, 0xbd, 0xdf, 0x7b, 0xf3, 0xe6, - 0xbd, 0x37, 0xef, 0x0d, 0xe1, 0xfb, 0x67, 0xef, 0x7a, 0x9a, 0x6e, 0x37, 0xcf, 0x7a, 0x27, 0xd4, + 0xbd, 0x37, 0xef, 0x0d, 0xe1, 0xfb, 0x67, 0xef, 0x79, 0x9a, 0x6e, 0x37, 0xcf, 0x7a, 0x27, 0xd4, 0xb5, 0x28, 0xa3, 0x5e, 0xb3, 0x4f, 0xad, 0x8e, 0xed, 0x36, 0x25, 0x81, 0x38, 0x7a, 0x93, 0x38, 0x8e, 0xd7, 0xec, 0xdf, 0x3c, 0xa1, 0x8c, 0xdc, 0x6c, 0x76, 0xa9, 0x45, 0x5d, 0xc2, 0x68, 0x47, 0x73, 0x5c, 0x9b, 0xd9, 0x68, 0xd9, 0x67, 0xd4, 0x88, 0xa3, 0x6b, 0x9c, 0x51, 0x93, 0x8c, 0x2b, 0x37, 0xba, 0x3a, 0x3b, 0xed, 0x9d, 0x68, 0x6d, 0xdb, 0x6c, 0x76, 0xed, 0xae, 0xdd, 0x14, 0xfc, 0x27, 0xbd, 0x47, 0xe2, 0x4b, 0x7c, 0x88, 0x5f, 0x3e, 0xce, 0x8a, 0x1a, 0x53, 0xd8, 0xb6, 0x5d, - 0xda, 0xec, 0x67, 0x74, 0xad, 0xbc, 0x1d, 0xf1, 0x98, 0xa4, 0x7d, 0xaa, 0x5b, 0xd4, 0x1d, 0x34, + 0xda, 0xec, 0x67, 0x74, 0xad, 0xbc, 0x13, 0xf1, 0x98, 0xa4, 0x7d, 0xaa, 0x5b, 0xd4, 0x1d, 0x34, 0x9d, 0xb3, 0x2e, 0x5f, 0xf0, 0x9a, 0x26, 0x65, 0x24, 0x4f, 0xaa, 0x59, 0x24, 0xe5, 0xf6, 0x2c, - 0xa6, 0x9b, 0x34, 0x23, 0xf0, 0xce, 0x45, 0x02, 0x5e, 0xfb, 0x94, 0x9a, 0x24, 0x23, 0xf7, 0x56, + 0xa6, 0x9b, 0x34, 0x23, 0xf0, 0xee, 0x45, 0x02, 0x5e, 0xfb, 0x94, 0x9a, 0x24, 0x23, 0xf7, 0x76, 0x91, 0x5c, 0x8f, 0xe9, 0x46, 0x53, 0xb7, 0x98, 0xc7, 0xdc, 0xb4, 0x90, 0xfa, 0x2f, 0x05, 0xd0, 0xb6, 0x6d, 0x31, 0xd7, 0x36, 0x0c, 0xea, 0x62, 0xda, 0xd7, 0x3d, 0xdd, 0xb6, 0xd0, 0xa7, 0x50, - 0xe3, 0xfb, 0xe9, 0x10, 0x46, 0x1a, 0xca, 0xba, 0xb2, 0x31, 0xb7, 0xf9, 0xa6, 0x16, 0x79, 0x3a, + 0xe3, 0xfb, 0xe9, 0x10, 0x46, 0x1a, 0xca, 0xba, 0xb2, 0x31, 0xb7, 0xf9, 0x96, 0x16, 0x79, 0x3a, 0x84, 0xd7, 0x9c, 0xb3, 0x2e, 0x5f, 0xf0, 0x34, 0xce, 0xad, 0xf5, 0x6f, 0x6a, 0xfb, 0x27, 0x9f, 0xd1, 0x36, 0xdb, 0xa3, 0x8c, 0xb4, 0xd0, 0x93, 0xe1, 0xda, 0xc4, 0x68, 0xb8, 0x06, 0xd1, 0x1a, 0x0e, 0x51, 0xd1, 0x3e, 0x4c, 0x09, 0xf4, 0x8a, 0x40, 0xbf, 0x51, 0x88, 0x2e, 0x37, 0xad, 0x61, @@ -755,108 +755,108 @@ var fileDescriptor_2a07313e8f66e805 = []byte{ 0x05, 0x10, 0xba, 0x0e, 0x35, 0x57, 0x9a, 0xdf, 0x98, 0x5c, 0x57, 0x36, 0x26, 0x5b, 0x2f, 0x4a, 0xae, 0x5a, 0xb0, 0x2d, 0x1c, 0x72, 0xa8, 0x4f, 0x14, 0xb8, 0x9a, 0xdd, 0xf7, 0xae, 0xee, 0x31, 0xf4, 0xe3, 0xcc, 0xde, 0xb5, 0x72, 0x7b, 0xe7, 0xd2, 0x62, 0xe7, 0xa1, 0xe2, 0x60, 0x25, 0xb6, - 0xef, 0x03, 0xa8, 0xea, 0x8c, 0x9a, 0x5e, 0xa3, 0xb2, 0x3e, 0xb9, 0x31, 0xb7, 0xf9, 0x86, 0x56, + 0xef, 0x03, 0xa8, 0xea, 0x8c, 0x9a, 0x5e, 0xa3, 0xb2, 0x3e, 0xb9, 0x31, 0xb7, 0xf9, 0xa6, 0x56, 0x10, 0xc0, 0x5a, 0xd6, 0xba, 0xd6, 0xbc, 0xc4, 0xad, 0xde, 0xe7, 0x08, 0xd8, 0x07, 0x52, 0x7f, 0x51, 0x01, 0xd8, 0xa1, 0x8e, 0x61, 0x0f, 0x4c, 0x6a, 0xb1, 0x4b, 0x38, 0xba, 0xfb, 0x30, 0xe5, - 0x39, 0xb4, 0x2d, 0x8f, 0xee, 0xd5, 0xc2, 0x1d, 0x44, 0x46, 0x1d, 0x3a, 0xb4, 0x1d, 0x1d, 0x1a, + 0x39, 0xb4, 0x2d, 0x8f, 0xee, 0xb5, 0xc2, 0x1d, 0x44, 0x46, 0x1d, 0x3a, 0xb4, 0x1d, 0x1d, 0x1a, 0xff, 0xc2, 0x02, 0x02, 0x7d, 0x0c, 0xd3, 0x1e, 0x23, 0xac, 0xe7, 0x89, 0x23, 0x9b, 0xdb, 0x7c, - 0xad, 0x0c, 0x98, 0x10, 0x68, 0xd5, 0x25, 0xdc, 0xb4, 0xff, 0x8d, 0x25, 0x90, 0xfa, 0xd7, 0x49, + 0xbd, 0x0c, 0x98, 0x10, 0x68, 0xd5, 0x25, 0xdc, 0xb4, 0xff, 0x8d, 0x25, 0x90, 0xfa, 0xd7, 0x49, 0x58, 0x8c, 0x98, 0xb7, 0x6d, 0xab, 0xa3, 0x33, 0x1e, 0xd2, 0xb7, 0x61, 0x8a, 0x0d, 0x1c, 0x2a, - 0x7c, 0x32, 0xdb, 0x7a, 0x35, 0x30, 0xe6, 0x68, 0xe0, 0xd0, 0x67, 0xc3, 0xb5, 0xe5, 0x1c, 0x11, - 0x4e, 0xc2, 0x42, 0x08, 0xed, 0x86, 0x76, 0x56, 0x84, 0xf8, 0xdb, 0x49, 0xe5, 0xcf, 0x86, 0x6b, + 0x7c, 0x32, 0xdb, 0x7a, 0x2d, 0x30, 0xe6, 0x68, 0xe0, 0xd0, 0x67, 0xc3, 0xb5, 0xe5, 0x1c, 0x11, + 0x4e, 0xc2, 0x42, 0x08, 0xed, 0x86, 0x76, 0x56, 0x84, 0xf8, 0x3b, 0x49, 0xe5, 0xcf, 0x86, 0x6b, 0x39, 0x05, 0x44, 0x0b, 0x91, 0x92, 0x26, 0xa2, 0xcf, 0xa0, 0x6e, 0x10, 0x8f, 0x1d, 0x3b, 0x1d, - 0xc2, 0xe8, 0x91, 0x6e, 0xd2, 0xc6, 0xb4, 0xd8, 0xfd, 0xeb, 0xe5, 0x0e, 0x8a, 0x4b, 0xb4, 0xae, + 0xc2, 0xe8, 0x91, 0x6e, 0xd2, 0xc6, 0xb4, 0xd8, 0xfd, 0x1b, 0xe5, 0x0e, 0x8a, 0x4b, 0xb4, 0xae, 0x4a, 0x0b, 0xea, 0xbb, 0x09, 0x24, 0x9c, 0x42, 0x46, 0x7d, 0x40, 0x7c, 0xe5, 0xc8, 0x25, 0x96, 0xe7, 0xef, 0x8a, 0xeb, 0x9b, 0x19, 0x5b, 0xdf, 0x8a, 0xd4, 0x87, 0x76, 0x33, 0x68, 0x38, 0x47, - 0x03, 0x7a, 0x05, 0xa6, 0x5d, 0x4a, 0x3c, 0xdb, 0x6a, 0x4c, 0x09, 0x8f, 0x85, 0xc7, 0x85, 0xc5, - 0x2a, 0x96, 0x54, 0xf4, 0x1a, 0xcc, 0x98, 0xd4, 0xf3, 0x48, 0x97, 0x36, 0xaa, 0x82, 0x71, 0x41, + 0x03, 0x7a, 0x15, 0xa6, 0x5d, 0x4a, 0x3c, 0xdb, 0x6a, 0x4c, 0x09, 0x8f, 0x85, 0xc7, 0x85, 0xc5, + 0x2a, 0x96, 0x54, 0xf4, 0x3a, 0xcc, 0x98, 0xd4, 0xf3, 0x48, 0x97, 0x36, 0xaa, 0x82, 0x71, 0x41, 0x32, 0xce, 0xec, 0xf9, 0xcb, 0x38, 0xa0, 0xab, 0xbf, 0x53, 0xa0, 0x1e, 0x1d, 0xd3, 0x25, 0xe4, - 0xea, 0xbd, 0x64, 0xae, 0x7e, 0xbb, 0x44, 0x70, 0x16, 0xe4, 0xe8, 0xdf, 0x2b, 0x80, 0x22, 0x26, - 0x6c, 0x1b, 0xc6, 0x09, 0x69, 0x9f, 0xa1, 0x75, 0x98, 0xb2, 0x88, 0x19, 0xc4, 0x64, 0x98, 0x20, - 0x1f, 0x11, 0x93, 0x62, 0x41, 0x41, 0x5f, 0x28, 0x80, 0x7a, 0xe2, 0x34, 0x3b, 0x5b, 0x96, 0x65, - 0x33, 0xc2, 0x1d, 0x1c, 0x18, 0xb4, 0x5d, 0xc2, 0xa0, 0x40, 0x97, 0x76, 0x9c, 0x41, 0xb9, 0x6b, - 0x31, 0x77, 0x10, 0x1d, 0x6c, 0x96, 0x01, 0xe7, 0xa8, 0x46, 0x3f, 0x02, 0x70, 0x25, 0xe6, 0x91, - 0x2d, 0xd3, 0xb6, 0xb8, 0x06, 0x04, 0xea, 0xb7, 0x6d, 0xeb, 0x91, 0xde, 0x8d, 0x0a, 0x0b, 0x0e, - 0x21, 0x70, 0x0c, 0x6e, 0xe5, 0x2e, 0x2c, 0x17, 0xd8, 0x89, 0x5e, 0x84, 0xc9, 0x33, 0x3a, 0xf0, - 0x5d, 0x85, 0xf9, 0x4f, 0xb4, 0x04, 0xd5, 0x3e, 0x31, 0x7a, 0xd4, 0xcf, 0x49, 0xec, 0x7f, 0xdc, - 0xaa, 0xbc, 0xab, 0xa8, 0xbf, 0xae, 0xc6, 0x23, 0x85, 0xd7, 0x1b, 0xb4, 0xc1, 0xaf, 0x07, 0xc7, - 0xd0, 0xdb, 0xc4, 0x13, 0x18, 0xd5, 0xd6, 0x0b, 0xfe, 0xd5, 0xe0, 0xaf, 0xe1, 0x90, 0x8a, 0x7e, - 0x02, 0x35, 0x8f, 0x1a, 0xb4, 0xcd, 0x6c, 0x57, 0x96, 0xb8, 0xb7, 0x4a, 0xc6, 0x14, 0x39, 0xa1, - 0xc6, 0xa1, 0x14, 0xf5, 0xe1, 0x83, 0x2f, 0x1c, 0x42, 0xa2, 0x8f, 0xa1, 0xc6, 0xa8, 0xe9, 0x18, - 0x84, 0x51, 0xe9, 0xbd, 0x44, 0x5c, 0xf1, 0xda, 0xc1, 0xc1, 0x0e, 0xec, 0xce, 0x91, 0x64, 0x13, - 0xd5, 0x33, 0x8c, 0xd3, 0x60, 0x15, 0x87, 0x30, 0xe8, 0x87, 0x50, 0xf3, 0x18, 0xbf, 0xd5, 0xbb, - 0x03, 0x91, 0x6d, 0xe7, 0x5d, 0x2b, 0xf1, 0x3a, 0xea, 0x8b, 0x44, 0xd0, 0xc1, 0x0a, 0x0e, 0xe1, - 0xd0, 0x16, 0x2c, 0x98, 0xba, 0x85, 0x29, 0xe9, 0x0c, 0x0e, 0x69, 0xdb, 0xb6, 0x3a, 0x9e, 0x48, - 0xd3, 0x6a, 0x6b, 0x59, 0x0a, 0x2d, 0xec, 0x25, 0xc9, 0x38, 0xcd, 0x8f, 0x76, 0x61, 0x29, 0xb8, - 0x76, 0xef, 0xe9, 0x1e, 0xb3, 0xdd, 0xc1, 0xae, 0x6e, 0xea, 0x4c, 0xd4, 0xbc, 0x6a, 0xab, 0x31, - 0x1a, 0xae, 0x2d, 0xe1, 0x1c, 0x3a, 0xce, 0x95, 0xe2, 0x75, 0xc5, 0x21, 0x3d, 0x8f, 0x76, 0x44, - 0x0d, 0xab, 0x45, 0x75, 0xe5, 0x40, 0xac, 0x62, 0x49, 0x45, 0x0f, 0x13, 0x61, 0x5a, 0x1b, 0x2f, - 0x4c, 0xeb, 0xc5, 0x21, 0x8a, 0x8e, 0x61, 0xd9, 0x71, 0xed, 0xae, 0x4b, 0x3d, 0x6f, 0x87, 0x92, - 0x8e, 0xa1, 0x5b, 0x34, 0xf0, 0xcc, 0xac, 0xd8, 0xd1, 0xcb, 0xa3, 0xe1, 0xda, 0xf2, 0x41, 0x3e, - 0x0b, 0x2e, 0x92, 0x55, 0xff, 0x34, 0x05, 0x2f, 0xa6, 0xef, 0x38, 0xf4, 0x21, 0x20, 0xfb, 0xc4, - 0xa3, 0x6e, 0x9f, 0x76, 0x3e, 0xf0, 0x1b, 0x37, 0xde, 0xdd, 0x28, 0xa2, 0xbb, 0x09, 0xf3, 0x76, - 0x3f, 0xc3, 0x81, 0x73, 0xa4, 0xfc, 0xfe, 0x48, 0x26, 0x40, 0x45, 0x18, 0x1a, 0xeb, 0x8f, 0x32, - 0x49, 0xb0, 0x05, 0x0b, 0x32, 0xf7, 0x03, 0xa2, 0x08, 0xd6, 0xd8, 0xb9, 0x1f, 0x27, 0xc9, 0x38, - 0xcd, 0x8f, 0x6e, 0xc3, 0xbc, 0xcb, 0xe3, 0x20, 0x04, 0x98, 0x11, 0x00, 0xdf, 0x90, 0x00, 0xf3, - 0x38, 0x4e, 0xc4, 0x49, 0x5e, 0xf4, 0x01, 0x5c, 0x21, 0x7d, 0xa2, 0x1b, 0xe4, 0xc4, 0xa0, 0x21, - 0xc0, 0x94, 0x00, 0x78, 0x49, 0x02, 0x5c, 0xd9, 0x4a, 0x33, 0xe0, 0xac, 0x0c, 0xda, 0x83, 0xc5, - 0x9e, 0x95, 0x85, 0xf2, 0x83, 0xf8, 0x65, 0x09, 0xb5, 0x78, 0x9c, 0x65, 0xc1, 0x79, 0x72, 0xe8, - 0x53, 0x80, 0x76, 0x70, 0xab, 0x7b, 0x8d, 0x69, 0x51, 0x86, 0xaf, 0x97, 0x48, 0xb6, 0xb0, 0x15, - 0x88, 0x4a, 0x60, 0xb8, 0xe4, 0xe1, 0x18, 0x26, 0xba, 0x05, 0xf5, 0xb6, 0x6d, 0x18, 0x22, 0xf2, - 0xb7, 0xed, 0x9e, 0xc5, 0x44, 0xf0, 0x56, 0x5b, 0x88, 0x5f, 0xf6, 0xdb, 0x09, 0x0a, 0x4e, 0x71, - 0xaa, 0x7f, 0x50, 0xe2, 0xd7, 0x4c, 0x90, 0xce, 0xe8, 0x56, 0xa2, 0xf5, 0x79, 0x25, 0xd5, 0xfa, - 0x5c, 0xcd, 0x4a, 0xc4, 0x3a, 0x1f, 0x1d, 0xe6, 0x79, 0xf0, 0xeb, 0x56, 0xd7, 0x3f, 0x70, 0x59, - 0x12, 0xdf, 0x3c, 0x37, 0x95, 0x42, 0xee, 0xd8, 0xc5, 0x78, 0x45, 0x9c, 0x79, 0x9c, 0x88, 0x93, - 0xc8, 0xea, 0x1d, 0xa8, 0x27, 0xf3, 0x30, 0xd1, 0xd3, 0x2b, 0x17, 0xf6, 0xf4, 0x5f, 0x2b, 0xb0, - 0x5c, 0xa0, 0x1d, 0x19, 0x50, 0x37, 0xc9, 0xe3, 0xd8, 0x31, 0x5f, 0xd8, 0x1b, 0xf3, 0xa9, 0x49, - 0xf3, 0xa7, 0x26, 0xed, 0xbe, 0xc5, 0xf6, 0xdd, 0x43, 0xe6, 0xea, 0x56, 0xd7, 0x3f, 0x87, 0xbd, - 0x04, 0x16, 0x4e, 0x61, 0xa3, 0x4f, 0xa0, 0x66, 0x92, 0xc7, 0x87, 0x3d, 0xb7, 0x9b, 0xe7, 0xaf, - 0x72, 0x7a, 0xc4, 0xfd, 0xb1, 0x27, 0x51, 0x70, 0x88, 0xa7, 0xfe, 0x51, 0x81, 0xf5, 0xc4, 0x2e, - 0x79, 0xad, 0xa0, 0x8f, 0x7a, 0xc6, 0x21, 0x8d, 0x4e, 0xfc, 0x0d, 0x98, 0x75, 0x88, 0xcb, 0xf4, - 0xb0, 0x5e, 0x54, 0x5b, 0xf3, 0xa3, 0xe1, 0xda, 0xec, 0x41, 0xb0, 0x88, 0x23, 0x7a, 0x8e, 0x6f, - 0x2a, 0xcf, 0xcf, 0x37, 0xea, 0xbf, 0x15, 0xa8, 0x1e, 0xb6, 0x89, 0x41, 0x2f, 0x61, 0x52, 0xd9, - 0x49, 0x4c, 0x2a, 0x6a, 0x61, 0xcc, 0x0a, 0x7b, 0x0a, 0x87, 0x94, 0xdd, 0xd4, 0x90, 0x72, 0xed, - 0x02, 0x9c, 0xf3, 0xe7, 0x93, 0xf7, 0x60, 0x36, 0x54, 0x97, 0x28, 0xca, 0xca, 0x45, 0x45, 0x59, - 0xfd, 0x55, 0x05, 0xe6, 0x62, 0x2a, 0xc6, 0x93, 0xe6, 0xee, 0x8e, 0xf5, 0x35, 0xbc, 0x70, 0x6d, - 0x96, 0xd9, 0x88, 0x16, 0xf4, 0x30, 0x7e, 0xbb, 0x18, 0x35, 0x0b, 0xd9, 0xd6, 0xe6, 0x0e, 0xd4, - 0x19, 0x71, 0xbb, 0x94, 0x05, 0x34, 0xe1, 0xb0, 0xd9, 0x68, 0x56, 0x39, 0x4a, 0x50, 0x71, 0x8a, - 0x7b, 0xe5, 0x36, 0xcc, 0x27, 0x94, 0x8d, 0xd5, 0xf3, 0x7d, 0xc1, 0x9d, 0x13, 0xa5, 0xc2, 0x25, - 0x44, 0xd7, 0x87, 0x89, 0xe8, 0xda, 0x28, 0x76, 0x66, 0x2c, 0x41, 0x8b, 0x62, 0x0c, 0xa7, 0x62, - 0xec, 0xf5, 0x52, 0x68, 0xe7, 0x47, 0xda, 0x3f, 0x2a, 0xb0, 0x14, 0xe3, 0x8e, 0x46, 0xe1, 0xef, - 0x26, 0xee, 0x83, 0x8d, 0xd4, 0x7d, 0xd0, 0xc8, 0x93, 0x79, 0x6e, 0xb3, 0x70, 0xfe, 0x7c, 0x3a, - 0xf9, 0xbf, 0x38, 0x9f, 0xfe, 0x5e, 0x81, 0x85, 0x98, 0xef, 0x2e, 0x61, 0x40, 0xbd, 0x9f, 0x1c, - 0x50, 0xaf, 0x95, 0x09, 0x9a, 0x82, 0x09, 0xf5, 0x01, 0x2c, 0xc6, 0x98, 0xf6, 0xdd, 0x8e, 0x6e, - 0x11, 0xc3, 0x43, 0xef, 0xc3, 0xa2, 0x2c, 0x20, 0x87, 0x8c, 0xb8, 0xc1, 0x7a, 0x70, 0xa5, 0x04, - 0x48, 0x82, 0x86, 0xf3, 0x38, 0xd5, 0x7f, 0x2a, 0xd0, 0x8c, 0x01, 0x1f, 0x50, 0xd7, 0xd3, 0x3d, - 0x46, 0x2d, 0xf6, 0xc0, 0x36, 0x7a, 0x26, 0xdd, 0x36, 0x88, 0x6e, 0x62, 0xca, 0x17, 0x74, 0xdb, - 0x3a, 0xb0, 0x0d, 0xbd, 0x3d, 0x40, 0x04, 0xe6, 0x3e, 0x3f, 0xa5, 0xd6, 0x0e, 0x35, 0x28, 0xa3, - 0x1d, 0x19, 0xa6, 0xef, 0x4b, 0x65, 0x73, 0x0f, 0x23, 0xd2, 0xb3, 0xe1, 0xda, 0x46, 0x19, 0x44, - 0x11, 0xbd, 0x71, 0x4c, 0xf4, 0x53, 0x00, 0xfe, 0x29, 0xea, 0x5c, 0x47, 0x06, 0xf2, 0x9d, 0x20, - 0xdb, 0x1f, 0x86, 0x94, 0xb1, 0x14, 0xc4, 0x10, 0xd5, 0xdf, 0xd4, 0x12, 0xb1, 0xf0, 0x7f, 0x3f, - 0x82, 0xfe, 0x0c, 0x96, 0xfa, 0x91, 0x77, 0x02, 0x06, 0xde, 0xb2, 0x4f, 0xa6, 0x9f, 0xf5, 0x42, - 0xf8, 0x3c, 0xbf, 0xb6, 0xbe, 0x29, 0x95, 0x2c, 0x3d, 0xc8, 0x81, 0xc3, 0xb9, 0x4a, 0xd0, 0x77, - 0x60, 0x8e, 0x8f, 0x3b, 0x7a, 0x9b, 0x7e, 0x44, 0xcc, 0x20, 0x4f, 0x17, 0x83, 0x78, 0x39, 0x8c, - 0x48, 0x38, 0xce, 0x87, 0x4e, 0x61, 0xd1, 0xb1, 0x3b, 0x7b, 0xc4, 0x22, 0x5d, 0xca, 0x9b, 0x44, - 0xff, 0x28, 0xc5, 0x5c, 0x3a, 0xdb, 0x7a, 0x27, 0x18, 0x0d, 0x0e, 0xb2, 0x2c, 0xcf, 0xf8, 0x80, - 0x97, 0x5d, 0x16, 0x41, 0x90, 0x07, 0x89, 0x5c, 0xa8, 0xf7, 0x64, 0xaf, 0x26, 0xc7, 0x74, 0xff, - 0x01, 0x6e, 0xb3, 0x4c, 0xc2, 0x1e, 0x27, 0x24, 0xa3, 0xcb, 0x34, 0xb9, 0x8e, 0x53, 0x1a, 0x0a, - 0xc7, 0xee, 0xda, 0x7f, 0x35, 0x76, 0xe7, 0xbc, 0x03, 0xcc, 0x8e, 0xf9, 0x0e, 0xf0, 0x67, 0x05, - 0xae, 0x39, 0x25, 0x72, 0xa9, 0x01, 0xc2, 0x37, 0xf7, 0xca, 0xf8, 0xa6, 0x4c, 0x6e, 0xb6, 0x36, - 0x46, 0xc3, 0xb5, 0x6b, 0x65, 0x38, 0x71, 0x29, 0xfb, 0xd0, 0x03, 0xa8, 0xd9, 0xb2, 0x3e, 0x36, - 0xe6, 0x84, 0xad, 0xd7, 0xcb, 0xd8, 0x1a, 0xd4, 0x54, 0x3f, 0x2d, 0x83, 0x2f, 0x1c, 0x62, 0xa9, - 0xbf, 0xad, 0xc2, 0x95, 0xcc, 0xed, 0x8e, 0x7e, 0x70, 0xce, 0x1b, 0xc0, 0xd5, 0xe7, 0x36, 0xff, - 0x67, 0x86, 0xf7, 0xc9, 0x31, 0x86, 0xf7, 0x2d, 0x58, 0x68, 0xf7, 0x5c, 0x97, 0x5a, 0x2c, 0x35, - 0xba, 0x87, 0xc1, 0xb2, 0x9d, 0x24, 0xe3, 0x34, 0x7f, 0xde, 0xfb, 0x43, 0x75, 0xcc, 0xf7, 0x87, - 0xb8, 0x15, 0x72, 0x86, 0xf4, 0x53, 0x3b, 0x6b, 0x85, 0x1c, 0x25, 0xd3, 0xfc, 0xbc, 0xa1, 0xf5, - 0x51, 0x43, 0x84, 0x99, 0x64, 0x43, 0x7b, 0x9c, 0xa0, 0xe2, 0x14, 0x77, 0xce, 0x2c, 0x3f, 0x5b, - 0x76, 0x96, 0x47, 0x24, 0xf1, 0xd2, 0x00, 0xa2, 0x8e, 0xde, 0x28, 0x13, 0x67, 0xe5, 0x9f, 0x1a, - 0x72, 0x1f, 0x59, 0xe6, 0xc6, 0x7f, 0x64, 0x51, 0xff, 0xa2, 0xc0, 0x4b, 0x85, 0x15, 0x0b, 0x6d, - 0x25, 0xda, 0xcd, 0x1b, 0xa9, 0x76, 0xf3, 0x5b, 0x85, 0x82, 0xb1, 0x9e, 0xd3, 0xcd, 0x7f, 0x85, - 0x78, 0xaf, 0xdc, 0x2b, 0x44, 0xce, 0x84, 0x7c, 0xf1, 0x73, 0x44, 0xeb, 0x7b, 0x4f, 0x9e, 0xae, - 0x4e, 0x7c, 0xf9, 0x74, 0x75, 0xe2, 0xab, 0xa7, 0xab, 0x13, 0x3f, 0x1f, 0xad, 0x2a, 0x4f, 0x46, - 0xab, 0xca, 0x97, 0xa3, 0x55, 0xe5, 0xab, 0xd1, 0xaa, 0xf2, 0xb7, 0xd1, 0xaa, 0xf2, 0xcb, 0xaf, - 0x57, 0x27, 0x3e, 0x59, 0x2e, 0xf8, 0xa7, 0xfa, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0xbb, - 0x1f, 0x87, 0xdc, 0x1e, 0x00, 0x00, + 0xea, 0xbd, 0x64, 0xae, 0xbe, 0x52, 0x22, 0x38, 0x0b, 0x72, 0xf4, 0xef, 0x15, 0x40, 0x11, 0x13, + 0xb6, 0x0d, 0xe3, 0x84, 0xb4, 0xcf, 0xd0, 0x3a, 0x4c, 0x59, 0xc4, 0x0c, 0x62, 0x32, 0x4c, 0x90, + 0x8f, 0x88, 0x49, 0xb1, 0xa0, 0xa0, 0x2f, 0x14, 0x40, 0x3d, 0x71, 0x9a, 0x9d, 0x2d, 0xcb, 0xb2, + 0x19, 0xe1, 0x0e, 0x0e, 0x0c, 0xda, 0x2e, 0x61, 0x50, 0xa0, 0x4b, 0x3b, 0xce, 0xa0, 0xdc, 0xb5, + 0x98, 0x3b, 0x88, 0x0e, 0x36, 0xcb, 0x80, 0x73, 0x54, 0xa3, 0x1f, 0x01, 0xb8, 0x12, 0xf3, 0xc8, + 0x96, 0x69, 0x5b, 0x5c, 0x03, 0x02, 0xf5, 0xdb, 0xb6, 0xf5, 0x48, 0xef, 0x46, 0x85, 0x05, 0x87, + 0x10, 0x38, 0x06, 0xb7, 0x72, 0x17, 0x96, 0x0b, 0xec, 0x44, 0x2f, 0xc2, 0xe4, 0x19, 0x1d, 0xf8, + 0xae, 0xc2, 0xfc, 0x27, 0x5a, 0x82, 0x6a, 0x9f, 0x18, 0x3d, 0xea, 0xe7, 0x24, 0xf6, 0x3f, 0x6e, + 0x55, 0xde, 0x53, 0xd4, 0x5f, 0x57, 0xe3, 0x91, 0xc2, 0xeb, 0x0d, 0xda, 0xe0, 0xd7, 0x83, 0x63, + 0xe8, 0x6d, 0xe2, 0x09, 0x8c, 0x6a, 0xeb, 0x05, 0xff, 0x6a, 0xf0, 0xd7, 0x70, 0x48, 0x45, 0x3f, + 0x81, 0x9a, 0x47, 0x0d, 0xda, 0x66, 0xb6, 0x2b, 0x4b, 0xdc, 0xdb, 0x25, 0x63, 0x8a, 0x9c, 0x50, + 0xe3, 0x50, 0x8a, 0xfa, 0xf0, 0xc1, 0x17, 0x0e, 0x21, 0xd1, 0xc7, 0x50, 0x63, 0xd4, 0x74, 0x0c, + 0xc2, 0xa8, 0xf4, 0x5e, 0x22, 0xae, 0x78, 0xed, 0xe0, 0x60, 0x07, 0x76, 0xe7, 0x48, 0xb2, 0x89, + 0xea, 0x19, 0xc6, 0x69, 0xb0, 0x8a, 0x43, 0x18, 0xf4, 0x43, 0xa8, 0x79, 0x8c, 0xdf, 0xea, 0xdd, + 0x81, 0xc8, 0xb6, 0xf3, 0xae, 0x95, 0x78, 0x1d, 0xf5, 0x45, 0x22, 0xe8, 0x60, 0x05, 0x87, 0x70, + 0x68, 0x0b, 0x16, 0x4c, 0xdd, 0xc2, 0x94, 0x74, 0x06, 0x87, 0xb4, 0x6d, 0x5b, 0x1d, 0x4f, 0xa4, + 0x69, 0xb5, 0xb5, 0x2c, 0x85, 0x16, 0xf6, 0x92, 0x64, 0x9c, 0xe6, 0x47, 0xbb, 0xb0, 0x14, 0x5c, + 0xbb, 0xf7, 0x74, 0x8f, 0xd9, 0xee, 0x60, 0x57, 0x37, 0x75, 0x26, 0x6a, 0x5e, 0xb5, 0xd5, 0x18, + 0x0d, 0xd7, 0x96, 0x70, 0x0e, 0x1d, 0xe7, 0x4a, 0xf1, 0xba, 0xe2, 0x90, 0x9e, 0x47, 0x3b, 0xa2, + 0x86, 0xd5, 0xa2, 0xba, 0x72, 0x20, 0x56, 0xb1, 0xa4, 0xa2, 0x87, 0x89, 0x30, 0xad, 0x8d, 0x17, + 0xa6, 0xf5, 0xe2, 0x10, 0x45, 0xc7, 0xb0, 0xec, 0xb8, 0x76, 0xd7, 0xa5, 0x9e, 0xb7, 0x43, 0x49, + 0xc7, 0xd0, 0x2d, 0x1a, 0x78, 0x66, 0x56, 0xec, 0xe8, 0xe5, 0xd1, 0x70, 0x6d, 0xf9, 0x20, 0x9f, + 0x05, 0x17, 0xc9, 0xaa, 0x7f, 0x9a, 0x82, 0x17, 0xd3, 0x77, 0x1c, 0xfa, 0x10, 0x90, 0x7d, 0xe2, + 0x51, 0xb7, 0x4f, 0x3b, 0x1f, 0xf8, 0x8d, 0x1b, 0xef, 0x6e, 0x14, 0xd1, 0xdd, 0x84, 0x79, 0xbb, + 0x9f, 0xe1, 0xc0, 0x39, 0x52, 0x7e, 0x7f, 0x24, 0x13, 0xa0, 0x22, 0x0c, 0x8d, 0xf5, 0x47, 0x99, + 0x24, 0xd8, 0x82, 0x05, 0x99, 0xfb, 0x01, 0x51, 0x04, 0x6b, 0xec, 0xdc, 0x8f, 0x93, 0x64, 0x9c, + 0xe6, 0x47, 0xb7, 0x61, 0xde, 0xe5, 0x71, 0x10, 0x02, 0xcc, 0x08, 0x80, 0x6f, 0x48, 0x80, 0x79, + 0x1c, 0x27, 0xe2, 0x24, 0x2f, 0xfa, 0x00, 0xae, 0x90, 0x3e, 0xd1, 0x0d, 0x72, 0x62, 0xd0, 0x10, + 0x60, 0x4a, 0x00, 0xbc, 0x24, 0x01, 0xae, 0x6c, 0xa5, 0x19, 0x70, 0x56, 0x06, 0xed, 0xc1, 0x62, + 0xcf, 0xca, 0x42, 0xf9, 0x41, 0xfc, 0xb2, 0x84, 0x5a, 0x3c, 0xce, 0xb2, 0xe0, 0x3c, 0x39, 0xf4, + 0x29, 0x40, 0x3b, 0xb8, 0xd5, 0xbd, 0xc6, 0xb4, 0x28, 0xc3, 0xd7, 0x4b, 0x24, 0x5b, 0xd8, 0x0a, + 0x44, 0x25, 0x30, 0x5c, 0xf2, 0x70, 0x0c, 0x13, 0xdd, 0x82, 0x7a, 0xdb, 0x36, 0x0c, 0x11, 0xf9, + 0xdb, 0x76, 0xcf, 0x62, 0x22, 0x78, 0xab, 0x2d, 0xc4, 0x2f, 0xfb, 0xed, 0x04, 0x05, 0xa7, 0x38, + 0xd5, 0x3f, 0x28, 0xf1, 0x6b, 0x26, 0x48, 0x67, 0x74, 0x2b, 0xd1, 0xfa, 0xbc, 0x9a, 0x6a, 0x7d, + 0xae, 0x66, 0x25, 0x62, 0x9d, 0x8f, 0x0e, 0xf3, 0x3c, 0xf8, 0x75, 0xab, 0xeb, 0x1f, 0xb8, 0x2c, + 0x89, 0x6f, 0x9d, 0x9b, 0x4a, 0x21, 0x77, 0xec, 0x62, 0xbc, 0x22, 0xce, 0x3c, 0x4e, 0xc4, 0x49, + 0x64, 0xf5, 0x0e, 0xd4, 0x93, 0x79, 0x98, 0xe8, 0xe9, 0x95, 0x0b, 0x7b, 0xfa, 0xaf, 0x15, 0x58, + 0x2e, 0xd0, 0x8e, 0x0c, 0xa8, 0x9b, 0xe4, 0x71, 0xec, 0x98, 0x2f, 0xec, 0x8d, 0xf9, 0xd4, 0xa4, + 0xf9, 0x53, 0x93, 0x76, 0xdf, 0x62, 0xfb, 0xee, 0x21, 0x73, 0x75, 0xab, 0xeb, 0x9f, 0xc3, 0x5e, + 0x02, 0x0b, 0xa7, 0xb0, 0xd1, 0x27, 0x50, 0x33, 0xc9, 0xe3, 0xc3, 0x9e, 0xdb, 0xcd, 0xf3, 0x57, + 0x39, 0x3d, 0xe2, 0xfe, 0xd8, 0x93, 0x28, 0x38, 0xc4, 0x53, 0xff, 0xa8, 0xc0, 0x7a, 0x62, 0x97, + 0xbc, 0x56, 0xd0, 0x47, 0x3d, 0xe3, 0x90, 0x46, 0x27, 0xfe, 0x26, 0xcc, 0x3a, 0xc4, 0x65, 0x7a, + 0x58, 0x2f, 0xaa, 0xad, 0xf9, 0xd1, 0x70, 0x6d, 0xf6, 0x20, 0x58, 0xc4, 0x11, 0x3d, 0xc7, 0x37, + 0x95, 0xe7, 0xe7, 0x1b, 0xf5, 0xdf, 0x0a, 0x54, 0x0f, 0xdb, 0xc4, 0xa0, 0x97, 0x30, 0xa9, 0xec, + 0x24, 0x26, 0x15, 0xb5, 0x30, 0x66, 0x85, 0x3d, 0x85, 0x43, 0xca, 0x6e, 0x6a, 0x48, 0xb9, 0x76, + 0x01, 0xce, 0xf9, 0xf3, 0xc9, 0xfb, 0x30, 0x1b, 0xaa, 0x4b, 0x14, 0x65, 0xe5, 0xa2, 0xa2, 0xac, + 0xfe, 0xaa, 0x02, 0x73, 0x31, 0x15, 0xe3, 0x49, 0x73, 0x77, 0xc7, 0xfa, 0x1a, 0x5e, 0xb8, 0x36, + 0xcb, 0x6c, 0x44, 0x0b, 0x7a, 0x18, 0xbf, 0x5d, 0x8c, 0x9a, 0x85, 0x6c, 0x6b, 0x73, 0x07, 0xea, + 0x8c, 0xb8, 0x5d, 0xca, 0x02, 0x9a, 0x70, 0xd8, 0x6c, 0x34, 0xab, 0x1c, 0x25, 0xa8, 0x38, 0xc5, + 0xbd, 0x72, 0x1b, 0xe6, 0x13, 0xca, 0xc6, 0xea, 0xf9, 0xbe, 0xe0, 0xce, 0x89, 0x52, 0xe1, 0x12, + 0xa2, 0xeb, 0xc3, 0x44, 0x74, 0x6d, 0x14, 0x3b, 0x33, 0x96, 0xa0, 0x45, 0x31, 0x86, 0x53, 0x31, + 0xf6, 0x46, 0x29, 0xb4, 0xf3, 0x23, 0xed, 0x1f, 0x15, 0x58, 0x8a, 0x71, 0x47, 0xa3, 0xf0, 0x77, + 0x12, 0xf7, 0xc1, 0x46, 0xea, 0x3e, 0x68, 0xe4, 0xc9, 0x3c, 0xb7, 0x59, 0x38, 0x7f, 0x3e, 0x9d, + 0xfc, 0x5f, 0x9c, 0x4f, 0x7f, 0xaf, 0xc0, 0x42, 0xcc, 0x77, 0x97, 0x30, 0xa0, 0xde, 0x4f, 0x0e, + 0xa8, 0xd7, 0xca, 0x04, 0x4d, 0xc1, 0x84, 0x7a, 0x0b, 0x16, 0x63, 0x4c, 0xfb, 0x6e, 0x47, 0xb7, + 0x88, 0xe1, 0xa1, 0x57, 0xa0, 0xea, 0x31, 0xe2, 0xb2, 0xe0, 0x12, 0x09, 0x64, 0x0f, 0xf9, 0x22, + 0xf6, 0x69, 0xea, 0x3f, 0x15, 0x68, 0xc6, 0x84, 0x0f, 0xa8, 0xeb, 0xe9, 0x1e, 0xa3, 0x16, 0x7b, + 0x60, 0x1b, 0x3d, 0x93, 0x6e, 0x1b, 0x44, 0x37, 0x31, 0xe5, 0x0b, 0xba, 0x6d, 0x1d, 0xd8, 0x86, + 0xde, 0x1e, 0x20, 0x02, 0x73, 0x9f, 0x9f, 0x52, 0x6b, 0x87, 0x1a, 0x94, 0xd1, 0x8e, 0x0c, 0xc5, + 0xef, 0x49, 0xf8, 0xb9, 0x87, 0x11, 0xe9, 0xd9, 0x70, 0x6d, 0xa3, 0x0c, 0xa2, 0x88, 0xd0, 0x38, + 0x26, 0xfa, 0x29, 0x00, 0xff, 0x14, 0xb5, 0xac, 0x23, 0x83, 0xf5, 0x4e, 0x90, 0xd1, 0x0f, 0x43, + 0xca, 0x58, 0x0a, 0x62, 0x88, 0xea, 0x6f, 0x6a, 0x89, 0xf3, 0xfe, 0xbf, 0x1f, 0x33, 0x7f, 0x06, + 0x4b, 0xfd, 0xc8, 0x3b, 0x01, 0x03, 0x6f, 0xcb, 0x27, 0xd3, 0x4f, 0x77, 0x21, 0x7c, 0x9e, 0x5f, + 0x5b, 0xdf, 0x94, 0x4a, 0x96, 0x1e, 0xe4, 0xc0, 0xe1, 0x5c, 0x25, 0xe8, 0xdb, 0x30, 0xc7, 0x47, + 0x1a, 0xbd, 0x4d, 0x3f, 0x22, 0x66, 0x90, 0x8b, 0x8b, 0x41, 0xbc, 0x1c, 0x46, 0x24, 0x1c, 0xe7, + 0x43, 0xa7, 0xb0, 0xe8, 0xd8, 0x9d, 0x3d, 0x62, 0x91, 0x2e, 0xe5, 0x8d, 0xa0, 0x7f, 0x94, 0x62, + 0xf6, 0x9c, 0x6d, 0xbd, 0x1b, 0xb4, 0xff, 0x07, 0x59, 0x96, 0x67, 0x7c, 0x88, 0xcb, 0x2e, 0x8b, + 0x20, 0xc8, 0x83, 0x44, 0x2e, 0xd4, 0x7b, 0xb2, 0x1f, 0x93, 0xa3, 0xb8, 0xff, 0xc8, 0xb6, 0x59, + 0x26, 0x29, 0x8f, 0x13, 0x92, 0xd1, 0x85, 0x99, 0x5c, 0xc7, 0x29, 0x0d, 0x85, 0xa3, 0x75, 0xed, + 0xbf, 0x1a, 0xad, 0x73, 0x66, 0xfd, 0xd9, 0x31, 0x67, 0xfd, 0x3f, 0x2b, 0x70, 0xcd, 0x29, 0x91, + 0x4b, 0x0d, 0x10, 0xbe, 0xb9, 0x57, 0xc6, 0x37, 0x65, 0x72, 0xb3, 0xb5, 0x31, 0x1a, 0xae, 0x5d, + 0x2b, 0xc3, 0x89, 0x4b, 0xd9, 0x87, 0x1e, 0x40, 0xcd, 0x96, 0x35, 0xb0, 0x31, 0x27, 0x6c, 0xbd, + 0x5e, 0xc6, 0xd6, 0xa0, 0x6e, 0xfa, 0x69, 0x19, 0x7c, 0xe1, 0x10, 0x4b, 0xfd, 0x6d, 0x15, 0xae, + 0x64, 0x6e, 0x70, 0xf4, 0x83, 0x73, 0xe6, 0xfc, 0xab, 0xcf, 0x6d, 0xc6, 0xcf, 0x0c, 0xe8, 0x93, + 0x63, 0x0c, 0xe8, 0x5b, 0xb0, 0xd0, 0xee, 0xb9, 0x2e, 0xb5, 0x58, 0x6a, 0x3c, 0x0f, 0x83, 0x65, + 0x3b, 0x49, 0xc6, 0x69, 0xfe, 0xbc, 0x37, 0x86, 0xea, 0x98, 0x6f, 0x0c, 0x71, 0x2b, 0xe4, 0x9c, + 0xe8, 0xa7, 0x76, 0xd6, 0x0a, 0x39, 0x2e, 0xa6, 0xf9, 0x79, 0xd3, 0xea, 0xa3, 0x86, 0x08, 0x33, + 0xc9, 0xa6, 0xf5, 0x38, 0x41, 0xc5, 0x29, 0xee, 0x9c, 0x79, 0x7d, 0xb6, 0xec, 0xbc, 0x8e, 0x48, + 0xe2, 0x35, 0x01, 0x44, 0x1d, 0xbd, 0x51, 0x26, 0xce, 0xca, 0x3f, 0x27, 0xe4, 0x3e, 0xa4, 0xcc, + 0x8d, 0xff, 0x90, 0xa2, 0xfe, 0x45, 0x81, 0x97, 0x0a, 0x2b, 0x16, 0xda, 0x4a, 0xb4, 0x94, 0x37, + 0x52, 0x2d, 0xe5, 0xb7, 0x0a, 0x05, 0x63, 0x7d, 0xa5, 0x9b, 0xff, 0xd2, 0xf0, 0x7e, 0xb9, 0x97, + 0x86, 0x9c, 0x29, 0xf8, 0xe2, 0x27, 0x87, 0xd6, 0x77, 0x9f, 0x3c, 0x5d, 0x9d, 0xf8, 0xf2, 0xe9, + 0xea, 0xc4, 0x57, 0x4f, 0x57, 0x27, 0x7e, 0x3e, 0x5a, 0x55, 0x9e, 0x8c, 0x56, 0x95, 0x2f, 0x47, + 0xab, 0xca, 0x57, 0xa3, 0x55, 0xe5, 0x6f, 0xa3, 0x55, 0xe5, 0x97, 0x5f, 0xaf, 0x4e, 0x7c, 0xb2, + 0x5c, 0xf0, 0x6f, 0xf4, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x0a, 0xd6, 0x32, 0xc0, 0x1e, + 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.proto b/staging/src/k8s.io/api/apps/v1beta1/generated.proto index a6d1188b994..0ecc4659da0 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.proto @@ -388,7 +388,7 @@ message StatefulSetOrdinals { // If set, replica ordinals will be numbered // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). // +optional - optional int32 replicaStartOrdinal = 1; + optional int32 start = 1; } // StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go b/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go index 7ed6589b29b..6dfb4d5d2a8 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.pb.go @@ -1017,154 +1017,154 @@ func init() { } var fileDescriptor_42fe616264472f7e = []byte{ - // 2349 bytes of a gzipped FileDescriptorProto + // 2345 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xf7, 0xf2, 0x43, 0x26, 0x87, 0x96, 0x64, 0x8f, 0x54, 0x89, 0xb1, 0x5b, 0xd2, 0xd8, 0x18, - 0x8e, 0x12, 0xdb, 0xa4, 0xad, 0x7c, 0x20, 0xb1, 0xdb, 0xb8, 0xa2, 0x94, 0xda, 0x0e, 0xf4, 0xc1, - 0x0c, 0x2d, 0x05, 0x0d, 0xfa, 0xe1, 0x11, 0x39, 0xa6, 0x36, 0x5a, 0xee, 0x2e, 0x76, 0x87, 0x8c, + 0x15, 0xf7, 0xf2, 0x43, 0x26, 0x87, 0x96, 0x64, 0x8f, 0x54, 0x89, 0x91, 0x5b, 0xd2, 0x58, 0x1b, + 0x8e, 0x12, 0xdb, 0xa4, 0xad, 0x7c, 0x20, 0xb1, 0xdb, 0xa4, 0xa2, 0x94, 0xda, 0x0e, 0xf4, 0xc1, + 0x0c, 0x2d, 0x07, 0x0d, 0xfa, 0xe1, 0x11, 0x39, 0xa6, 0x36, 0x5a, 0xee, 0x2e, 0x76, 0x87, 0x8c, 0x89, 0x5e, 0x7a, 0x2d, 0x50, 0xa0, 0xed, 0xb5, 0xff, 0x44, 0xd1, 0x4b, 0x51, 0x34, 0xe8, 0xa5, 0x08, 0x02, 0x1f, 0x83, 0x5e, 0x92, 0x13, 0x51, 0x33, 0xa7, 0xa2, 0xe8, 0xad, 0xbd, 0x18, 0x28, 0x50, 0xcc, 0xec, 0xec, 0xf7, 0xae, 0xb9, 0x54, 0x6c, 0xe5, 0x03, 0xb9, 0x71, 0xe7, 0xbd, 0xf7, - 0x9b, 0xf7, 0x66, 0xde, 0x9b, 0xf7, 0xdb, 0x59, 0x82, 0x1f, 0x1e, 0xbe, 0x6e, 0xd5, 0x14, 0xbd, - 0x7e, 0xd8, 0xdf, 0x27, 0xa6, 0x46, 0x28, 0xb1, 0xea, 0x03, 0xa2, 0x75, 0x74, 0xb3, 0x2e, 0x04, - 0xd8, 0x50, 0xea, 0xd8, 0x30, 0xac, 0xfa, 0xe0, 0xda, 0x3e, 0xa1, 0x78, 0xb5, 0xde, 0x25, 0x1a, - 0x31, 0x31, 0x25, 0x9d, 0x9a, 0x61, 0xea, 0x54, 0x87, 0xcb, 0xb6, 0x62, 0x0d, 0x1b, 0x4a, 0x8d, - 0x29, 0xd6, 0x84, 0xe2, 0xd9, 0x2b, 0x5d, 0x85, 0x1e, 0xf4, 0xf7, 0x6b, 0x6d, 0xbd, 0x57, 0xef, - 0xea, 0x5d, 0xbd, 0xce, 0xf5, 0xf7, 0xfb, 0xf7, 0xf9, 0x13, 0x7f, 0xe0, 0xbf, 0x6c, 0x9c, 0xb3, - 0xb2, 0x6f, 0xc2, 0xb6, 0x6e, 0x92, 0xfa, 0xe0, 0x5a, 0x78, 0xae, 0xb3, 0xaf, 0x78, 0x3a, 0x3d, - 0xdc, 0x3e, 0x50, 0x34, 0x62, 0x0e, 0xeb, 0xc6, 0x61, 0x97, 0x0d, 0x58, 0xf5, 0x1e, 0xa1, 0x38, - 0xce, 0xaa, 0x9e, 0x64, 0x65, 0xf6, 0x35, 0xaa, 0xf4, 0x48, 0xc4, 0xe0, 0xb5, 0x49, 0x06, 0x56, - 0xfb, 0x80, 0xf4, 0x70, 0xc4, 0xee, 0xe5, 0x24, 0xbb, 0x3e, 0x55, 0xd4, 0xba, 0xa2, 0x51, 0x8b, - 0x9a, 0x61, 0x23, 0xf9, 0xbf, 0x12, 0x80, 0xeb, 0xba, 0x46, 0x4d, 0x5d, 0x55, 0x89, 0x89, 0xc8, - 0x40, 0xb1, 0x14, 0x5d, 0x83, 0xf7, 0x40, 0x81, 0xc5, 0xd3, 0xc1, 0x14, 0x97, 0xa5, 0xf3, 0xd2, - 0x4a, 0x69, 0xf5, 0x6a, 0xcd, 0x5b, 0x69, 0x17, 0xbe, 0x66, 0x1c, 0x76, 0xd9, 0x80, 0x55, 0x63, - 0xda, 0xb5, 0xc1, 0xb5, 0xda, 0xce, 0xfe, 0xfb, 0xa4, 0x4d, 0xb7, 0x08, 0xc5, 0x0d, 0xf8, 0x70, - 0x54, 0x3d, 0x31, 0x1e, 0x55, 0x81, 0x37, 0x86, 0x5c, 0x54, 0xb8, 0x03, 0x72, 0x1c, 0x3d, 0xc3, - 0xd1, 0xaf, 0x24, 0xa2, 0x8b, 0xa0, 0x6b, 0x08, 0x7f, 0xf0, 0xd6, 0x03, 0x4a, 0x34, 0xe6, 0x5e, - 0xe3, 0x94, 0x80, 0xce, 0x6d, 0x60, 0x8a, 0x11, 0x07, 0x82, 0x97, 0x41, 0xc1, 0x14, 0xee, 0x97, - 0xb3, 0xe7, 0xa5, 0x95, 0x6c, 0xe3, 0xb4, 0xd0, 0x2a, 0x38, 0x61, 0x21, 0x57, 0x43, 0x7e, 0x28, - 0x81, 0xa5, 0x68, 0xdc, 0x9b, 0x8a, 0x45, 0xe1, 0x4f, 0x22, 0xb1, 0xd7, 0xd2, 0xc5, 0xce, 0xac, - 0x79, 0xe4, 0xee, 0xc4, 0xce, 0x88, 0x2f, 0xee, 0x26, 0xc8, 0x2b, 0x94, 0xf4, 0xac, 0x72, 0xe6, - 0x7c, 0x76, 0xa5, 0xb4, 0x7a, 0xa9, 0x96, 0x90, 0xc0, 0xb5, 0xa8, 0x77, 0x8d, 0x59, 0x81, 0x9b, - 0xbf, 0xc3, 0x10, 0x90, 0x0d, 0x24, 0xff, 0x2a, 0x03, 0x8a, 0x1b, 0x98, 0xf4, 0x74, 0xad, 0x45, - 0xe8, 0x31, 0xec, 0xdc, 0x6d, 0x90, 0xb3, 0x0c, 0xd2, 0x16, 0x3b, 0x77, 0x31, 0x31, 0x00, 0xd7, - 0xa7, 0x96, 0x41, 0xda, 0xde, 0x96, 0xb1, 0x27, 0xc4, 0x11, 0x60, 0x13, 0xcc, 0x58, 0x14, 0xd3, - 0xbe, 0xc5, 0x37, 0xac, 0xb4, 0xba, 0x92, 0x02, 0x8b, 0xeb, 0x37, 0xe6, 0x04, 0xda, 0x8c, 0xfd, - 0x8c, 0x04, 0x8e, 0xfc, 0xcf, 0x0c, 0x80, 0xae, 0xee, 0xba, 0xae, 0x75, 0x14, 0xca, 0xd2, 0xf9, - 0x3a, 0xc8, 0xd1, 0xa1, 0x41, 0xf8, 0x82, 0x14, 0x1b, 0x17, 0x1d, 0x57, 0xee, 0x0e, 0x0d, 0xf2, - 0x78, 0x54, 0x5d, 0x8a, 0x5a, 0x30, 0x09, 0xe2, 0x36, 0x70, 0xd3, 0x75, 0x32, 0xc3, 0xad, 0x5f, - 0x09, 0x4e, 0xfd, 0x78, 0x54, 0x8d, 0x39, 0x3b, 0x6a, 0x2e, 0x52, 0xd0, 0x41, 0x38, 0x00, 0x50, - 0xc5, 0x16, 0xbd, 0x6b, 0x62, 0xcd, 0xb2, 0x67, 0x52, 0x7a, 0x44, 0x84, 0xff, 0x52, 0xba, 0x8d, - 0x62, 0x16, 0x8d, 0xb3, 0xc2, 0x0b, 0xb8, 0x19, 0x41, 0x43, 0x31, 0x33, 0xc0, 0x8b, 0x60, 0xc6, - 0x24, 0xd8, 0xd2, 0xb5, 0x72, 0x8e, 0x47, 0xe1, 0x2e, 0x20, 0xe2, 0xa3, 0x48, 0x48, 0xe1, 0x8b, - 0xe0, 0x64, 0x8f, 0x58, 0x16, 0xee, 0x92, 0x72, 0x9e, 0x2b, 0xce, 0x0b, 0xc5, 0x93, 0x5b, 0xf6, - 0x30, 0x72, 0xe4, 0xf2, 0x9f, 0x24, 0x30, 0xeb, 0xae, 0xdc, 0x31, 0x54, 0xce, 0xad, 0x60, 0xe5, - 0xc8, 0x93, 0x93, 0x25, 0xa1, 0x60, 0x3e, 0xca, 0xfa, 0x1c, 0x67, 0xe9, 0x08, 0x7f, 0x0a, 0x0a, - 0x16, 0x51, 0x49, 0x9b, 0xea, 0xa6, 0x70, 0xfc, 0xe5, 0x94, 0x8e, 0xe3, 0x7d, 0xa2, 0xb6, 0x84, - 0x69, 0xe3, 0x14, 0xf3, 0xdc, 0x79, 0x42, 0x2e, 0x24, 0x7c, 0x07, 0x14, 0x28, 0xe9, 0x19, 0x2a, - 0xa6, 0x44, 0x54, 0xcd, 0xf3, 0x7e, 0xe7, 0x59, 0xce, 0x30, 0xb0, 0xa6, 0xde, 0xb9, 0x2b, 0xd4, - 0x78, 0xc9, 0xb8, 0x8b, 0xe1, 0x8c, 0x22, 0x17, 0x06, 0x1a, 0x60, 0xae, 0x6f, 0x74, 0x98, 0x26, - 0x65, 0xc7, 0x79, 0x77, 0x28, 0x72, 0xe8, 0xea, 0xe4, 0x55, 0xd9, 0x0d, 0xd8, 0x35, 0x96, 0xc4, - 0x2c, 0x73, 0xc1, 0x71, 0x14, 0xc2, 0x87, 0x6b, 0x60, 0xbe, 0xa7, 0x68, 0x88, 0xe0, 0xce, 0xb0, - 0x45, 0xda, 0xba, 0xd6, 0xb1, 0x78, 0x2a, 0xe5, 0x1b, 0xcb, 0x02, 0x60, 0x7e, 0x2b, 0x28, 0x46, - 0x61, 0x7d, 0xb8, 0x09, 0x16, 0x9d, 0x03, 0xf8, 0xb6, 0x62, 0x51, 0xdd, 0x1c, 0x6e, 0x2a, 0x3d, - 0x85, 0x96, 0x67, 0x38, 0x4e, 0x79, 0x3c, 0xaa, 0x2e, 0xa2, 0x18, 0x39, 0x8a, 0xb5, 0x92, 0x7f, - 0x37, 0x03, 0xe6, 0x43, 0xe7, 0x02, 0xdc, 0x03, 0x4b, 0xed, 0xbe, 0x69, 0x12, 0x8d, 0x6e, 0xf7, - 0x7b, 0xfb, 0xc4, 0x6c, 0xb5, 0x0f, 0x48, 0xa7, 0xaf, 0x92, 0x0e, 0xdf, 0xd6, 0x7c, 0xa3, 0x22, - 0x7c, 0x5d, 0x5a, 0x8f, 0xd5, 0x42, 0x09, 0xd6, 0xf0, 0x6d, 0x00, 0x35, 0x3e, 0xb4, 0xa5, 0x58, - 0x96, 0x8b, 0x99, 0xe1, 0x98, 0x6e, 0x29, 0x6e, 0x47, 0x34, 0x50, 0x8c, 0x15, 0xf3, 0xb1, 0x43, - 0x2c, 0xc5, 0x24, 0x9d, 0xb0, 0x8f, 0xd9, 0xa0, 0x8f, 0x1b, 0xb1, 0x5a, 0x28, 0xc1, 0x1a, 0xbe, - 0x0a, 0x4a, 0xf6, 0x6c, 0x7c, 0xcd, 0xc5, 0xe6, 0x2c, 0x08, 0xb0, 0xd2, 0xb6, 0x27, 0x42, 0x7e, - 0x3d, 0x16, 0x9a, 0xbe, 0x6f, 0x11, 0x73, 0x40, 0x3a, 0xb7, 0x6c, 0x72, 0xc0, 0x3a, 0x68, 0x9e, - 0x77, 0x50, 0x37, 0xb4, 0x9d, 0x88, 0x06, 0x8a, 0xb1, 0x62, 0xa1, 0xd9, 0x59, 0x13, 0x09, 0x6d, - 0x26, 0x18, 0xda, 0x6e, 0xac, 0x16, 0x4a, 0xb0, 0x66, 0xb9, 0x67, 0xbb, 0xbc, 0x36, 0xc0, 0x8a, - 0x8a, 0xf7, 0x55, 0x52, 0x3e, 0x19, 0xcc, 0xbd, 0xed, 0xa0, 0x18, 0x85, 0xf5, 0xe1, 0x2d, 0x70, - 0xc6, 0x1e, 0xda, 0xd5, 0xb0, 0x0b, 0x52, 0xe0, 0x20, 0xcf, 0x09, 0x90, 0x33, 0xdb, 0x61, 0x05, - 0x14, 0xb5, 0x81, 0xd7, 0xc1, 0x5c, 0x5b, 0x57, 0x55, 0x9e, 0x8f, 0xeb, 0x7a, 0x5f, 0xa3, 0xe5, - 0x22, 0x47, 0x81, 0xac, 0x86, 0xd6, 0x03, 0x12, 0x14, 0xd2, 0x84, 0x3f, 0x07, 0xa0, 0xed, 0x34, - 0x06, 0xab, 0x0c, 0x26, 0x30, 0x80, 0x68, 0x5b, 0xf2, 0x3a, 0xb3, 0x3b, 0x64, 0x21, 0x1f, 0xa4, - 0xfc, 0x91, 0x04, 0x96, 0x13, 0x0a, 0x1d, 0xde, 0x0c, 0x34, 0xc1, 0x4b, 0xa1, 0x26, 0x78, 0x2e, - 0xc1, 0xcc, 0xd7, 0x09, 0x0f, 0xc0, 0x2c, 0x23, 0x24, 0x8a, 0xd6, 0xb5, 0x55, 0xc4, 0x59, 0x56, - 0x4f, 0x0c, 0x00, 0xf9, 0xb5, 0xbd, 0x53, 0xf9, 0xcc, 0x78, 0x54, 0x9d, 0x0d, 0xc8, 0x50, 0x10, - 0x58, 0xfe, 0x75, 0x06, 0x80, 0x0d, 0x62, 0xa8, 0xfa, 0xb0, 0x47, 0xb4, 0xe3, 0xe0, 0x34, 0x77, - 0x02, 0x9c, 0xe6, 0x85, 0xe4, 0x2d, 0x71, 0x9d, 0x4a, 0x24, 0x35, 0xef, 0x84, 0x48, 0xcd, 0x8b, - 0x69, 0xc0, 0x9e, 0xcc, 0x6a, 0x3e, 0xcd, 0x82, 0x05, 0x4f, 0xd9, 0xa3, 0x35, 0x37, 0x02, 0x3b, - 0xfa, 0x42, 0x68, 0x47, 0x97, 0x63, 0x4c, 0x9e, 0x19, 0xaf, 0x79, 0x1f, 0xcc, 0x31, 0xd6, 0x61, - 0xef, 0x1f, 0xe7, 0x34, 0x33, 0x53, 0x73, 0x1a, 0xb7, 0x13, 0x6d, 0x06, 0x90, 0x50, 0x08, 0x39, - 0x81, 0x43, 0x9d, 0xfc, 0x3a, 0x72, 0xa8, 0x3f, 0x4b, 0x60, 0xce, 0xdb, 0xa6, 0x63, 0x20, 0x51, - 0xb7, 0x83, 0x24, 0xea, 0xf9, 0x14, 0xc9, 0x99, 0xc0, 0xa2, 0x3e, 0xcd, 0xf9, 0x5d, 0xe7, 0x34, - 0x6a, 0x85, 0xbd, 0x82, 0x19, 0xaa, 0xd2, 0xc6, 0x96, 0xe8, 0xb7, 0xa7, 0xec, 0xd7, 0x2f, 0x7b, - 0x0c, 0xb9, 0xd2, 0x00, 0xe1, 0xca, 0x3c, 0x5b, 0xc2, 0x95, 0x7d, 0x3a, 0x84, 0xeb, 0xc7, 0xa0, - 0x60, 0x39, 0x54, 0x2b, 0xc7, 0x21, 0x2f, 0xa5, 0x2a, 0x6c, 0xc1, 0xb2, 0x5c, 0x68, 0x97, 0x5f, - 0xb9, 0x70, 0x71, 0xcc, 0x2a, 0xff, 0x65, 0x32, 0x2b, 0x96, 0xe8, 0x06, 0xee, 0x5b, 0xa4, 0xc3, - 0x8b, 0xaa, 0xe0, 0x25, 0x7a, 0x93, 0x8f, 0x22, 0x21, 0x85, 0xbb, 0x60, 0xd9, 0x30, 0xf5, 0xae, - 0x49, 0x2c, 0x6b, 0x83, 0xe0, 0x8e, 0xaa, 0x68, 0xc4, 0x09, 0xc0, 0xee, 0x89, 0xe7, 0xc6, 0xa3, - 0xea, 0x72, 0x33, 0x5e, 0x05, 0x25, 0xd9, 0xca, 0x7f, 0xcb, 0x81, 0xd3, 0xe1, 0xb3, 0x31, 0x81, - 0xa6, 0x48, 0x47, 0xa2, 0x29, 0x97, 0x7d, 0x79, 0x6a, 0x73, 0x38, 0xdf, 0x55, 0x41, 0x24, 0x57, - 0xd7, 0xc0, 0xbc, 0xa0, 0x25, 0x8e, 0x50, 0x10, 0x35, 0x77, 0x7b, 0x76, 0x83, 0x62, 0x14, 0xd6, - 0x87, 0x37, 0xc0, 0xac, 0xc9, 0x99, 0x97, 0x03, 0x60, 0xb3, 0x97, 0xef, 0x08, 0x80, 0x59, 0xe4, - 0x17, 0xa2, 0xa0, 0x2e, 0x63, 0x2e, 0x1e, 0x21, 0x71, 0x00, 0x72, 0x41, 0xe6, 0xb2, 0x16, 0x56, - 0x40, 0x51, 0x1b, 0xb8, 0x05, 0x16, 0xfa, 0x5a, 0x14, 0xca, 0xce, 0xb5, 0x73, 0x02, 0x6a, 0x61, - 0x37, 0xaa, 0x82, 0xe2, 0xec, 0xe0, 0xbd, 0x00, 0x99, 0x99, 0xe1, 0xe7, 0xc9, 0xe5, 0x14, 0x35, - 0x91, 0x9a, 0xcd, 0xc4, 0x50, 0xad, 0x42, 0x5a, 0xaa, 0x25, 0x7f, 0x28, 0x01, 0x18, 0xad, 0xc3, - 0x89, 0x37, 0x01, 0x11, 0x0b, 0x5f, 0xc7, 0x54, 0xe2, 0xf9, 0xcf, 0xd5, 0x94, 0xfc, 0xc7, 0x3b, - 0x50, 0xd3, 0x11, 0x20, 0xb1, 0xd0, 0xc7, 0x73, 0xa9, 0x93, 0x96, 0x00, 0x79, 0x4e, 0x3d, 0x05, - 0x02, 0xe4, 0x03, 0x7b, 0x32, 0x01, 0xfa, 0x57, 0x06, 0x2c, 0x78, 0xca, 0xa9, 0x09, 0x50, 0x8c, - 0xc9, 0xb7, 0x17, 0x3b, 0xe9, 0x48, 0x89, 0xb7, 0x74, 0x5f, 0x25, 0x52, 0xe2, 0x79, 0x95, 0x40, - 0x4a, 0xfe, 0x90, 0xf1, 0xbb, 0x3e, 0x25, 0x29, 0x79, 0x0a, 0x37, 0x1c, 0x5f, 0x3b, 0x5e, 0x23, - 0x7f, 0x9c, 0x05, 0xa7, 0xc3, 0x75, 0x18, 0x68, 0x90, 0xd2, 0xc4, 0x06, 0xd9, 0x04, 0x8b, 0xf7, - 0xfb, 0xaa, 0x3a, 0xe4, 0x31, 0xf8, 0xba, 0xa4, 0xdd, 0x5a, 0xbf, 0x2b, 0x2c, 0x17, 0x7f, 0x14, - 0xa3, 0x83, 0x62, 0x2d, 0xa3, 0xfd, 0x32, 0xf7, 0x45, 0xfb, 0x65, 0xfe, 0x08, 0xfd, 0x32, 0x9e, - 0x72, 0x64, 0x8f, 0x44, 0x39, 0xa6, 0x6b, 0x96, 0x31, 0x07, 0xd7, 0xc4, 0x57, 0xff, 0xb1, 0x04, - 0x96, 0xe2, 0x5f, 0xb8, 0xa1, 0x0a, 0xe6, 0x7a, 0xf8, 0x81, 0xff, 0xe2, 0x63, 0x52, 0x13, 0xe9, - 0x53, 0x45, 0xad, 0xd9, 0x9f, 0x8c, 0x6a, 0x77, 0x34, 0xba, 0x63, 0xb6, 0xa8, 0xa9, 0x68, 0x5d, - 0xbb, 0xf3, 0x6e, 0x05, 0xb0, 0x50, 0x08, 0x1b, 0xbe, 0x07, 0x0a, 0x3d, 0xfc, 0xa0, 0xd5, 0x37, - 0xbb, 0x71, 0x1d, 0x32, 0xdd, 0x3c, 0xbc, 0x00, 0xb6, 0x04, 0x0a, 0x72, 0xf1, 0xe4, 0xcf, 0x25, - 0xb0, 0x9c, 0xd0, 0x55, 0xbf, 0x41, 0x51, 0xfe, 0x55, 0x02, 0xe7, 0x03, 0x51, 0xb2, 0xb2, 0x24, - 0xf7, 0xfb, 0x2a, 0xaf, 0x50, 0xc1, 0x64, 0x2e, 0x81, 0xa2, 0x81, 0x4d, 0xaa, 0xb8, 0x3c, 0x38, - 0xdf, 0x98, 0x1d, 0x8f, 0xaa, 0xc5, 0xa6, 0x33, 0x88, 0x3c, 0x79, 0xcc, 0xda, 0x64, 0x9e, 0xdd, - 0xda, 0xc8, 0xff, 0x93, 0x40, 0xbe, 0xd5, 0xc6, 0x2a, 0x39, 0x06, 0xe2, 0xb2, 0x11, 0x20, 0x2e, - 0xc9, 0x1f, 0x05, 0xb8, 0x3f, 0x89, 0x9c, 0x65, 0x33, 0xc4, 0x59, 0x2e, 0x4c, 0xc0, 0x79, 0x32, - 0x5d, 0x79, 0x03, 0x14, 0xdd, 0xe9, 0xa6, 0x3b, 0x4b, 0xe5, 0xdf, 0x67, 0x40, 0xc9, 0x37, 0xc5, - 0x94, 0x27, 0xf1, 0xbd, 0x40, 0xfb, 0x61, 0x67, 0xcc, 0x6a, 0x9a, 0x40, 0x6a, 0x4e, 0xab, 0x79, - 0x4b, 0xa3, 0xa6, 0xff, 0x5d, 0x35, 0xda, 0x81, 0xde, 0x04, 0x73, 0x14, 0x9b, 0x5d, 0x42, 0x1d, - 0x19, 0x5f, 0xb0, 0xa2, 0x77, 0x77, 0x73, 0x37, 0x20, 0x45, 0x21, 0xed, 0xb3, 0x37, 0xc0, 0x6c, - 0x60, 0x32, 0x78, 0x1a, 0x64, 0x0f, 0xc9, 0xd0, 0x66, 0x70, 0x88, 0xfd, 0x84, 0x8b, 0x20, 0x3f, - 0xc0, 0x6a, 0xdf, 0x4e, 0xd1, 0x22, 0xb2, 0x1f, 0xae, 0x67, 0x5e, 0x97, 0xe4, 0xdf, 0xb0, 0xc5, - 0xf1, 0x4a, 0xe1, 0x18, 0xb2, 0xeb, 0xed, 0x40, 0x76, 0x25, 0x7f, 0x9f, 0xf4, 0x17, 0x68, 0x52, - 0x8e, 0xa1, 0x50, 0x8e, 0xbd, 0x94, 0x0a, 0xed, 0xc9, 0x99, 0xf6, 0xef, 0x0c, 0x58, 0xf4, 0x69, - 0x7b, 0xcc, 0xf8, 0xfb, 0x01, 0x66, 0xbc, 0x12, 0x62, 0xc6, 0xe5, 0x38, 0x9b, 0x6f, 0xa9, 0xf1, - 0x64, 0x6a, 0xfc, 0x17, 0x09, 0xcc, 0xfb, 0xd6, 0xee, 0x18, 0xb8, 0xf1, 0x9d, 0x20, 0x37, 0xbe, - 0x90, 0x26, 0x69, 0x12, 0xc8, 0xf1, 0x1e, 0x58, 0xf0, 0x29, 0xed, 0x98, 0x1d, 0x45, 0xc3, 0xaa, - 0x05, 0x6f, 0x82, 0x05, 0x71, 0x80, 0xb4, 0x28, 0x36, 0x9d, 0x71, 0xa7, 0xa5, 0x38, 0x48, 0x5c, - 0x86, 0xe2, 0x34, 0xe5, 0xff, 0x48, 0xa0, 0xee, 0x03, 0x6e, 0x12, 0xd3, 0x52, 0x2c, 0x4a, 0x34, - 0xba, 0xa7, 0xab, 0xfd, 0x1e, 0x59, 0x57, 0xb1, 0xd2, 0x43, 0x84, 0x0d, 0x28, 0xba, 0xd6, 0xd4, - 0x55, 0xa5, 0x3d, 0x84, 0x18, 0x94, 0x3e, 0x38, 0x20, 0xda, 0x06, 0x51, 0x09, 0x15, 0x5f, 0xe7, - 0x8a, 0x8d, 0x9b, 0xce, 0xc7, 0xaa, 0x77, 0x3d, 0xd1, 0xe3, 0x51, 0x75, 0x25, 0x0d, 0x22, 0xcf, - 0x5e, 0x3f, 0x26, 0xfc, 0x19, 0x00, 0xec, 0x91, 0x9f, 0x73, 0x1d, 0x91, 0xc8, 0x6f, 0x3a, 0xd5, - 0xfe, 0xae, 0x2b, 0x99, 0x6a, 0x02, 0x1f, 0xa2, 0xfc, 0xc7, 0x42, 0x20, 0x17, 0xbe, 0xf1, 0x37, - 0xa0, 0xbf, 0x00, 0x8b, 0x03, 0x6f, 0x75, 0x1c, 0x05, 0xc6, 0xcd, 0xb3, 0xe1, 0xb7, 0x7c, 0x17, - 0x3e, 0x6e, 0x5d, 0xbd, 0x37, 0x82, 0xbd, 0x18, 0x38, 0x14, 0x3b, 0x09, 0x7c, 0x15, 0x94, 0x18, - 0xa7, 0x56, 0xda, 0x64, 0x1b, 0xf7, 0x9c, 0x3a, 0x75, 0x3f, 0x6e, 0xb6, 0x3c, 0x11, 0xf2, 0xeb, - 0xc1, 0x03, 0xb0, 0x60, 0xe8, 0x9d, 0x2d, 0xac, 0xe1, 0x2e, 0x61, 0x24, 0xd1, 0xde, 0x4a, 0x7e, - 0x2d, 0x5a, 0x6c, 0xbc, 0xe6, 0x5c, 0x79, 0x35, 0xa3, 0x2a, 0x8f, 0x47, 0xd5, 0xe5, 0x98, 0x61, - 0x9e, 0x04, 0x71, 0x90, 0xd0, 0x8c, 0x7c, 0x90, 0xb7, 0x3f, 0x48, 0xac, 0xa6, 0x29, 0xd8, 0x23, - 0x7e, 0x92, 0x4f, 0xba, 0xf5, 0x2d, 0x1c, 0xe9, 0xd6, 0x37, 0xe6, 0xf5, 0xb7, 0x38, 0xe5, 0xeb, - 0xef, 0xc7, 0x12, 0xb8, 0x60, 0xa4, 0xa8, 0xa5, 0x32, 0xe0, 0x6b, 0x73, 0x3b, 0xcd, 0xda, 0xa4, - 0xa9, 0xcd, 0xc6, 0xca, 0x78, 0x54, 0xbd, 0x90, 0x46, 0x13, 0xa5, 0xf2, 0x0f, 0xee, 0x81, 0x82, - 0x2e, 0xce, 0xc7, 0x72, 0x89, 0xfb, 0x7a, 0x39, 0x8d, 0xaf, 0xce, 0x99, 0x6a, 0x97, 0xa5, 0xf3, - 0x84, 0x5c, 0x2c, 0xf9, 0xc3, 0x3c, 0x38, 0x13, 0xe9, 0xee, 0x5f, 0xe2, 0xdd, 0x76, 0xe4, 0x45, - 0x3b, 0x3b, 0xc5, 0x8b, 0xf6, 0x1a, 0x98, 0x17, 0x7f, 0x97, 0x08, 0xbd, 0xa7, 0xbb, 0x09, 0xb3, - 0x1e, 0x14, 0xa3, 0xb0, 0x7e, 0xdc, 0xdd, 0x7a, 0x7e, 0xca, 0xbb, 0x75, 0xbf, 0x17, 0xe2, 0xef, - 0x7f, 0x76, 0x79, 0x47, 0xbd, 0x10, 0xff, 0x02, 0x0c, 0xeb, 0x33, 0x52, 0x6b, 0xa3, 0xba, 0x08, - 0x27, 0x83, 0xa4, 0x76, 0x37, 0x20, 0x45, 0x21, 0xed, 0x2f, 0xf4, 0x97, 0x00, 0x1c, 0xf3, 0x97, - 0x80, 0x2b, 0x69, 0x72, 0x2d, 0xfd, 0x35, 0x7a, 0xec, 0x85, 0x48, 0x69, 0xfa, 0x0b, 0x11, 0xf9, - 0xef, 0x12, 0x78, 0x2e, 0xf1, 0xd4, 0x82, 0x6b, 0x01, 0xca, 0x79, 0x25, 0x44, 0x39, 0xbf, 0x97, - 0x68, 0xe8, 0xe3, 0x9d, 0x66, 0xfc, 0x0d, 0xfb, 0x1b, 0xe9, 0x6e, 0xd8, 0x63, 0xde, 0x92, 0x27, - 0x5f, 0xb5, 0x37, 0x7e, 0xf0, 0xf0, 0x51, 0xe5, 0xc4, 0x27, 0x8f, 0x2a, 0x27, 0x3e, 0x7b, 0x54, - 0x39, 0xf1, 0xcb, 0x71, 0x45, 0x7a, 0x38, 0xae, 0x48, 0x9f, 0x8c, 0x2b, 0xd2, 0x67, 0xe3, 0x8a, - 0xf4, 0x8f, 0x71, 0x45, 0xfa, 0xed, 0xe7, 0x95, 0x13, 0xef, 0x2d, 0x27, 0xfc, 0x21, 0xf9, 0xff, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x93, 0x41, 0x4c, 0xc3, 0x2c, 0x00, 0x00, + 0x9b, 0x37, 0x33, 0xef, 0xcd, 0xfb, 0xcd, 0x0c, 0xc1, 0x0f, 0x0f, 0x5f, 0xb3, 0x6a, 0x8a, 0x5e, + 0x3f, 0xec, 0xef, 0x13, 0x53, 0x23, 0x94, 0x58, 0xf5, 0x01, 0xd1, 0x3a, 0xba, 0x59, 0x17, 0x02, + 0x6c, 0x28, 0x75, 0x6c, 0x18, 0x56, 0x7d, 0x70, 0x6d, 0x9f, 0x50, 0xbc, 0x56, 0xef, 0x12, 0x8d, + 0x98, 0x98, 0x92, 0x4e, 0xcd, 0x30, 0x75, 0xaa, 0xc3, 0x65, 0x5b, 0xb1, 0x86, 0x0d, 0xa5, 0xc6, + 0x14, 0x6b, 0x42, 0x71, 0xe5, 0x4a, 0x57, 0xa1, 0x07, 0xfd, 0xfd, 0x5a, 0x5b, 0xef, 0xd5, 0xbb, + 0x7a, 0x57, 0xaf, 0x73, 0xfd, 0xfd, 0xfe, 0x7d, 0xfe, 0xc5, 0x3f, 0xf8, 0x2f, 0x1b, 0x67, 0x45, + 0xf6, 0x75, 0xd8, 0xd6, 0x4d, 0x52, 0x1f, 0x5c, 0x0b, 0xf7, 0xb5, 0xf2, 0xb2, 0xa7, 0xd3, 0xc3, + 0xed, 0x03, 0x45, 0x23, 0xe6, 0xb0, 0x6e, 0x1c, 0x76, 0x59, 0x83, 0x55, 0xef, 0x11, 0x8a, 0xe3, + 0xac, 0xea, 0x49, 0x56, 0x66, 0x5f, 0xa3, 0x4a, 0x8f, 0x44, 0x0c, 0x5e, 0x9d, 0x64, 0x60, 0xb5, + 0x0f, 0x48, 0x0f, 0x47, 0xec, 0x5e, 0x4a, 0xb2, 0xeb, 0x53, 0x45, 0xad, 0x2b, 0x1a, 0xb5, 0xa8, + 0x19, 0x36, 0x92, 0xff, 0x2b, 0x01, 0xb8, 0xa1, 0x6b, 0xd4, 0xd4, 0x55, 0x95, 0x98, 0x88, 0x0c, + 0x14, 0x4b, 0xd1, 0x35, 0x78, 0x0f, 0x14, 0xd8, 0x78, 0x3a, 0x98, 0xe2, 0xb2, 0x74, 0x4e, 0x5a, + 0x2d, 0xad, 0x5d, 0xad, 0x79, 0x33, 0xed, 0xc2, 0xd7, 0x8c, 0xc3, 0x2e, 0x6b, 0xb0, 0x6a, 0x4c, + 0xbb, 0x36, 0xb8, 0x56, 0xdb, 0xdd, 0x7f, 0x9f, 0xb4, 0xe9, 0x36, 0xa1, 0xb8, 0x01, 0x1f, 0x8e, + 0xaa, 0x27, 0xc6, 0xa3, 0x2a, 0xf0, 0xda, 0x90, 0x8b, 0x0a, 0x77, 0x41, 0x8e, 0xa3, 0x67, 0x38, + 0xfa, 0x95, 0x44, 0x74, 0x31, 0xe8, 0x1a, 0xc2, 0x1f, 0xbc, 0xf5, 0x80, 0x12, 0x8d, 0xb9, 0xd7, + 0x38, 0x25, 0xa0, 0x73, 0x9b, 0x98, 0x62, 0xc4, 0x81, 0xe0, 0x65, 0x50, 0x30, 0x85, 0xfb, 0xe5, + 0xec, 0x39, 0x69, 0x35, 0xdb, 0x38, 0x2d, 0xb4, 0x0a, 0xce, 0xb0, 0x90, 0xab, 0x21, 0x3f, 0x94, + 0xc0, 0x52, 0x74, 0xdc, 0x5b, 0x8a, 0x45, 0xe1, 0x4f, 0x22, 0x63, 0xaf, 0xa5, 0x1b, 0x3b, 0xb3, + 0xe6, 0x23, 0x77, 0x3b, 0x76, 0x5a, 0x7c, 0xe3, 0x6e, 0x82, 0xbc, 0x42, 0x49, 0xcf, 0x2a, 0x67, + 0xce, 0x65, 0x57, 0x4b, 0x6b, 0x97, 0x6a, 0x09, 0x01, 0x5c, 0x8b, 0x7a, 0xd7, 0x98, 0x15, 0xb8, + 0xf9, 0xdb, 0x0c, 0x01, 0xd9, 0x40, 0xf2, 0xaf, 0x32, 0xa0, 0xb8, 0x89, 0x49, 0x4f, 0xd7, 0x5a, + 0x84, 0x1e, 0xc3, 0xca, 0xdd, 0x02, 0x39, 0xcb, 0x20, 0x6d, 0xb1, 0x72, 0x17, 0x13, 0x07, 0xe0, + 0xfa, 0xd4, 0x32, 0x48, 0xdb, 0x5b, 0x32, 0xf6, 0x85, 0x38, 0x02, 0x6c, 0x82, 0x19, 0x8b, 0x62, + 0xda, 0xb7, 0xf8, 0x82, 0x95, 0xd6, 0x56, 0x53, 0x60, 0x71, 0xfd, 0xc6, 0x9c, 0x40, 0x9b, 0xb1, + 0xbf, 0x91, 0xc0, 0x91, 0xff, 0x99, 0x01, 0xd0, 0xd5, 0xdd, 0xd0, 0xb5, 0x8e, 0x42, 0x59, 0x38, + 0x5f, 0x07, 0x39, 0x3a, 0x34, 0x08, 0x9f, 0x90, 0x62, 0xe3, 0xa2, 0xe3, 0xca, 0x9d, 0xa1, 0x41, + 0x1e, 0x8f, 0xaa, 0x4b, 0x51, 0x0b, 0x26, 0x41, 0xdc, 0x06, 0x6e, 0xb9, 0x4e, 0x66, 0xb8, 0xf5, + 0xcb, 0xc1, 0xae, 0x1f, 0x8f, 0xaa, 0x31, 0x7b, 0x47, 0xcd, 0x45, 0x0a, 0x3a, 0x08, 0x07, 0x00, + 0xaa, 0xd8, 0xa2, 0x77, 0x4c, 0xac, 0x59, 0x76, 0x4f, 0x4a, 0x8f, 0x88, 0xe1, 0xbf, 0x98, 0x6e, + 0xa1, 0x98, 0x45, 0x63, 0x45, 0x78, 0x01, 0xb7, 0x22, 0x68, 0x28, 0xa6, 0x07, 0x78, 0x11, 0xcc, + 0x98, 0x04, 0x5b, 0xba, 0x56, 0xce, 0xf1, 0x51, 0xb8, 0x13, 0x88, 0x78, 0x2b, 0x12, 0x52, 0xf8, + 0x02, 0x38, 0xd9, 0x23, 0x96, 0x85, 0xbb, 0xa4, 0x9c, 0xe7, 0x8a, 0xf3, 0x42, 0xf1, 0xe4, 0xb6, + 0xdd, 0x8c, 0x1c, 0xb9, 0xfc, 0x27, 0x09, 0xcc, 0xba, 0x33, 0x77, 0x0c, 0x99, 0x73, 0x33, 0x98, + 0x39, 0xf2, 0xe4, 0x60, 0x49, 0x48, 0x98, 0x8f, 0xb2, 0x3e, 0xc7, 0x59, 0x38, 0xc2, 0x9f, 0x82, + 0x82, 0x45, 0x54, 0xd2, 0xa6, 0xba, 0x29, 0x1c, 0x7f, 0x29, 0xa5, 0xe3, 0x78, 0x9f, 0xa8, 0x2d, + 0x61, 0xda, 0x38, 0xc5, 0x3c, 0x77, 0xbe, 0x90, 0x0b, 0x09, 0xdf, 0x01, 0x05, 0x4a, 0x7a, 0x86, + 0x8a, 0x29, 0x11, 0x59, 0x73, 0xde, 0xef, 0x3c, 0x8b, 0x19, 0x06, 0xd6, 0xd4, 0x3b, 0x77, 0x84, + 0x1a, 0x4f, 0x19, 0x77, 0x32, 0x9c, 0x56, 0xe4, 0xc2, 0x40, 0x03, 0xcc, 0xf5, 0x8d, 0x0e, 0xd3, + 0xa4, 0x6c, 0x3b, 0xef, 0x0e, 0x45, 0x0c, 0x5d, 0x9d, 0x3c, 0x2b, 0x7b, 0x01, 0xbb, 0xc6, 0x92, + 0xe8, 0x65, 0x2e, 0xd8, 0x8e, 0x42, 0xf8, 0x70, 0x1d, 0xcc, 0xf7, 0x14, 0x0d, 0x11, 0xdc, 0x19, + 0xb6, 0x48, 0x5b, 0xd7, 0x3a, 0x16, 0x0f, 0xa5, 0x7c, 0x63, 0x59, 0x00, 0xcc, 0x6f, 0x07, 0xc5, + 0x28, 0xac, 0x0f, 0xb7, 0xc0, 0xa2, 0xb3, 0x01, 0xdf, 0x52, 0x2c, 0xaa, 0x9b, 0xc3, 0x2d, 0xa5, + 0xa7, 0xd0, 0xf2, 0x0c, 0xc7, 0x29, 0x8f, 0x47, 0xd5, 0x45, 0x14, 0x23, 0x47, 0xb1, 0x56, 0xf2, + 0xef, 0x66, 0xc0, 0x7c, 0x68, 0x5f, 0x80, 0x77, 0xc1, 0x52, 0xbb, 0x6f, 0x9a, 0x44, 0xa3, 0x3b, + 0xfd, 0xde, 0x3e, 0x31, 0x5b, 0xed, 0x03, 0xd2, 0xe9, 0xab, 0xa4, 0xc3, 0x97, 0x35, 0xdf, 0xa8, + 0x08, 0x5f, 0x97, 0x36, 0x62, 0xb5, 0x50, 0x82, 0x35, 0x7c, 0x1b, 0x40, 0x8d, 0x37, 0x6d, 0x2b, + 0x96, 0xe5, 0x62, 0x66, 0x38, 0xa6, 0x9b, 0x8a, 0x3b, 0x11, 0x0d, 0x14, 0x63, 0xc5, 0x7c, 0xec, + 0x10, 0x4b, 0x31, 0x49, 0x27, 0xec, 0x63, 0x36, 0xe8, 0xe3, 0x66, 0xac, 0x16, 0x4a, 0xb0, 0x86, + 0xaf, 0x80, 0x92, 0xdd, 0x1b, 0x9f, 0x73, 0xb1, 0x38, 0x0b, 0x02, 0xac, 0xb4, 0xe3, 0x89, 0x90, + 0x5f, 0x8f, 0x0d, 0x4d, 0xdf, 0xb7, 0x88, 0x39, 0x20, 0x9d, 0x9b, 0x36, 0x39, 0x60, 0x15, 0x34, + 0xcf, 0x2b, 0xa8, 0x3b, 0xb4, 0xdd, 0x88, 0x06, 0x8a, 0xb1, 0x62, 0x43, 0xb3, 0xa3, 0x26, 0x32, + 0xb4, 0x99, 0xe0, 0xd0, 0xf6, 0x62, 0xb5, 0x50, 0x82, 0x35, 0x8b, 0x3d, 0xdb, 0xe5, 0xf5, 0x01, + 0x56, 0x54, 0xbc, 0xaf, 0x92, 0xf2, 0xc9, 0x60, 0xec, 0xed, 0x04, 0xc5, 0x28, 0xac, 0x0f, 0x6f, + 0x82, 0x33, 0x76, 0xd3, 0x9e, 0x86, 0x5d, 0x90, 0x02, 0x07, 0x79, 0x4e, 0x80, 0x9c, 0xd9, 0x09, + 0x2b, 0xa0, 0xa8, 0x0d, 0xbc, 0x0e, 0xe6, 0xda, 0xba, 0xaa, 0xf2, 0x78, 0xdc, 0xd0, 0xfb, 0x1a, + 0x2d, 0x17, 0x39, 0x0a, 0x64, 0x39, 0xb4, 0x11, 0x90, 0xa0, 0x90, 0x26, 0xfc, 0x39, 0x00, 0x6d, + 0xa7, 0x30, 0x58, 0x65, 0x30, 0x81, 0x01, 0x44, 0xcb, 0x92, 0x57, 0x99, 0xdd, 0x26, 0x0b, 0xf9, + 0x20, 0xe5, 0x8f, 0x24, 0xb0, 0x9c, 0x90, 0xe8, 0xf0, 0xcd, 0x40, 0x11, 0xbc, 0x14, 0x2a, 0x82, + 0x67, 0x13, 0xcc, 0x7c, 0x95, 0xf0, 0x00, 0xcc, 0x32, 0x42, 0xa2, 0x68, 0x5d, 0x5b, 0x45, 0xec, + 0x65, 0xf5, 0xc4, 0x01, 0x20, 0xbf, 0xb6, 0xb7, 0x2b, 0x9f, 0x19, 0x8f, 0xaa, 0xb3, 0x01, 0x19, + 0x0a, 0x02, 0xcb, 0xbf, 0xce, 0x00, 0xb0, 0x49, 0x0c, 0x55, 0x1f, 0xf6, 0x88, 0x76, 0x1c, 0x9c, + 0xe6, 0x76, 0x80, 0xd3, 0x3c, 0x9f, 0xbc, 0x24, 0xae, 0x53, 0x89, 0xa4, 0xe6, 0x9d, 0x10, 0xa9, + 0x79, 0x21, 0x0d, 0xd8, 0x93, 0x59, 0xcd, 0xa7, 0x59, 0xb0, 0xe0, 0x29, 0x7b, 0xb4, 0xe6, 0x46, + 0x60, 0x45, 0x9f, 0x0f, 0xad, 0xe8, 0x72, 0x8c, 0xc9, 0x33, 0xe3, 0x35, 0xef, 0x83, 0x39, 0xc6, + 0x3a, 0xec, 0xf5, 0xe3, 0x9c, 0x66, 0x66, 0x6a, 0x4e, 0xe3, 0x56, 0xa2, 0xad, 0x00, 0x12, 0x0a, + 0x21, 0x27, 0x70, 0xa8, 0x93, 0x5f, 0x47, 0x0e, 0xf5, 0x67, 0x09, 0xcc, 0x79, 0xcb, 0x74, 0x0c, + 0x24, 0xea, 0x56, 0x90, 0x44, 0x9d, 0x4f, 0x11, 0x9c, 0x09, 0x2c, 0xea, 0xd3, 0x9c, 0xdf, 0x75, + 0x4e, 0xa3, 0x56, 0xd9, 0x11, 0xcc, 0x50, 0x95, 0x36, 0xb6, 0x44, 0xbd, 0x3d, 0x65, 0x1f, 0xbf, + 0xec, 0x36, 0xe4, 0x4a, 0x03, 0x84, 0x2b, 0xf3, 0x6c, 0x09, 0x57, 0xf6, 0xe9, 0x10, 0xae, 0x1f, + 0x83, 0x82, 0xe5, 0x50, 0xad, 0x1c, 0x87, 0xbc, 0x94, 0x2a, 0xb1, 0x05, 0xcb, 0x72, 0xa1, 0x5d, + 0x7e, 0xe5, 0xc2, 0xc5, 0x31, 0xab, 0xfc, 0x97, 0xc9, 0xac, 0x58, 0xa0, 0x1b, 0xb8, 0x6f, 0x91, + 0x0e, 0x4f, 0xaa, 0x82, 0x17, 0xe8, 0x4d, 0xde, 0x8a, 0x84, 0x14, 0xee, 0x81, 0x65, 0xc3, 0xd4, + 0xbb, 0x26, 0xb1, 0xac, 0x4d, 0x82, 0x3b, 0xaa, 0xa2, 0x11, 0x67, 0x00, 0x76, 0x4d, 0x3c, 0x3b, + 0x1e, 0x55, 0x97, 0x9b, 0xf1, 0x2a, 0x28, 0xc9, 0x56, 0xfe, 0x5b, 0x0e, 0x9c, 0x0e, 0xef, 0x8d, + 0x09, 0x34, 0x45, 0x3a, 0x12, 0x4d, 0xb9, 0xec, 0x8b, 0x53, 0x9b, 0xc3, 0xf9, 0xae, 0x0a, 0x22, + 0xb1, 0xba, 0x0e, 0xe6, 0x05, 0x2d, 0x71, 0x84, 0x82, 0xa8, 0xb9, 0xcb, 0xb3, 0x17, 0x14, 0xa3, + 0xb0, 0x3e, 0xbc, 0x01, 0x66, 0x4d, 0xce, 0xbc, 0x1c, 0x00, 0x9b, 0xbd, 0x7c, 0x47, 0x00, 0xcc, + 0x22, 0xbf, 0x10, 0x05, 0x75, 0x19, 0x73, 0xf1, 0x08, 0x89, 0x03, 0x90, 0x0b, 0x32, 0x97, 0xf5, + 0xb0, 0x02, 0x8a, 0xda, 0xc0, 0x6d, 0xb0, 0xd0, 0xd7, 0xa2, 0x50, 0x76, 0xac, 0x9d, 0x15, 0x50, + 0x0b, 0x7b, 0x51, 0x15, 0x14, 0x67, 0x07, 0xef, 0x05, 0xc8, 0xcc, 0x0c, 0xdf, 0x4f, 0x2e, 0xa7, + 0xc8, 0x89, 0xd4, 0x6c, 0x26, 0x86, 0x6a, 0x15, 0xd2, 0x52, 0x2d, 0xf9, 0x43, 0x09, 0xc0, 0x68, + 0x1e, 0x4e, 0xbc, 0x09, 0x88, 0x58, 0xf8, 0x2a, 0xa6, 0x12, 0xcf, 0x7f, 0xae, 0xa6, 0xe4, 0x3f, + 0xde, 0x86, 0x9a, 0x8e, 0x00, 0x89, 0x89, 0x3e, 0x9e, 0x4b, 0x9d, 0xb4, 0x04, 0xc8, 0x73, 0xea, + 0x29, 0x10, 0x20, 0x1f, 0xd8, 0x93, 0x09, 0xd0, 0xbf, 0x32, 0x60, 0xc1, 0x53, 0x4e, 0x4d, 0x80, + 0x62, 0x4c, 0xbe, 0xbd, 0xd8, 0x49, 0x47, 0x4a, 0xbc, 0xa9, 0xfb, 0x2a, 0x91, 0x12, 0xcf, 0xab, + 0x04, 0x52, 0xf2, 0x87, 0x8c, 0xdf, 0xf5, 0x29, 0x49, 0xc9, 0x53, 0xb8, 0xe1, 0xf8, 0xda, 0xf1, + 0x1a, 0xf9, 0xe3, 0x2c, 0x38, 0x1d, 0xce, 0xc3, 0x40, 0x81, 0x94, 0x26, 0x16, 0xc8, 0x26, 0x58, + 0xbc, 0xdf, 0x57, 0xd5, 0x21, 0x1f, 0x83, 0xaf, 0x4a, 0xda, 0xa5, 0xf5, 0xbb, 0xc2, 0x72, 0xf1, + 0x47, 0x31, 0x3a, 0x28, 0xd6, 0x32, 0x5a, 0x2f, 0x73, 0x5f, 0xb4, 0x5e, 0xe6, 0x8f, 0x50, 0x2f, + 0xe3, 0x29, 0x47, 0xf6, 0x48, 0x94, 0x63, 0xba, 0x62, 0x19, 0xb3, 0x71, 0x4d, 0x3c, 0xfa, 0x8f, + 0x25, 0xb0, 0x14, 0x7f, 0xe0, 0x86, 0x2a, 0x98, 0xeb, 0xe1, 0x07, 0xfe, 0x8b, 0x8f, 0x49, 0x45, + 0xa4, 0x4f, 0x15, 0xb5, 0x66, 0x3f, 0x19, 0xd5, 0x6e, 0x6b, 0x74, 0xd7, 0x6c, 0x51, 0x53, 0xd1, + 0xba, 0x76, 0xe5, 0xdd, 0x0e, 0x60, 0xa1, 0x10, 0x36, 0x7c, 0x0f, 0x14, 0x7a, 0xf8, 0x41, 0xab, + 0x6f, 0x76, 0xe3, 0x2a, 0x64, 0xba, 0x7e, 0x78, 0x02, 0x6c, 0x0b, 0x14, 0xe4, 0xe2, 0xc9, 0x9f, + 0x4b, 0x60, 0x39, 0xa1, 0xaa, 0x7e, 0x83, 0x46, 0xf9, 0x57, 0x09, 0x9c, 0x0b, 0x8c, 0x92, 0xa5, + 0x25, 0xb9, 0xdf, 0x57, 0x79, 0x86, 0x0a, 0x26, 0x73, 0x09, 0x14, 0x0d, 0x6c, 0x52, 0xc5, 0xe5, + 0xc1, 0xf9, 0xc6, 0xec, 0x78, 0x54, 0x2d, 0x36, 0x9d, 0x46, 0xe4, 0xc9, 0x63, 0xe6, 0x26, 0xf3, + 0xec, 0xe6, 0x46, 0xfe, 0x9f, 0x04, 0xf2, 0xad, 0x36, 0x56, 0xc9, 0x31, 0x10, 0x97, 0xcd, 0x00, + 0x71, 0x49, 0x7e, 0x14, 0xe0, 0xfe, 0x24, 0x72, 0x96, 0xad, 0x10, 0x67, 0xb9, 0x30, 0x01, 0xe7, + 0xc9, 0x74, 0xe5, 0x75, 0x50, 0x74, 0xbb, 0x9b, 0x6e, 0x2f, 0x95, 0x7f, 0x9f, 0x01, 0x25, 0x5f, + 0x17, 0x53, 0xee, 0xc4, 0xf7, 0x02, 0xe5, 0x87, 0xed, 0x31, 0x6b, 0x69, 0x06, 0x52, 0x73, 0x4a, + 0xcd, 0x5b, 0x1a, 0x35, 0xfd, 0x67, 0xd5, 0x68, 0x05, 0x7a, 0x03, 0xcc, 0x51, 0x6c, 0x76, 0x09, + 0x75, 0x64, 0x7c, 0xc2, 0x8a, 0xde, 0xdd, 0xcd, 0x9d, 0x80, 0x14, 0x85, 0xb4, 0x57, 0x6e, 0x80, + 0xd9, 0x40, 0x67, 0xf0, 0x34, 0xc8, 0x1e, 0x92, 0xa1, 0xcd, 0xe0, 0x10, 0xfb, 0x09, 0x17, 0x41, + 0x7e, 0x80, 0xd5, 0xbe, 0x1d, 0xa2, 0x45, 0x64, 0x7f, 0x5c, 0xcf, 0xbc, 0x26, 0xc9, 0xbf, 0x61, + 0x93, 0xe3, 0xa5, 0xc2, 0x31, 0x44, 0xd7, 0xdb, 0x81, 0xe8, 0x4a, 0x7e, 0x9f, 0xf4, 0x27, 0x68, + 0x52, 0x8c, 0xa1, 0x50, 0x8c, 0xbd, 0x98, 0x0a, 0xed, 0xc9, 0x91, 0xf6, 0xef, 0x0c, 0x58, 0xf4, + 0x69, 0x7b, 0xcc, 0xf8, 0xfb, 0x01, 0x66, 0xbc, 0x1a, 0x62, 0xc6, 0xe5, 0x38, 0x9b, 0x6f, 0xa9, + 0xf1, 0x64, 0x6a, 0xfc, 0x17, 0x09, 0xcc, 0xfb, 0xe6, 0xee, 0x18, 0xb8, 0xf1, 0xed, 0x20, 0x37, + 0xbe, 0x90, 0x26, 0x68, 0x12, 0xc8, 0xf1, 0x75, 0xb0, 0xe0, 0x53, 0xda, 0x35, 0x3b, 0x8a, 0x86, + 0x55, 0x0b, 0x9e, 0x07, 0x79, 0x8b, 0x62, 0x93, 0x3a, 0x45, 0xc4, 0xb1, 0x6d, 0xb1, 0x46, 0x64, + 0xcb, 0xe4, 0xff, 0x48, 0xa0, 0xee, 0x33, 0x6e, 0x12, 0xd3, 0x52, 0x2c, 0x4a, 0x34, 0x7a, 0x57, + 0x57, 0xfb, 0x3d, 0xb2, 0xa1, 0x62, 0xa5, 0x87, 0x08, 0x6b, 0x50, 0x74, 0xad, 0xa9, 0xab, 0x4a, + 0x7b, 0x08, 0x31, 0x28, 0x7d, 0x70, 0x40, 0xb4, 0x4d, 0xa2, 0x12, 0x2a, 0x5e, 0xe0, 0x8a, 0x8d, + 0x37, 0x9d, 0x07, 0xa9, 0x77, 0x3d, 0xd1, 0xe3, 0x51, 0x75, 0x35, 0x0d, 0x22, 0x8f, 0x50, 0x3f, + 0x26, 0xfc, 0x19, 0x00, 0xec, 0x93, 0xef, 0x65, 0x1d, 0x11, 0xac, 0x6f, 0x38, 0x19, 0xfd, 0xae, + 0x2b, 0x99, 0xaa, 0x03, 0x1f, 0xa2, 0xfc, 0xc7, 0x42, 0x60, 0xbd, 0xbf, 0xf1, 0xb7, 0x9c, 0xbf, + 0x00, 0x8b, 0x03, 0x6f, 0x76, 0x1c, 0x05, 0xc6, 0xbf, 0xb3, 0xe1, 0x93, 0xbc, 0x0b, 0x1f, 0x37, + 0xaf, 0x1e, 0xeb, 0xbf, 0x1b, 0x03, 0x87, 0x62, 0x3b, 0x81, 0xaf, 0x80, 0x12, 0xe3, 0xcd, 0x4a, + 0x9b, 0xec, 0xe0, 0x9e, 0x93, 0x8b, 0xee, 0x03, 0x66, 0xcb, 0x13, 0x21, 0xbf, 0x1e, 0x3c, 0x00, + 0x0b, 0x86, 0xde, 0xd9, 0xc6, 0x1a, 0xee, 0x12, 0x46, 0x04, 0xed, 0xa5, 0xe4, 0x57, 0x9f, 0xc5, + 0xc6, 0xab, 0xce, 0xb5, 0x56, 0x33, 0xaa, 0xf2, 0x78, 0x54, 0x5d, 0x8e, 0x69, 0xe6, 0x41, 0x10, + 0x07, 0x09, 0xcd, 0xc8, 0xa3, 0xbb, 0xfd, 0xe8, 0xb0, 0x96, 0x26, 0x29, 0x8f, 0xf8, 0xec, 0x9e, + 0x74, 0xb3, 0x5b, 0x38, 0xd2, 0xcd, 0x6e, 0xcc, 0x11, 0xb7, 0x38, 0xe5, 0x11, 0xf7, 0x63, 0x09, + 0x5c, 0x30, 0x52, 0xe4, 0x52, 0x19, 0xf0, 0xb9, 0xb9, 0x95, 0x66, 0x6e, 0xd2, 0xe4, 0x66, 0x63, + 0x75, 0x3c, 0xaa, 0x5e, 0x48, 0xa3, 0x89, 0x52, 0xf9, 0x07, 0xef, 0x82, 0x82, 0x2e, 0xf6, 0xc0, + 0x72, 0x89, 0xfb, 0x7a, 0x39, 0x8d, 0xaf, 0xce, 0xbe, 0x69, 0xa7, 0xa5, 0xf3, 0x85, 0x5c, 0x2c, + 0xf9, 0xc3, 0x3c, 0x38, 0x13, 0xa9, 0xe0, 0x5f, 0xe2, 0xfd, 0x75, 0xe4, 0x30, 0x9d, 0x9d, 0xe2, + 0x30, 0xbd, 0x0e, 0xe6, 0xc5, 0x5f, 0x22, 0x42, 0x67, 0x71, 0x37, 0x60, 0x36, 0x82, 0x62, 0x14, + 0xd6, 0x8f, 0xbb, 0x3f, 0xcf, 0x4f, 0x79, 0x7f, 0xee, 0xf7, 0x42, 0xfc, 0xc5, 0xcf, 0x4e, 0xef, + 0xa8, 0x17, 0xe2, 0x9f, 0x7e, 0x61, 0x7d, 0x46, 0x5c, 0x6d, 0x54, 0x17, 0xe1, 0x64, 0x90, 0xb8, + 0xee, 0x05, 0xa4, 0x28, 0xa4, 0xfd, 0x85, 0x9e, 0xfd, 0x71, 0xcc, 0xb3, 0xff, 0x95, 0x34, 0xb1, + 0x96, 0xfe, 0xaa, 0x3c, 0xf6, 0xd2, 0xa3, 0x34, 0xfd, 0xa5, 0x87, 0xfc, 0x77, 0x09, 0x3c, 0x97, + 0xb8, 0x6b, 0xc1, 0xf5, 0x00, 0xad, 0xbc, 0x12, 0xa2, 0x95, 0xdf, 0x4b, 0x34, 0xf4, 0x71, 0x4b, + 0x33, 0xfe, 0x16, 0xfd, 0xf5, 0x74, 0xb7, 0xe8, 0x31, 0x27, 0xe1, 0xc9, 0xd7, 0xe9, 0x8d, 0x1f, + 0x3c, 0x7c, 0x54, 0x39, 0xf1, 0xc9, 0xa3, 0xca, 0x89, 0xcf, 0x1e, 0x55, 0x4e, 0xfc, 0x72, 0x5c, + 0x91, 0x1e, 0x8e, 0x2b, 0xd2, 0x27, 0xe3, 0x8a, 0xf4, 0xd9, 0xb8, 0x22, 0xfd, 0x63, 0x5c, 0x91, + 0x7e, 0xfb, 0x79, 0xe5, 0xc4, 0x7b, 0xcb, 0x09, 0x7f, 0x3a, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xd1, 0xcb, 0x7d, 0xc7, 0xa7, 0x2c, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.proto b/staging/src/k8s.io/api/apps/v1beta2/generated.proto index eaf66989145..9f7d561de38 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.proto @@ -675,7 +675,7 @@ message StatefulSetOrdinals { // If set, replica ordinals will be numbered // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). // +optional - optional int32 replicaStartOrdinal = 1; + optional int32 start = 1; } // StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs From 8a9c126eca0346600d8335b56d6a96886ce90430 Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Fri, 14 Oct 2022 15:36:30 -0700 Subject: [PATCH 3/7] Small updates and comment fixes --- pkg/apis/apps/types.go | 4 ++-- pkg/controller/statefulset/stateful_set_control_test.go | 2 +- staging/src/k8s.io/api/apps/v1/types.go | 4 ++-- staging/src/k8s.io/api/apps/v1beta1/types.go | 4 ++-- staging/src/k8s.io/api/apps/v1beta2/types.go | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/apis/apps/types.go b/pkg/apis/apps/types.go index 353ae5c4b0e..65f02004ead 100644 --- a/pkg/apis/apps/types.go +++ b/pkg/apis/apps/types.go @@ -148,8 +148,8 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { type StatefulSetOrdinals struct { // Start is the number representing the first index that is used to represent // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // If set, replica ordinals will be numbered in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). // +optional Start int32 } diff --git a/pkg/controller/statefulset/stateful_set_control_test.go b/pkg/controller/statefulset/stateful_set_control_test.go index d571d81d3fb..7235711728f 100644 --- a/pkg/controller/statefulset/stateful_set_control_test.go +++ b/pkg/controller/statefulset/stateful_set_control_test.go @@ -2696,7 +2696,7 @@ func checkClaimInvarients(set *apps.StatefulSet, pod *v1.Pod, claim *v1.Persiste return fmt.Errorf("claim %s does not have owner ref on condemned pod %s for scaledown delete", claim.Name, pod.Name) } if podInOrdinalRange(pod, set) && hasOwnerRef(claim, pod) { - return fmt.Errorf("claim %s has unexpected owner ref on condemned pod %s for scaledown delete. ordinal: %d, [%d,%d]", claim.Name, pod.Name, getOrdinal(pod), getStartOrdinal(set), getEndOrdinal(set)) + return fmt.Errorf("claim %s has unexpected owner ref on condemned pod %s for scaledown delete", claim.Name, pod.Name) } case policy.WhenScaled == delete && policy.WhenDeleted == delete: if !podInOrdinalRange(pod, set) { diff --git a/staging/src/k8s.io/api/apps/v1/types.go b/staging/src/k8s.io/api/apps/v1/types.go index f1239211ca5..4d1094d2502 100644 --- a/staging/src/k8s.io/api/apps/v1/types.go +++ b/staging/src/k8s.io/api/apps/v1/types.go @@ -168,8 +168,8 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { type StatefulSetOrdinals struct { // Start is the number representing the first index that is used to represent // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // If set, replica ordinals will be numbered in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). // +optional Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` } diff --git a/staging/src/k8s.io/api/apps/v1beta1/types.go b/staging/src/k8s.io/api/apps/v1beta1/types.go index 814296720f1..83106e1df8b 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types.go @@ -209,8 +209,8 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { type StatefulSetOrdinals struct { // Start is the number representing the first index that is used to represent // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // If set, replica ordinals will be numbered in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). // +optional Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` } diff --git a/staging/src/k8s.io/api/apps/v1beta2/types.go b/staging/src/k8s.io/api/apps/v1beta2/types.go index fc84f7c9b4c..40a458052a2 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types.go @@ -219,8 +219,8 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { type StatefulSetOrdinals struct { // Start is the number representing the first index that is used to represent // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // If set, replica ordinals will be numbered in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). // +optional Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` } From 366997951bbc7cb2c7edab750dd57ab355f72bad Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Tue, 1 Nov 2022 17:20:31 -0700 Subject: [PATCH 4/7] Update doc comments and change name of feature gate --- pkg/apis/apps/types.go | 24 +++++---- pkg/apis/apps/validation/validation.go | 6 +-- pkg/apis/apps/validation/validation_test.go | 10 ++-- .../statefulset/stateful_set_control_test.go | 2 +- .../statefulset/stateful_set_utils.go | 2 +- pkg/features/kube_features.go | 4 +- pkg/generated/openapi/zz_generated.openapi.go | 12 ++--- pkg/registry/apps/statefulset/strategy.go | 8 +-- .../apps/statefulset/strategy_test.go | 53 +++++++++++++++++-- .../src/k8s.io/api/apps/v1/generated.proto | 24 +++++---- staging/src/k8s.io/api/apps/v1/types.go | 24 +++++---- .../apps/v1/types_swagger_doc_generated.go | 4 +- .../k8s.io/api/apps/v1beta1/generated.proto | 24 +++++---- staging/src/k8s.io/api/apps/v1beta1/types.go | 24 +++++---- .../v1beta1/types_swagger_doc_generated.go | 4 +- .../k8s.io/api/apps/v1beta2/generated.proto | 24 +++++---- staging/src/k8s.io/api/apps/v1beta2/types.go | 24 +++++---- .../v1beta2/types_swagger_doc_generated.go | 4 +- 18 files changed, 182 insertions(+), 95 deletions(-) diff --git a/pkg/apis/apps/types.go b/pkg/apis/apps/types.go index 65f02004ead..0267ee2ae2c 100644 --- a/pkg/apis/apps/types.go +++ b/pkg/apis/apps/types.go @@ -146,10 +146,14 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. type StatefulSetOrdinals struct { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered in the range: - // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional Start int32 } @@ -227,11 +231,13 @@ type StatefulSetSpec struct { // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals } diff --git a/pkg/apis/apps/validation/validation.go b/pkg/apis/apps/validation/validation.go index dd9c9ecbdc4..7fb8160c1a3 100644 --- a/pkg/apis/apps/validation/validation.go +++ b/pkg/apis/apps/validation/validation.go @@ -130,7 +130,7 @@ func ValidateStatefulSetSpec(spec *apps.StatefulSetSpec, fldPath *field.Path, op allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.Replicas), fldPath.Child("replicas"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...) - if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetStartOrdinal) { if spec.Ordinals != nil { replicaStartOrdinal := spec.Ordinals.Start allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(replicaStartOrdinal), fldPath.Child("ordinals.start"))...) @@ -185,13 +185,13 @@ func ValidateStatefulSetUpdate(statefulSet, oldStatefulSet *apps.StatefulSet, op newStatefulSetClone.Spec.Template = oldStatefulSet.Spec.Template // +k8s:verify-mutation:reason=clone newStatefulSetClone.Spec.UpdateStrategy = oldStatefulSet.Spec.UpdateStrategy // +k8s:verify-mutation:reason=clone newStatefulSetClone.Spec.MinReadySeconds = oldStatefulSet.Spec.MinReadySeconds // +k8s:verify-mutation:reason=clone - if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetStartOrdinal) { newStatefulSetClone.Spec.Ordinals = oldStatefulSet.Spec.Ordinals // +k8s:verify-mutation:reason=clone } newStatefulSetClone.Spec.PersistentVolumeClaimRetentionPolicy = oldStatefulSet.Spec.PersistentVolumeClaimRetentionPolicy // +k8s:verify-mutation:reason=clone if !apiequality.Semantic.DeepEqual(newStatefulSetClone.Spec, oldStatefulSet.Spec) { - if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetStartOrdinal) { allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "updates to statefulset spec for fields other than 'replicas', 'ordinals', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden")) } else { allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden")) diff --git a/pkg/apis/apps/validation/validation_test.go b/pkg/apis/apps/validation/validation_test.go index 44a5944c678..994d0742eb5 100644 --- a/pkg/apis/apps/validation/validation_test.go +++ b/pkg/apis/apps/validation/validation_test.go @@ -86,7 +86,7 @@ func TestValidateStatefulSet(t *testing.T) { const enableStatefulSetAutoDeletePVC = "[enable StatefulSetAutoDeletePVC]" - const enableStatefulSetSlice = "[enable StatefulSetSlice]" + const enableStatefulSetStartOrdinal = "[enable StatefulSetStartOrdinal]" type testCase struct { name string @@ -196,7 +196,7 @@ func TestValidateStatefulSet(t *testing.T) { }, }, { - name: "ordinals.start positive value " + enableStatefulSetSlice, + name: "ordinals.start positive value " + enableStatefulSetStartOrdinal, set: apps.StatefulSet{ ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, Spec: apps.StatefulSetSpec{ @@ -652,7 +652,7 @@ func TestValidateStatefulSet(t *testing.T) { }, }, { - name: "invalid ordinals.start " + enableStatefulSetSlice, + name: "invalid ordinals.start " + enableStatefulSetStartOrdinal, set: apps.StatefulSet{ ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, Spec: apps.StatefulSetSpec{ @@ -684,8 +684,8 @@ func TestValidateStatefulSet(t *testing.T) { if strings.Contains(name, enableStatefulSetAutoDeletePVC) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetAutoDeletePVC, true)() } - if strings.Contains(name, enableStatefulSetSlice) { - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetSlice, true)() + if strings.Contains(name, enableStatefulSetStartOrdinal) { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetStartOrdinal, true)() } errs := ValidateStatefulSet(&testCase.set, pod.GetValidationOptionsFromPodTemplate(&testCase.set.Spec.Template, nil)) diff --git a/pkg/controller/statefulset/stateful_set_control_test.go b/pkg/controller/statefulset/stateful_set_control_test.go index 7235711728f..20cc18c14c9 100644 --- a/pkg/controller/statefulset/stateful_set_control_test.go +++ b/pkg/controller/statefulset/stateful_set_control_test.go @@ -564,7 +564,7 @@ func emptyInvaraints(set *apps.StatefulSet, om *fakeObjectManager) error { } func TestStatefulSetControlWithStartOrdinal(t *testing.T) { - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetSlice, true)() + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetStartOrdinal, true)() simpleSetFn := func() *apps.StatefulSet { statefulSet := newStatefulSet(3) diff --git a/pkg/controller/statefulset/stateful_set_utils.go b/pkg/controller/statefulset/stateful_set_utils.go index 10ca3aa9ce9..f3aa894a585 100644 --- a/pkg/controller/statefulset/stateful_set_utils.go +++ b/pkg/controller/statefulset/stateful_set_utils.go @@ -90,7 +90,7 @@ func getOrdinal(pod *v1.Pod) int { // getStartOrdinal gets the first possible ordinal (inclusive). // Returns spec.ordinals.start if spec.ordinals is set, otherwise returns 0. func getStartOrdinal(set *apps.StatefulSet) int { - if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { + if utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetStartOrdinal) { if set.Spec.Ordinals != nil { return int(set.Spec.Ordinals.Start) } diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index c08296e6026..de794080ccd 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -770,7 +770,7 @@ const ( // alpha: v1.26 // // Enables a StatefulSet to start from an arbitrary non zero ordinal - StatefulSetSlice featuregate.Feature = "StatefulSetSlice" + StatefulSetStartOrdinal featuregate.Feature = "StatefulSetStartOrdinal" // owner: @robscott // kep: https://kep.k8s.io/2433 @@ -1081,7 +1081,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS StatefulSetMinReadySeconds: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.27 - StatefulSetSlice: {Default: false, PreRelease: featuregate.Alpha}, + StatefulSetStartOrdinal: {Default: false, PreRelease: featuregate.Alpha}, TopologyAwareHints: {Default: true, PreRelease: featuregate.Beta}, diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 4ee81ddc4bd..3502f536e74 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -4869,7 +4869,7 @@ func schema_k8sio_api_apps_v1_StatefulSetOrdinals(ref common.ReferenceCallback) Properties: map[string]spec.Schema{ "start": { SchemaProps: spec.SchemaProps{ - Description: "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + Description: "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", Default: 0, Type: []string{"integer"}, Format: "int32", @@ -4993,7 +4993,7 @@ func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) comm }, "ordinals": { SchemaProps: spec.SchemaProps{ - Description: "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + Description: "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", Ref: ref("k8s.io/api/apps/v1.StatefulSetOrdinals"), }, }, @@ -6004,7 +6004,7 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetOrdinals(ref common.ReferenceCallb Properties: map[string]spec.Schema{ "start": { SchemaProps: spec.SchemaProps{ - Description: "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + Description: "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", Default: 0, Type: []string{"integer"}, Format: "int32", @@ -6128,7 +6128,7 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) }, "ordinals": { SchemaProps: spec.SchemaProps{ - Description: "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + Description: "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetOrdinals"), }, }, @@ -7688,7 +7688,7 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetOrdinals(ref common.ReferenceCallb Properties: map[string]spec.Schema{ "start": { SchemaProps: spec.SchemaProps{ - Description: "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + Description: "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", Default: 0, Type: []string{"integer"}, Format: "int32", @@ -7812,7 +7812,7 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) }, "ordinals": { SchemaProps: spec.SchemaProps{ - Description: "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + Description: "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetOrdinals"), }, }, diff --git a/pkg/registry/apps/statefulset/strategy.go b/pkg/registry/apps/statefulset/strategy.go index 1ebcf629e41..e650001258d 100644 --- a/pkg/registry/apps/statefulset/strategy.go +++ b/pkg/registry/apps/statefulset/strategy.go @@ -128,9 +128,11 @@ func dropStatefulSetDisabledFields(newSS *apps.StatefulSet, oldSS *apps.Stateful newSS.Spec.UpdateStrategy.RollingUpdate.MaxUnavailable = nil } } - if !utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetSlice) { - // Reset Spec.Ordinals to the default value (nil). - newSS.Spec.Ordinals = nil + if !utilfeature.DefaultFeatureGate.Enabled(features.StatefulSetStartOrdinal) { + if oldSS == nil || oldSS.Spec.Ordinals == nil { + // Reset Spec.Ordinals to the default value (nil). + newSS.Spec.Ordinals = nil + } } } diff --git a/pkg/registry/apps/statefulset/strategy_test.go b/pkg/registry/apps/statefulset/strategy_test.go index ea9ae728c35..7f88b2824e7 100644 --- a/pkg/registry/apps/statefulset/strategy_test.go +++ b/pkg/registry/apps/statefulset/strategy_test.go @@ -328,14 +328,29 @@ func getMaxUnavailable(maxUnavailable int) *int { return &maxUnavailable } +func createOrdinalsWithStart(start int) *apps.StatefulSetOrdinals { + return &apps.StatefulSetOrdinals{ + Start: int32(start), + } +} + +func makeStatefulSetWithStatefulSetOrdinals(ordinals *apps.StatefulSetOrdinals) *apps.StatefulSet { + return &apps.StatefulSet{ + Spec: apps.StatefulSetSpec{ + Ordinals: ordinals, + }, + } +} + // TestDropStatefulSetDisabledFields tests if the drop functionality is working fine or not func TestDropStatefulSetDisabledFields(t *testing.T) { testCases := []struct { - name string - enableMaxUnavailable bool - ss *apps.StatefulSet - oldSS *apps.StatefulSet - expectedSS *apps.StatefulSet + name string + enableMaxUnavailable bool + enableStatefulSetStartOrdinal bool + ss *apps.StatefulSet + oldSS *apps.StatefulSet + expectedSS *apps.StatefulSet }{ { name: "set minReadySeconds, no update", @@ -388,11 +403,39 @@ func TestDropStatefulSetDisabledFields(t *testing.T) { ss: makeStatefulSetWithMaxUnavailable(getMaxUnavailable(1)), oldSS: makeStatefulSetWithMaxUnavailable(getMaxUnavailable(3)), expectedSS: makeStatefulSetWithMaxUnavailable(getMaxUnavailable(1)), + }, { + name: "StatefulSetStartOrdinal disabled, ordinals in use in new only", + enableStatefulSetStartOrdinal: false, + ss: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), + oldSS: nil, + expectedSS: makeStatefulSetWithStatefulSetOrdinals(nil), + }, + { + name: "StatefulSetStartOrdinal disabled, ordinals in use in both old and new", + enableStatefulSetStartOrdinal: false, + ss: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), + oldSS: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(1)), + expectedSS: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), + }, + { + name: "StatefulSetStartOrdinal enabled, ordinals in use in new only", + enableStatefulSetStartOrdinal: true, + ss: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), + oldSS: nil, + expectedSS: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), + }, + { + name: "StatefulSetStartOrdinal enabled, ordinals in use in both old and new", + enableStatefulSetStartOrdinal: true, + ss: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), + oldSS: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(1)), + expectedSS: makeStatefulSetWithStatefulSetOrdinals(createOrdinalsWithStart(2)), }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.MaxUnavailableStatefulSet, tc.enableMaxUnavailable)() + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetStartOrdinal, tc.enableStatefulSetStartOrdinal)() old := tc.oldSS.DeepCopy() dropStatefulSetDisabledFields(tc.ss, tc.oldSS) diff --git a/staging/src/k8s.io/api/apps/v1/generated.proto b/staging/src/k8s.io/api/apps/v1/generated.proto index 45b9554f4bb..eb307b051ff 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1/generated.proto @@ -625,10 +625,14 @@ message StatefulSetList { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. message StatefulSetOrdinals { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional optional int32 start = 1; } @@ -725,11 +729,13 @@ message StatefulSetSpec { // which is alpha. +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional optional StatefulSetOrdinals ordinals = 11; } diff --git a/staging/src/k8s.io/api/apps/v1/types.go b/staging/src/k8s.io/api/apps/v1/types.go index 4d1094d2502..adbe77d0ee2 100644 --- a/staging/src/k8s.io/api/apps/v1/types.go +++ b/staging/src/k8s.io/api/apps/v1/types.go @@ -166,10 +166,14 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. type StatefulSetOrdinals struct { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered in the range: - // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` } @@ -249,11 +253,13 @@ type StatefulSetSpec struct { // which is alpha. +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } diff --git a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go index 97aca78daa6..27a2b5ecd0c 100644 --- a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go @@ -326,7 +326,7 @@ func (StatefulSetList) SwaggerDoc() map[string]string { var map_StatefulSetOrdinals = map[string]string{ "": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", - "start": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "start": "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", } func (StatefulSetOrdinals) SwaggerDoc() map[string]string { @@ -355,7 +355,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "persistentVolumeClaimRetentionPolicy describes the lifecycle of persistent volume claims created from volumeClaimTemplates. By default, all persistent volume claims are created as needed and retained until manually deleted. This policy allows the lifecycle to be altered, for example by deleting persistent volume claims when their stateful set is deleted, or when their pod is scaled down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. +optional", - "ordinals": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.proto b/staging/src/k8s.io/api/apps/v1beta1/generated.proto index 0ecc4659da0..a8190fb6b96 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.proto @@ -383,10 +383,14 @@ message StatefulSetList { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. message StatefulSetOrdinals { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional optional int32 start = 1; } @@ -481,11 +485,13 @@ message StatefulSetSpec { // +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional optional StatefulSetOrdinals ordinals = 11; } diff --git a/staging/src/k8s.io/api/apps/v1beta1/types.go b/staging/src/k8s.io/api/apps/v1beta1/types.go index 83106e1df8b..943a0c08d14 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types.go @@ -207,10 +207,14 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. type StatefulSetOrdinals struct { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered in the range: - // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` } @@ -288,11 +292,13 @@ type StatefulSetSpec struct { // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } diff --git a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go index 7c79496c66f..512444154e9 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go @@ -230,7 +230,7 @@ func (StatefulSetList) SwaggerDoc() map[string]string { var map_StatefulSetOrdinals = map[string]string{ "": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", - "start": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "start": "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", } func (StatefulSetOrdinals) SwaggerDoc() map[string]string { @@ -259,7 +259,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha.", - "ordinals": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.proto b/staging/src/k8s.io/api/apps/v1beta2/generated.proto index 9f7d561de38..4cbe6324ff5 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.proto @@ -670,10 +670,14 @@ message StatefulSetList { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. message StatefulSetOrdinals { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered - // [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional optional int32 start = 1; } @@ -767,11 +771,13 @@ message StatefulSetSpec { // +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional optional StatefulSetOrdinals ordinals = 11; } diff --git a/staging/src/k8s.io/api/apps/v1beta2/types.go b/staging/src/k8s.io/api/apps/v1beta2/types.go index 40a458052a2..0c0b6136b1e 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types.go @@ -217,10 +217,14 @@ type StatefulSetPersistentVolumeClaimRetentionPolicy struct { // StatefulSetOrdinals describes the policy used for replica ordinal assignment // in this StatefulSet. type StatefulSetOrdinals struct { - // Start is the number representing the first index that is used to represent - // replica ordinals. Defaults to 0. - // If set, replica ordinals will be numbered in the range: - // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // start is the number representing the first replica's index. It may be used + // to number replicas from an alternate index (eg: 1-indexed) over the default + // 0-indexed names, or to orchestrate progressive movement of replicas from + // one StatefulSet to another. + // If set, replica indices will be in the range: + // [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas). + // If unset, defaults to 0. Replica indices will be in the range: + // [0, .spec.replicas). // +optional Start int32 `json:"start" protobuf:"varint,1,opt,name=start"` } @@ -297,11 +301,13 @@ type StatefulSetSpec struct { // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` - // Ordinals controls how the stateful set creates pod and persistent volume - // claim names. - // The default behavior assigns a number starting with zero and incremented by - // one for each additional replica requested. This requires the - // StatefulSetSlice feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. A + // StatefulSet will create pods with the format -. + // For example, a pod in a StatefulSet named "web" with index number "3" would + // be named "web-3". The default ordinals behavior assigns a "0" index to the + // first replica and increments the index by one for each additional replica + // requested. Using the ordinals field requires the StatefulSetStartOrdinal + // feature gate to be enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } diff --git a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go index 3019357e111..09a2acadafd 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go @@ -354,7 +354,7 @@ func (StatefulSetList) SwaggerDoc() map[string]string { var map_StatefulSetOrdinals = map[string]string{ "": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", - "start": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "start": "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", } func (StatefulSetOrdinals) SwaggerDoc() map[string]string { @@ -383,7 +383,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha.", - "ordinals": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha.", + "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { From 67425594f31e004e099ccfb2db12359c6a4e4e17 Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Mon, 7 Nov 2022 12:14:23 -0800 Subject: [PATCH 5/7] Rebasing feature branch --- api/openapi-spec/swagger.json | 6 +++--- .../v3/apis__apps__v1_openapi.json | 6 +++--- pkg/apis/apps/types.go | 16 ++++++++-------- pkg/generated/openapi/zz_generated.openapi.go | 12 ++++++------ staging/src/k8s.io/api/apps/v1/generated.proto | 18 +++++++++--------- staging/src/k8s.io/api/apps/v1/types.go | 18 +++++++++--------- .../api/apps/v1/types_swagger_doc_generated.go | 4 ++-- .../k8s.io/api/apps/v1beta1/generated.proto | 18 +++++++++--------- staging/src/k8s.io/api/apps/v1beta1/types.go | 18 +++++++++--------- .../v1beta1/types_swagger_doc_generated.go | 4 ++-- .../k8s.io/api/apps/v1beta2/generated.proto | 18 +++++++++--------- staging/src/k8s.io/api/apps/v1beta2/types.go | 18 +++++++++--------- .../v1beta2/types_swagger_doc_generated.go | 4 ++-- .../api/testdata/HEAD/apps.v1.StatefulSet.json | 3 +++ .../api/testdata/HEAD/apps.v1.StatefulSet.yaml | 2 ++ .../HEAD/apps.v1beta1.StatefulSet.json | 3 +++ .../HEAD/apps.v1beta1.StatefulSet.yaml | 2 ++ .../HEAD/apps.v1beta2.StatefulSet.json | 3 +++ .../HEAD/apps.v1beta2.StatefulSet.yaml | 2 ++ 19 files changed, 95 insertions(+), 80 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index b35c599c115..9613864198b 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -1628,7 +1628,7 @@ "description": "StatefulSetOrdinals describes the policy used for replica ordinal assignment in this StatefulSet.", "properties": { "start": { - "description": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "description": "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", "format": "int32", "type": "integer" } @@ -1659,7 +1659,7 @@ }, "ordinals": { "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetOrdinals", - "description": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha." + "description": "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha." }, "persistentVolumeClaimRetentionPolicy": { "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetPersistentVolumeClaimRetentionPolicy", @@ -1689,7 +1689,7 @@ }, "template": { "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec", - "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet." + "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\"." }, "updateStrategy": { "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy", diff --git a/api/openapi-spec/v3/apis__apps__v1_openapi.json b/api/openapi-spec/v3/apis__apps__v1_openapi.json index 8e0820855ea..4e3b606c34a 100644 --- a/api/openapi-spec/v3/apis__apps__v1_openapi.json +++ b/api/openapi-spec/v3/apis__apps__v1_openapi.json @@ -1049,7 +1049,7 @@ "properties": { "start": { "default": 0, - "description": "Start is the number representing the first index that is used to represent replica ordinals. Defaults to 0. If set, replica ordinals will be numbered [.spec.ordinals.start, .spec.ordinals.start - .spec.replicas).", + "description": "start is the number representing the first replica's index. It may be used to number replicas from an alternate index (eg: 1-indexed) over the default 0-indexed names, or to orchestrate progressive movement of replicas from one StatefulSet to another. If set, replica indices will be in the range:\n [.spec.ordinals.start, .spec.ordinals.start + .spec.replicas).\nIf unset, defaults to 0. Replica indices will be in the range:\n [0, .spec.replicas).", "format": "int32", "type": "integer" } @@ -1084,7 +1084,7 @@ "$ref": "#/components/schemas/io.k8s.api.apps.v1.StatefulSetOrdinals" } ], - "description": "Ordinals controls how the stateful set creates pod and persistent volume claim names. The default behavior assigns a number starting with zero and incremented by one for each additional replica requested. This requires the StatefulSetSlice feature gate to be enabled, which is alpha." + "description": "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha." }, "persistentVolumeClaimRetentionPolicy": { "allOf": [ @@ -1128,7 +1128,7 @@ } ], "default": {}, - "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet." + "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\"." }, "updateStrategy": { "allOf": [ diff --git a/pkg/apis/apps/types.go b/pkg/apis/apps/types.go index 0267ee2ae2c..624deca9b3a 100644 --- a/pkg/apis/apps/types.go +++ b/pkg/apis/apps/types.go @@ -177,7 +177,9 @@ type StatefulSetSpec struct { // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". Template api.PodTemplateSpec // VolumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -231,13 +233,11 @@ type StatefulSetSpec struct { // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals } diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 3502f536e74..4dec292973e 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -4930,7 +4930,7 @@ func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) comm }, "template": { SchemaProps: spec.SchemaProps{ - Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", Default: map[string]interface{}{}, Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), }, @@ -4993,7 +4993,7 @@ func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) comm }, "ordinals": { SchemaProps: spec.SchemaProps{ - Description: "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", + Description: "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", Ref: ref("k8s.io/api/apps/v1.StatefulSetOrdinals"), }, }, @@ -6065,7 +6065,7 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) }, "template": { SchemaProps: spec.SchemaProps{ - Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", Default: map[string]interface{}{}, Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), }, @@ -6128,7 +6128,7 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) }, "ordinals": { SchemaProps: spec.SchemaProps{ - Description: "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", + Description: "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetOrdinals"), }, }, @@ -7749,7 +7749,7 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) }, "template": { SchemaProps: spec.SchemaProps{ - Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", Default: map[string]interface{}{}, Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), }, @@ -7812,7 +7812,7 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) }, "ordinals": { SchemaProps: spec.SchemaProps{ - Description: "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", + Description: "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetOrdinals"), }, }, diff --git a/staging/src/k8s.io/api/apps/v1/generated.proto b/staging/src/k8s.io/api/apps/v1/generated.proto index eb307b051ff..48e89c27b3a 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1/generated.proto @@ -669,10 +669,12 @@ message StatefulSetSpec { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; - // template is the object that describes the pod that will be created if + // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". optional k8s.io.api.core.v1.PodTemplateSpec template = 3; // volumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -729,13 +731,11 @@ message StatefulSetSpec { // which is alpha. +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional optional StatefulSetOrdinals ordinals = 11; } diff --git a/staging/src/k8s.io/api/apps/v1/types.go b/staging/src/k8s.io/api/apps/v1/types.go index adbe77d0ee2..b25a3ce2d53 100644 --- a/staging/src/k8s.io/api/apps/v1/types.go +++ b/staging/src/k8s.io/api/apps/v1/types.go @@ -193,10 +193,12 @@ type StatefulSetSpec struct { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` - // template is the object that describes the pod that will be created if + // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,3,opt,name=template"` // volumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -253,13 +255,11 @@ type StatefulSetSpec struct { // which is alpha. +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } diff --git a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go index 27a2b5ecd0c..2c6afee0ba0 100644 --- a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go @@ -347,7 +347,7 @@ var map_StatefulSetSpec = map[string]string{ "": "A StatefulSetSpec is the specification of a StatefulSet.", "replicas": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", "selector": "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "template": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", "volumeClaimTemplates": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", "podManagementPolicy": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", @@ -355,7 +355,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "persistentVolumeClaimRetentionPolicy describes the lifecycle of persistent volume claims created from volumeClaimTemplates. By default, all persistent volume claims are created as needed and retained until manually deleted. This policy allows the lifecycle to be altered, for example by deleting persistent volume claims when their stateful set is deleted, or when their pod is scaled down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. +optional", - "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", + "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.proto b/staging/src/k8s.io/api/apps/v1beta1/generated.proto index a8190fb6b96..e46ff31246f 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.proto @@ -428,10 +428,12 @@ message StatefulSetSpec { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; - // template is the object that describes the pod that will be created if + // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". optional k8s.io.api.core.v1.PodTemplateSpec template = 3; // volumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -485,13 +487,11 @@ message StatefulSetSpec { // +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional optional StatefulSetOrdinals ordinals = 11; } diff --git a/staging/src/k8s.io/api/apps/v1beta1/types.go b/staging/src/k8s.io/api/apps/v1beta1/types.go index 943a0c08d14..7a7fd78937d 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types.go @@ -235,10 +235,12 @@ type StatefulSetSpec struct { // +optional Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` - // template is the object that describes the pod that will be created if + // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,3,opt,name=template"` // volumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -292,13 +294,11 @@ type StatefulSetSpec struct { // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } diff --git a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go index 512444154e9..7cfd525c630 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go @@ -251,7 +251,7 @@ var map_StatefulSetSpec = map[string]string{ "": "A StatefulSetSpec is the specification of a StatefulSet.", "replicas": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", "selector": "selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "template": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", "volumeClaimTemplates": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", "podManagementPolicy": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", @@ -259,7 +259,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha.", - "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", + "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.proto b/staging/src/k8s.io/api/apps/v1beta2/generated.proto index 4cbe6324ff5..64ac3a0e878 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.proto @@ -714,10 +714,12 @@ message StatefulSetSpec { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; - // template is the object that describes the pod that will be created if + // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". optional k8s.io.api.core.v1.PodTemplateSpec template = 3; // volumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -771,13 +773,11 @@ message StatefulSetSpec { // +optional optional StatefulSetPersistentVolumeClaimRetentionPolicy persistentVolumeClaimRetentionPolicy = 10; - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional optional StatefulSetOrdinals ordinals = 11; } diff --git a/staging/src/k8s.io/api/apps/v1beta2/types.go b/staging/src/k8s.io/api/apps/v1beta2/types.go index 0c0b6136b1e..8070d1c60a0 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types.go @@ -244,10 +244,12 @@ type StatefulSetSpec struct { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` - // template is the object that describes the pod that will be created if + // Template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest - // of the StatefulSet. + // of the StatefulSet. Each pod will be named with the format + // -. For example, a pod in a StatefulSet named + // "web" with index number "3" would be named "web-3". Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,3,opt,name=template"` // volumeClaimTemplates is a list of claims that pods are allowed to reference. @@ -301,13 +303,11 @@ type StatefulSetSpec struct { // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistentVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"` - // ordinals controls the numbering of replica indices in a StatefulSet. A - // StatefulSet will create pods with the format -. - // For example, a pod in a StatefulSet named "web" with index number "3" would - // be named "web-3". The default ordinals behavior assigns a "0" index to the - // first replica and increments the index by one for each additional replica - // requested. Using the ordinals field requires the StatefulSetStartOrdinal - // feature gate to be enabled, which is alpha. + // ordinals controls the numbering of replica indices in a StatefulSet. The + // default ordinals behavior assigns a "0" index to the first replica and + // increments the index by one for each additional replica requested. Using + // the ordinals field requires the StatefulSetStartOrdinal feature gate to be + // enabled, which is alpha. // +optional Ordinals *StatefulSetOrdinals `json:"ordinals,omitempty" protobuf:"bytes,11,opt,name=ordinals"` } diff --git a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go index 09a2acadafd..b89844b5bcd 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go @@ -375,7 +375,7 @@ var map_StatefulSetSpec = map[string]string{ "": "A StatefulSetSpec is the specification of a StatefulSet.", "replicas": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", "selector": "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "template": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", "volumeClaimTemplates": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", "podManagementPolicy": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", @@ -383,7 +383,7 @@ var map_StatefulSetSpec = map[string]string{ "revisionHistoryLimit": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", "persistentVolumeClaimRetentionPolicy": "PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha.", - "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. A StatefulSet will create pods with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\". The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", + "ordinals": "ordinals controls the numbering of replica indices in a StatefulSet. The default ordinals behavior assigns a \"0\" index to the first replica and increments the index by one for each additional replica requested. Using the ordinals field requires the StatefulSetStartOrdinal feature gate to be enabled, which is alpha.", } func (StatefulSetSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.json b/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.json index c7397a234a8..50d615bdb28 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.json +++ b/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.json @@ -1758,6 +1758,9 @@ "persistentVolumeClaimRetentionPolicy": { "whenDeleted": "whenDeletedValue", "whenScaled": "whenScaledValue" + }, + "ordinals": { + "start": 1 } }, "status": { diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.yaml b/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.yaml index 39fe9ab7eb1..acd94c8d214 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.yaml @@ -34,6 +34,8 @@ metadata: uid: uidValue spec: minReadySeconds: 9 + ordinals: + start: 1 persistentVolumeClaimRetentionPolicy: whenDeleted: whenDeletedValue whenScaled: whenScaledValue diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.json b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.json index a84e28cd9ec..c12c903aa34 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.json +++ b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.json @@ -1758,6 +1758,9 @@ "persistentVolumeClaimRetentionPolicy": { "whenDeleted": "whenDeletedValue", "whenScaled": "whenScaledValue" + }, + "ordinals": { + "start": 1 } }, "status": { diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.yaml b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.yaml index 37b479b9dff..20087374182 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.yaml @@ -34,6 +34,8 @@ metadata: uid: uidValue spec: minReadySeconds: 9 + ordinals: + start: 1 persistentVolumeClaimRetentionPolicy: whenDeleted: whenDeletedValue whenScaled: whenScaledValue diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.json b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.json index ee9f9a50ad8..24deb7ba35f 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.json +++ b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.json @@ -1758,6 +1758,9 @@ "persistentVolumeClaimRetentionPolicy": { "whenDeleted": "whenDeletedValue", "whenScaled": "whenScaledValue" + }, + "ordinals": { + "start": 1 } }, "status": { diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.yaml b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.yaml index c9afd6747ab..f514ca0291f 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.yaml @@ -34,6 +34,8 @@ metadata: uid: uidValue spec: minReadySeconds: 9 + ordinals: + start: 1 persistentVolumeClaimRetentionPolicy: whenDeleted: whenDeletedValue whenScaled: whenScaledValue From 9258cb40417d96fdae45b0294adf2bd015b485b0 Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Mon, 7 Nov 2022 14:47:51 -0800 Subject: [PATCH 6/7] Fix typo in function emptyInvariants() --- .../statefulset/stateful_set_control_test.go | 4 ++-- .../api/testdata/HEAD/apps.v1.StatefulSet.pb | Bin 10822 -> 10826 bytes .../testdata/HEAD/apps.v1beta1.StatefulSet.pb | Bin 10827 -> 10831 bytes .../testdata/HEAD/apps.v1beta2.StatefulSet.pb | Bin 10827 -> 10831 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/controller/statefulset/stateful_set_control_test.go b/pkg/controller/statefulset/stateful_set_control_test.go index 20cc18c14c9..95b5003ddfe 100644 --- a/pkg/controller/statefulset/stateful_set_control_test.go +++ b/pkg/controller/statefulset/stateful_set_control_test.go @@ -559,7 +559,7 @@ func PodRecreateDeleteFailure(t *testing.T, set *apps.StatefulSet, invariants in } } -func emptyInvaraints(set *apps.StatefulSet, om *fakeObjectManager) error { +func emptyInvariants(set *apps.StatefulSet, om *fakeObjectManager) error { return nil } @@ -584,7 +584,7 @@ func TestStatefulSetControlWithStartOrdinal(t *testing.T) { testFn := testCase.fn set := testObj() - testFn(t, set, emptyInvaraints) + testFn(t, set, emptyInvariants) } } diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.pb b/staging/src/k8s.io/api/testdata/HEAD/apps.v1.StatefulSet.pb index 9bf609b38e2bfdc7924afbec99864e88499a18e7..b26d490e7467a24d44b53a191de0cd424df3d78e 100644 GIT binary patch delta 36 scmX>Waw=qkEaUQxa;c20#{)PRg(g4X_T7Ay@v}Nh6cY#IVax7$mEaT#ha;c20hXXhmg(g4X_T7Ay@w58mGn#b(!M6-% diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.pb b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta1.StatefulSet.pb index 99a2898ed051b8a5e76cdcbaf64763ce86d79988..710c5530b3a6ebad724c24e47b82e59d3570672e 100644 GIT binary patch delta 38 ucmX>daz12&64UaK&37477+H@8a4-r@HW2gMe4Fu;I!hE22jk?knsope6AfMf delta 33 pcmX>fayn#!64T<4&37477+DVoa4-r@HW2gMe4Fu;`s9n6bpYLq4DkQ} diff --git a/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.pb b/staging/src/k8s.io/api/testdata/HEAD/apps.v1beta2.StatefulSet.pb index 104446355713d56824851a565abf9238386826a1..b11288d69a5dc0efdfa857f79cd4603ac3808064 100644 GIT binary patch delta 38 ucmX>daz12&64UaK&37477+H@8a4-r@HW2gMe4Fu;I!hE22jk?knsope6AfMf delta 33 pcmX>fayn#!64T<4&37477+DVoa4-r@HW2gMe4Fu;`s9n6bpYLq4DkQ} From c492a6d69bb258d642b3dcd4882e62e22c302da7 Mon Sep 17 00:00:00 2001 From: Peter Schuurman Date: Tue, 8 Nov 2022 16:22:36 -0800 Subject: [PATCH 7/7] Undo unintentional documentation comment change --- api/openapi-spec/swagger.json | 2 +- api/openapi-spec/v3/apis__apps__v1_openapi.json | 2 +- pkg/generated/openapi/zz_generated.openapi.go | 6 +++--- staging/src/k8s.io/api/apps/v1/generated.proto | 2 +- staging/src/k8s.io/api/apps/v1/types.go | 2 +- .../src/k8s.io/api/apps/v1/types_swagger_doc_generated.go | 2 +- staging/src/k8s.io/api/apps/v1beta1/generated.proto | 2 +- staging/src/k8s.io/api/apps/v1beta1/types.go | 2 +- .../k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go | 2 +- staging/src/k8s.io/api/apps/v1beta2/generated.proto | 2 +- staging/src/k8s.io/api/apps/v1beta2/types.go | 2 +- .../k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 9613864198b..e8402be5ded 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -1689,7 +1689,7 @@ }, "template": { "$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec", - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\"." + "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\"." }, "updateStrategy": { "$ref": "#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy", diff --git a/api/openapi-spec/v3/apis__apps__v1_openapi.json b/api/openapi-spec/v3/apis__apps__v1_openapi.json index 4e3b606c34a..b25dd31737c 100644 --- a/api/openapi-spec/v3/apis__apps__v1_openapi.json +++ b/api/openapi-spec/v3/apis__apps__v1_openapi.json @@ -1128,7 +1128,7 @@ } ], "default": {}, - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\"." + "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\"." }, "updateStrategy": { "allOf": [ diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 4dec292973e..9d97bb8aa00 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -4930,7 +4930,7 @@ func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) comm }, "template": { SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", + Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", Default: map[string]interface{}{}, Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), }, @@ -6065,7 +6065,7 @@ func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) }, "template": { SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", + Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", Default: map[string]interface{}{}, Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), }, @@ -7749,7 +7749,7 @@ func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) }, "template": { SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", + Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", Default: map[string]interface{}{}, Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), }, diff --git a/staging/src/k8s.io/api/apps/v1/generated.proto b/staging/src/k8s.io/api/apps/v1/generated.proto index 48e89c27b3a..534b550feca 100644 --- a/staging/src/k8s.io/api/apps/v1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1/generated.proto @@ -669,7 +669,7 @@ message StatefulSetSpec { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; - // Template is the object that describes the pod that will be created if + // template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest // of the StatefulSet. Each pod will be named with the format diff --git a/staging/src/k8s.io/api/apps/v1/types.go b/staging/src/k8s.io/api/apps/v1/types.go index b25a3ce2d53..09766c29535 100644 --- a/staging/src/k8s.io/api/apps/v1/types.go +++ b/staging/src/k8s.io/api/apps/v1/types.go @@ -193,7 +193,7 @@ type StatefulSetSpec struct { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` - // Template is the object that describes the pod that will be created if + // template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest // of the StatefulSet. Each pod will be named with the format diff --git a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go index 2c6afee0ba0..509bb11c50f 100644 --- a/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go @@ -347,7 +347,7 @@ var map_StatefulSetSpec = map[string]string{ "": "A StatefulSetSpec is the specification of a StatefulSet.", "replicas": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", "selector": "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", + "template": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", "volumeClaimTemplates": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", "podManagementPolicy": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", diff --git a/staging/src/k8s.io/api/apps/v1beta1/generated.proto b/staging/src/k8s.io/api/apps/v1beta1/generated.proto index e46ff31246f..15fb1aa8785 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta1/generated.proto @@ -428,7 +428,7 @@ message StatefulSetSpec { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; - // Template is the object that describes the pod that will be created if + // template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest // of the StatefulSet. Each pod will be named with the format diff --git a/staging/src/k8s.io/api/apps/v1beta1/types.go b/staging/src/k8s.io/api/apps/v1beta1/types.go index 7a7fd78937d..91002309059 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types.go @@ -235,7 +235,7 @@ type StatefulSetSpec struct { // +optional Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` - // Template is the object that describes the pod that will be created if + // template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest // of the StatefulSet. Each pod will be named with the format diff --git a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go index 7cfd525c630..00d6d182529 100644 --- a/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go @@ -251,7 +251,7 @@ var map_StatefulSetSpec = map[string]string{ "": "A StatefulSetSpec is the specification of a StatefulSet.", "replicas": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", "selector": "selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", + "template": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", "volumeClaimTemplates": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", "podManagementPolicy": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", diff --git a/staging/src/k8s.io/api/apps/v1beta2/generated.proto b/staging/src/k8s.io/api/apps/v1beta2/generated.proto index 64ac3a0e878..af8c4fe4178 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/generated.proto +++ b/staging/src/k8s.io/api/apps/v1beta2/generated.proto @@ -714,7 +714,7 @@ message StatefulSetSpec { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; - // Template is the object that describes the pod that will be created if + // template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest // of the StatefulSet. Each pod will be named with the format diff --git a/staging/src/k8s.io/api/apps/v1beta2/types.go b/staging/src/k8s.io/api/apps/v1beta2/types.go index 8070d1c60a0..dbe4d23bf1a 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types.go @@ -244,7 +244,7 @@ type StatefulSetSpec struct { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` - // Template is the object that describes the pod that will be created if + // template is the object that describes the pod that will be created if // insufficient replicas are detected. Each pod stamped out by the StatefulSet // will fulfill this Template, but have a unique identity from the rest // of the StatefulSet. Each pod will be named with the format diff --git a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go index b89844b5bcd..1936a246726 100644 --- a/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go @@ -375,7 +375,7 @@ var map_StatefulSetSpec = map[string]string{ "": "A StatefulSetSpec is the specification of a StatefulSet.", "replicas": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", "selector": "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", + "template": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. Each pod will be named with the format -. For example, a pod in a StatefulSet named \"web\" with index number \"3\" would be named \"web-3\".", "volumeClaimTemplates": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", "podManagementPolicy": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.",