mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Merge pull request #47987 from wongma7/reclaimpolicy
Automatic merge from submit-queue (batch tested with PRs 49869, 47987, 50211, 50804, 50583) Add ReclaimPolicy field to StorageClass fix https://github.com/kubernetes/kubernetes/issues/38192, enough people want this imo so going ahead and adding it according to initial suggested design some considerations: * No Recycle allowed, Retain (& Delete) only. * Do we need to gate the field. * E2E test where a Retain PV is dynamically provisioned is TODO if we agree we want this & this is the way to do it. * Need a feature repo issue to track docs and stuff for 1.8 **Release note**: ```release-note StorageClass has a new field to configure reclaim policy of dynamically provisioned PVs. ```
This commit is contained in:
commit
9c8f74e45c
@ -64235,6 +64235,10 @@
|
||||
"provisioner": {
|
||||
"description": "Provisioner indicates the type of the provisioner.",
|
||||
"type": "string"
|
||||
},
|
||||
"reclaimPolicy": {
|
||||
"description": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"x-kubernetes-group-version-kind": [
|
||||
@ -64307,6 +64311,10 @@
|
||||
"provisioner": {
|
||||
"description": "Provisioner indicates the type of the provisioner.",
|
||||
"type": "string"
|
||||
},
|
||||
"reclaimPolicy": {
|
||||
"description": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"x-kubernetes-group-version-kind": [
|
||||
|
@ -716,6 +716,10 @@
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"description": "Parameters holds the parameters for the provisioner that should create volumes of this storage class."
|
||||
},
|
||||
"reclaimPolicy": {
|
||||
"$ref": "v1.PersistentVolumeReclaimPolicy",
|
||||
"description": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete."
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -957,6 +961,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"v1.PersistentVolumeReclaimPolicy": {
|
||||
"id": "v1.PersistentVolumeReclaimPolicy",
|
||||
"properties": {}
|
||||
},
|
||||
"v1.WatchEvent": {
|
||||
"id": "v1.WatchEvent",
|
||||
"required": [
|
||||
|
@ -716,6 +716,10 @@
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"description": "Parameters holds the parameters for the provisioner that should create volumes of this storage class."
|
||||
},
|
||||
"reclaimPolicy": {
|
||||
"$ref": "v1.PersistentVolumeReclaimPolicy",
|
||||
"description": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete."
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -957,6 +961,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"v1.PersistentVolumeReclaimPolicy": {
|
||||
"id": "v1.PersistentVolumeReclaimPolicy",
|
||||
"properties": {}
|
||||
},
|
||||
"v1.WatchEvent": {
|
||||
"id": "v1.WatchEvent",
|
||||
"required": [
|
||||
|
@ -968,6 +968,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">reclaimPolicy</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_persistentvolumereclaimpolicy">v1.PersistentVolumeReclaimPolicy</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@ -1195,6 +1202,10 @@ When an object is created, the system will populate this list with the current s
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_persistentvolumereclaimpolicy">v1.PersistentVolumeReclaimPolicy</h3>
|
||||
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_apiresource">v1.APIResource</h3>
|
||||
|
@ -436,6 +436,12 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_patch">v1.Patch</h3>
|
||||
<div class="paragraph">
|
||||
<p>Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1beta1_storageclasslist">v1beta1.StorageClassList</h3>
|
||||
@ -491,12 +497,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_patch">v1.Patch</h3>
|
||||
<div class="paragraph">
|
||||
<p>Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_deleteoptions">v1.DeleteOptions</h3>
|
||||
@ -930,6 +930,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">reclaimPolicy</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_persistentvolumereclaimpolicy">v1.PersistentVolumeReclaimPolicy</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@ -1195,6 +1202,10 @@ When an object is created, the system will populate this list with the current s
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_persistentvolumereclaimpolicy">v1.PersistentVolumeReclaimPolicy</h3>
|
||||
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_apiresource">v1.APIResource</h3>
|
||||
|
@ -129,6 +129,10 @@ func TestDefaulting(t *testing.T) {
|
||||
{Group: "admissionregistration.k8s.io", Version: "v1alpha1", Kind: "ExternalAdmissionHookConfigurationList"}: {},
|
||||
{Group: "networking.k8s.io", Version: "v1", Kind: "NetworkPolicy"}: {},
|
||||
{Group: "networking.k8s.io", Version: "v1", Kind: "NetworkPolicyList"}: {},
|
||||
{Group: "storage.k8s.io", Version: "v1beta1", Kind: "StorageClass"}: {},
|
||||
{Group: "storage.k8s.io", Version: "v1beta1", Kind: "StorageClassList"}: {},
|
||||
{Group: "storage.k8s.io", Version: "v1", Kind: "StorageClass"}: {},
|
||||
{Group: "storage.k8s.io", Version: "v1", Kind: "StorageClassList"}: {},
|
||||
}
|
||||
|
||||
f := fuzz.New().NilChance(.5).NumElements(1, 1).RandSource(rand.NewSource(1))
|
||||
|
@ -26,6 +26,7 @@ go_library(
|
||||
"//pkg/apis/extensions/v1beta1:go_default_library",
|
||||
"//pkg/apis/policy/fuzzer:go_default_library",
|
||||
"//pkg/apis/rbac/fuzzer:go_default_library",
|
||||
"//pkg/apis/storage/fuzzer:go_default_library",
|
||||
"//vendor/github.com/google/gofuzz:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library",
|
||||
|
@ -40,6 +40,7 @@ import (
|
||||
extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||
policyfuzzer "k8s.io/kubernetes/pkg/apis/policy/fuzzer"
|
||||
rbacfuzzer "k8s.io/kubernetes/pkg/apis/rbac/fuzzer"
|
||||
storagefuzzer "k8s.io/kubernetes/pkg/apis/storage/fuzzer"
|
||||
)
|
||||
|
||||
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
|
||||
@ -100,4 +101,5 @@ var FuzzerFuncs = fuzzer.MergeFuzzerFuncs(
|
||||
policyfuzzer.Funcs,
|
||||
certificatesfuzzer.Funcs,
|
||||
admissionregistrationfuzzer.Funcs,
|
||||
storagefuzzer.Funcs,
|
||||
)
|
||||
|
@ -14,6 +14,7 @@ go_library(
|
||||
"zz_generated.deepcopy.go",
|
||||
],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
|
@ -8,7 +8,12 @@ load(
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["fuzzer.go"],
|
||||
deps = ["//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//vendor/github.com/google/gofuzz:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
|
@ -17,10 +17,20 @@ limitations under the License.
|
||||
package fuzzer
|
||||
|
||||
import (
|
||||
fuzz "github.com/google/gofuzz"
|
||||
|
||||
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/storage"
|
||||
)
|
||||
|
||||
// Funcs returns the fuzzer functions for the storage api group.
|
||||
var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
return []interface{}{}
|
||||
return []interface{}{
|
||||
func(obj *storage.StorageClass, c fuzz.Continue) {
|
||||
c.FuzzNoCustom(obj) // fuzz self without calling this function again
|
||||
reclamationPolicies := []api.PersistentVolumeReclaimPolicy{api.PersistentVolumeReclaimDelete, api.PersistentVolumeReclaimRetain}
|
||||
obj.ReclaimPolicy = &reclamationPolicies[c.Rand.Intn(len(reclamationPolicies))]
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,10 @@ limitations under the License.
|
||||
|
||||
package storage
|
||||
|
||||
import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
)
|
||||
|
||||
// +genclient
|
||||
// +genclient:nonNamespaced
|
||||
@ -46,6 +49,11 @@ type StorageClass struct {
|
||||
// 512, with a cumulative max size of 256K
|
||||
// +optional
|
||||
Parameters map[string]string
|
||||
|
||||
// reclaimPolicy is the reclaim policy that dynamically provisioned
|
||||
// PersistentVolumes of this storage class are created with
|
||||
// +optional
|
||||
ReclaimPolicy *api.PersistentVolumeReclaimPolicy
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
@ -8,13 +8,16 @@ load(
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"defaults.go",
|
||||
"doc.go",
|
||||
"register.go",
|
||||
"zz_generated.conversion.go",
|
||||
"zz_generated.defaults.go",
|
||||
],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/api/storage/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
|
34
pkg/apis/storage/v1/defaults.go
Normal file
34
pkg/apis/storage/v1/defaults.go
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
Copyright 2017 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.
|
||||
*/
|
||||
|
||||
package v1
|
||||
|
||||
import (
|
||||
"k8s.io/api/core/v1"
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
func addDefaultingFuncs(scheme *runtime.Scheme) error {
|
||||
return RegisterDefaults(scheme)
|
||||
}
|
||||
|
||||
func SetDefaults_StorageClass(obj *storagev1.StorageClass) {
|
||||
if obj.ReclaimPolicy == nil {
|
||||
obj.ReclaimPolicy = new(v1.PersistentVolumeReclaimPolicy)
|
||||
*obj.ReclaimPolicy = v1.PersistentVolumeReclaimDelete
|
||||
}
|
||||
}
|
@ -41,5 +41,5 @@ func init() {
|
||||
// We only register manually written functions here. The registration of the
|
||||
// generated functions takes place in the generated files. The separation
|
||||
// makes the code compile even when the generated files are missing.
|
||||
localSchemeBuilder.Register(RegisterDefaults)
|
||||
localSchemeBuilder.Register(addDefaultingFuncs)
|
||||
}
|
||||
|
@ -21,9 +21,11 @@ limitations under the License.
|
||||
package v1
|
||||
|
||||
import (
|
||||
core_v1 "k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/storage/v1"
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
api "k8s.io/kubernetes/pkg/api"
|
||||
storage "k8s.io/kubernetes/pkg/apis/storage"
|
||||
unsafe "unsafe"
|
||||
)
|
||||
@ -47,6 +49,7 @@ func autoConvert_v1_StorageClass_To_storage_StorageClass(in *v1.StorageClass, ou
|
||||
out.ObjectMeta = in.ObjectMeta
|
||||
out.Provisioner = in.Provisioner
|
||||
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
|
||||
out.ReclaimPolicy = (*api.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -59,6 +62,7 @@ func autoConvert_storage_StorageClass_To_v1_StorageClass(in *storage.StorageClas
|
||||
out.ObjectMeta = in.ObjectMeta
|
||||
out.Provisioner = in.Provisioner
|
||||
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
|
||||
out.ReclaimPolicy = (*core_v1.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@ limitations under the License.
|
||||
package v1
|
||||
|
||||
import (
|
||||
v1 "k8s.io/api/storage/v1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
@ -28,5 +29,18 @@ import (
|
||||
// Public to allow building arbitrary schemes.
|
||||
// All generated defaulters are covering - they call all nested defaulters.
|
||||
func RegisterDefaults(scheme *runtime.Scheme) error {
|
||||
scheme.AddTypeDefaultingFunc(&v1.StorageClass{}, func(obj interface{}) { SetObjectDefaults_StorageClass(obj.(*v1.StorageClass)) })
|
||||
scheme.AddTypeDefaultingFunc(&v1.StorageClassList{}, func(obj interface{}) { SetObjectDefaults_StorageClassList(obj.(*v1.StorageClassList)) })
|
||||
return nil
|
||||
}
|
||||
|
||||
func SetObjectDefaults_StorageClass(in *v1.StorageClass) {
|
||||
SetDefaults_StorageClass(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_StorageClassList(in *v1.StorageClassList) {
|
||||
for i := range in.Items {
|
||||
a := &in.Items[i]
|
||||
SetObjectDefaults_StorageClass(a)
|
||||
}
|
||||
}
|
||||
|
@ -8,13 +8,16 @@ load(
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"defaults.go",
|
||||
"doc.go",
|
||||
"register.go",
|
||||
"zz_generated.conversion.go",
|
||||
"zz_generated.defaults.go",
|
||||
],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/api/storage/v1beta1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
|
34
pkg/apis/storage/v1beta1/defaults.go
Normal file
34
pkg/apis/storage/v1beta1/defaults.go
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
Copyright 2017 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.
|
||||
*/
|
||||
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"k8s.io/api/core/v1"
|
||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
func addDefaultingFuncs(scheme *runtime.Scheme) error {
|
||||
return RegisterDefaults(scheme)
|
||||
}
|
||||
|
||||
func SetDefaults_StorageClass(obj *storagev1beta1.StorageClass) {
|
||||
if obj.ReclaimPolicy == nil {
|
||||
obj.ReclaimPolicy = new(v1.PersistentVolumeReclaimPolicy)
|
||||
*obj.ReclaimPolicy = v1.PersistentVolumeReclaimDelete
|
||||
}
|
||||
}
|
@ -41,5 +41,5 @@ func init() {
|
||||
// We only register manually written functions here. The registration of the
|
||||
// generated functions takes place in the generated files. The separation
|
||||
// makes the code compile even when the generated files are missing.
|
||||
localSchemeBuilder.Register(RegisterDefaults)
|
||||
localSchemeBuilder.Register(addDefaultingFuncs)
|
||||
}
|
||||
|
@ -21,9 +21,11 @@ limitations under the License.
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
v1 "k8s.io/api/core/v1"
|
||||
v1beta1 "k8s.io/api/storage/v1beta1"
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
api "k8s.io/kubernetes/pkg/api"
|
||||
storage "k8s.io/kubernetes/pkg/apis/storage"
|
||||
unsafe "unsafe"
|
||||
)
|
||||
@ -47,6 +49,7 @@ func autoConvert_v1beta1_StorageClass_To_storage_StorageClass(in *v1beta1.Storag
|
||||
out.ObjectMeta = in.ObjectMeta
|
||||
out.Provisioner = in.Provisioner
|
||||
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
|
||||
out.ReclaimPolicy = (*api.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -59,6 +62,7 @@ func autoConvert_storage_StorageClass_To_v1beta1_StorageClass(in *storage.Storag
|
||||
out.ObjectMeta = in.ObjectMeta
|
||||
out.Provisioner = in.Provisioner
|
||||
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
|
||||
out.ReclaimPolicy = (*v1.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@ limitations under the License.
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
v1beta1 "k8s.io/api/storage/v1beta1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
@ -28,5 +29,18 @@ import (
|
||||
// Public to allow building arbitrary schemes.
|
||||
// All generated defaulters are covering - they call all nested defaulters.
|
||||
func RegisterDefaults(scheme *runtime.Scheme) error {
|
||||
scheme.AddTypeDefaultingFunc(&v1beta1.StorageClass{}, func(obj interface{}) { SetObjectDefaults_StorageClass(obj.(*v1beta1.StorageClass)) })
|
||||
scheme.AddTypeDefaultingFunc(&v1beta1.StorageClassList{}, func(obj interface{}) { SetObjectDefaults_StorageClassList(obj.(*v1beta1.StorageClassList)) })
|
||||
return nil
|
||||
}
|
||||
|
||||
func SetObjectDefaults_StorageClass(in *v1beta1.StorageClass) {
|
||||
SetDefaults_StorageClass(in)
|
||||
}
|
||||
|
||||
func SetObjectDefaults_StorageClassList(in *v1beta1.StorageClassList) {
|
||||
for i := range in.Items {
|
||||
a := &in.Items[i]
|
||||
SetObjectDefaults_StorageClass(a)
|
||||
}
|
||||
}
|
||||
|
@ -10,8 +10,10 @@ go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["validation.go"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/validation:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
|
||||
],
|
||||
@ -22,6 +24,7 @@ go_test(
|
||||
srcs = ["validation_test.go"],
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
],
|
||||
|
@ -20,8 +20,10 @@ import (
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/util/validation"
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
apivalidation "k8s.io/kubernetes/pkg/api/validation"
|
||||
"k8s.io/kubernetes/pkg/apis/storage"
|
||||
)
|
||||
@ -31,6 +33,7 @@ func ValidateStorageClass(storageClass *storage.StorageClass) field.ErrorList {
|
||||
allErrs := apivalidation.ValidateObjectMeta(&storageClass.ObjectMeta, false, apivalidation.ValidateClassName, field.NewPath("metadata"))
|
||||
allErrs = append(allErrs, validateProvisioner(storageClass.Provisioner, field.NewPath("provisioner"))...)
|
||||
allErrs = append(allErrs, validateParameters(storageClass.Parameters, field.NewPath("parameters"))...)
|
||||
allErrs = append(allErrs, validateReclaimPolicy(storageClass.ReclaimPolicy, field.NewPath("reclaimPolicy"))...)
|
||||
|
||||
return allErrs
|
||||
}
|
||||
@ -45,6 +48,10 @@ func ValidateStorageClassUpdate(storageClass, oldStorageClass *storage.StorageCl
|
||||
if storageClass.Provisioner != oldStorageClass.Provisioner {
|
||||
allErrs = append(allErrs, field.Forbidden(field.NewPath("provisioner"), "updates to provisioner are forbidden."))
|
||||
}
|
||||
|
||||
if *storageClass.ReclaimPolicy != *oldStorageClass.ReclaimPolicy {
|
||||
allErrs = append(allErrs, field.Forbidden(field.NewPath("reclaimPolicy"), "updates to reclaimPolicy are forbidden."))
|
||||
}
|
||||
return allErrs
|
||||
}
|
||||
|
||||
@ -87,3 +94,17 @@ func validateParameters(params map[string]string, fldPath *field.Path) field.Err
|
||||
}
|
||||
return allErrs
|
||||
}
|
||||
|
||||
var supportedReclaimPolicy = sets.NewString(string(api.PersistentVolumeReclaimDelete), string(api.PersistentVolumeReclaimRetain))
|
||||
|
||||
// validateReclaimPolicy tests that the reclaim policy is one of the supported. It is up to the volume plugin to reject
|
||||
// provisioning for storage classes with impossible reclaim policies, e.g. EBS is not Recyclable
|
||||
func validateReclaimPolicy(reclaimPolicy *api.PersistentVolumeReclaimPolicy, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
if len(string(*reclaimPolicy)) > 0 {
|
||||
if !supportedReclaimPolicy.Has(string(*reclaimPolicy)) {
|
||||
allErrs = append(allErrs, field.NotSupported(fldPath, reclaimPolicy, supportedReclaimPolicy.List()))
|
||||
}
|
||||
}
|
||||
return allErrs
|
||||
}
|
||||
|
@ -21,21 +21,27 @@ import (
|
||||
"testing"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/storage"
|
||||
)
|
||||
|
||||
func TestValidateStorageClass(t *testing.T) {
|
||||
deleteReclaimPolicy := api.PersistentVolumeReclaimPolicy("Delete")
|
||||
retainReclaimPolicy := api.PersistentVolumeReclaimPolicy("Retain")
|
||||
recycleReclaimPolicy := api.PersistentVolumeReclaimPolicy("Recycle")
|
||||
successCases := []storage.StorageClass{
|
||||
{
|
||||
// empty parameters
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "kubernetes.io/foo-provisioner",
|
||||
Parameters: map[string]string{},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
{
|
||||
// nil parameters
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "kubernetes.io/foo-provisioner",
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
{
|
||||
// some parameters
|
||||
@ -46,6 +52,13 @@ func TestValidateStorageClass(t *testing.T) {
|
||||
"foo-parameter": "free-form-string",
|
||||
"foo-parameter2": "{\"embedded\": \"json\", \"with\": {\"structures\":\"inside\"}}",
|
||||
},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
{
|
||||
// retain reclaimPolicy
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "kubernetes.io/foo-provisioner",
|
||||
ReclaimPolicy: &retainReclaimPolicy,
|
||||
},
|
||||
}
|
||||
|
||||
@ -70,10 +83,12 @@ func TestValidateStorageClass(t *testing.T) {
|
||||
"namespace is present": {
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
|
||||
Provisioner: "kubernetes.io/foo-provisioner",
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
"invalid provisioner": {
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "kubernetes.io/invalid/provisioner",
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
"invalid empty parameter name": {
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
@ -81,15 +96,23 @@ func TestValidateStorageClass(t *testing.T) {
|
||||
Parameters: map[string]string{
|
||||
"": "value",
|
||||
},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
"provisioner: Required value": {
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "",
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
"too long parameters": {
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "kubernetes.io/foo",
|
||||
Parameters: longParameters,
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
"invalid reclaimpolicy": {
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Provisioner: "kubernetes.io/foo",
|
||||
ReclaimPolicy: &recycleReclaimPolicy,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ package storage
|
||||
import (
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
api "k8s.io/kubernetes/pkg/api"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
@ -59,6 +60,15 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) {
|
||||
(*out)[key] = val
|
||||
}
|
||||
}
|
||||
if in.ReclaimPolicy != nil {
|
||||
in, out := &in.ReclaimPolicy, &out.ReclaimPolicy
|
||||
if *in == nil {
|
||||
*out = nil
|
||||
} else {
|
||||
*out = new(api.PersistentVolumeReclaimPolicy)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@ var class1Parameters = map[string]string{
|
||||
var class2Parameters = map[string]string{
|
||||
"param2": "value2",
|
||||
}
|
||||
var deleteReclaimPolicy = v1.PersistentVolumeReclaimDelete
|
||||
var storageClasses = []*storage.StorageClass{
|
||||
{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
@ -43,6 +44,7 @@ var storageClasses = []*storage.StorageClass{
|
||||
|
||||
Provisioner: mockPluginName,
|
||||
Parameters: class1Parameters,
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
@ -53,6 +55,7 @@ var storageClasses = []*storage.StorageClass{
|
||||
},
|
||||
Provisioner: mockPluginName,
|
||||
Parameters: class2Parameters,
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
@ -63,6 +66,7 @@ var storageClasses = []*storage.StorageClass{
|
||||
},
|
||||
Provisioner: "vendor.com/my-volume",
|
||||
Parameters: class1Parameters,
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
@ -73,6 +77,7 @@ var storageClasses = []*storage.StorageClass{
|
||||
},
|
||||
Provisioner: "kubernetes.io/unknown",
|
||||
Parameters: class1Parameters,
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -1309,7 +1309,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
|
||||
tags[CloudVolumeCreatedForVolumeNameTag] = pvName
|
||||
|
||||
options := vol.VolumeOptions{
|
||||
PersistentVolumeReclaimPolicy: v1.PersistentVolumeReclaimDelete,
|
||||
PersistentVolumeReclaimPolicy: *storageClass.ReclaimPolicy,
|
||||
CloudTags: &tags,
|
||||
ClusterName: ctrl.clusterName,
|
||||
PVName: pvName,
|
||||
|
@ -28,6 +28,7 @@ go_test(
|
||||
srcs = ["strategy_test.go"],
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
|
||||
|
@ -11,6 +11,7 @@ go_test(
|
||||
srcs = ["storage_test.go"],
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/storage:go_default_library",
|
||||
"//pkg/registry/registrytest:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
|
@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storageapi "k8s.io/kubernetes/pkg/apis/storage"
|
||||
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||
)
|
||||
@ -42,6 +43,7 @@ func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
|
||||
}
|
||||
|
||||
func validNewStorageClass(name string) *storageapi.StorageClass {
|
||||
deleteReclaimPolicy := api.PersistentVolumeReclaimDelete
|
||||
return &storageapi.StorageClass{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
@ -50,6 +52,7 @@ func validNewStorageClass(name string) *storageapi.StorageClass {
|
||||
Parameters: map[string]string{
|
||||
"foo": "bar",
|
||||
},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,12 +67,14 @@ func TestCreate(t *testing.T) {
|
||||
test := registrytest.New(t, storage.Store).ClusterScope()
|
||||
storageClass := validNewStorageClass("foo")
|
||||
storageClass.ObjectMeta = metav1.ObjectMeta{GenerateName: "foo"}
|
||||
deleteReclaimPolicy := api.PersistentVolumeReclaimDelete
|
||||
test.TestCreate(
|
||||
// valid
|
||||
storageClass,
|
||||
// invalid
|
||||
&storageapi.StorageClass{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "*BadName!"},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/storage"
|
||||
)
|
||||
|
||||
@ -33,6 +34,7 @@ func TestStorageClassStrategy(t *testing.T) {
|
||||
t.Errorf("StorageClass should not allow create on update")
|
||||
}
|
||||
|
||||
deleteReclaimPolicy := api.PersistentVolumeReclaimDelete
|
||||
storageClass := &storage.StorageClass{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "valid-class",
|
||||
@ -41,6 +43,7 @@ func TestStorageClassStrategy(t *testing.T) {
|
||||
Parameters: map[string]string{
|
||||
"foo": "bar",
|
||||
},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
}
|
||||
|
||||
Strategy.PrepareForCreate(ctx, storageClass)
|
||||
@ -59,6 +62,7 @@ func TestStorageClassStrategy(t *testing.T) {
|
||||
Parameters: map[string]string{
|
||||
"foo": "bar",
|
||||
},
|
||||
ReclaimPolicy: &deleteReclaimPolicy,
|
||||
}
|
||||
|
||||
Strategy.PrepareForUpdate(ctx, newStorageClass, storageClass)
|
||||
|
@ -20,6 +20,7 @@ go_library(
|
||||
"//vendor/github.com/gogo/protobuf/proto:go_default_library",
|
||||
"//vendor/github.com/gogo/protobuf/sortkeys:go_default_library",
|
||||
"//vendor/github.com/ugorji/go/codec:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
|
@ -34,6 +34,8 @@ import proto "github.com/gogo/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
|
||||
import k8s_io_api_core_v1 "k8s.io/api/core/v1"
|
||||
|
||||
import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys"
|
||||
|
||||
import strings "strings"
|
||||
@ -113,6 +115,12 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) {
|
||||
i += copy(dAtA[i:], v)
|
||||
}
|
||||
}
|
||||
if m.ReclaimPolicy != nil {
|
||||
dAtA[i] = 0x22
|
||||
i++
|
||||
i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReclaimPolicy)))
|
||||
i += copy(dAtA[i:], *m.ReclaimPolicy)
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
@ -196,6 +204,10 @@ func (m *StorageClass) Size() (n int) {
|
||||
n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.ReclaimPolicy != nil {
|
||||
l = len(*m.ReclaimPolicy)
|
||||
n += 1 + l + sovGenerated(uint64(l))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
@ -244,6 +256,7 @@ func (this *StorageClass) String() string {
|
||||
`ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`,
|
||||
`Provisioner:` + fmt.Sprintf("%v", this.Provisioner) + `,`,
|
||||
`Parameters:` + mapStringForParameters + `,`,
|
||||
`ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`,
|
||||
`}`,
|
||||
}, "")
|
||||
return s
|
||||
@ -471,6 +484,36 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error {
|
||||
m.Parameters[mapkey] = mapvalue
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field ReclaimPolicy", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowGenerated
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthGenerated
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
s := k8s_io_api_core_v1.PersistentVolumeReclaimPolicy(dAtA[iNdEx:postIndex])
|
||||
m.ReclaimPolicy = &s
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipGenerated(dAtA[iNdEx:])
|
||||
@ -713,35 +756,39 @@ func init() {
|
||||
}
|
||||
|
||||
var fileDescriptorGenerated = []byte{
|
||||
// 465 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x6e, 0xd3, 0x40,
|
||||
0x10, 0xc6, 0xb3, 0x8e, 0x22, 0xb5, 0x1b, 0x10, 0x91, 0x01, 0x29, 0xca, 0x61, 0x1b, 0x95, 0x4b,
|
||||
0x2e, 0xec, 0x92, 0x16, 0x50, 0x85, 0x04, 0x87, 0x20, 0x24, 0x90, 0x40, 0x54, 0xe6, 0x86, 0x38,
|
||||
0xb0, 0x49, 0x06, 0x67, 0x71, 0xec, 0xb5, 0x76, 0xc7, 0x96, 0x72, 0xe3, 0x11, 0x78, 0x1e, 0x9e,
|
||||
0x20, 0x37, 0x7a, 0xec, 0xa9, 0x22, 0xe6, 0x45, 0x90, 0xff, 0x10, 0x5b, 0x4d, 0xab, 0xf6, 0xe6,
|
||||
0x99, 0xf9, 0x7e, 0xdf, 0xcc, 0x7e, 0xa6, 0xaf, 0x82, 0x13, 0xcb, 0x95, 0x16, 0x41, 0x32, 0x05,
|
||||
0x13, 0x01, 0x82, 0x15, 0x29, 0x44, 0x73, 0x6d, 0x44, 0x35, 0x90, 0xb1, 0x12, 0x16, 0xb5, 0x91,
|
||||
0x3e, 0x88, 0x74, 0x2c, 0x7c, 0x88, 0xc0, 0x48, 0x84, 0x39, 0x8f, 0x8d, 0x46, 0xed, 0x3e, 0x2c,
|
||||
0x65, 0x5c, 0xc6, 0x8a, 0x57, 0x32, 0x9e, 0x8e, 0x07, 0x8f, 0x7d, 0x85, 0x8b, 0x64, 0xca, 0x67,
|
||||
0x3a, 0x14, 0xbe, 0xf6, 0xb5, 0x28, 0xd4, 0xd3, 0xe4, 0x5b, 0x51, 0x15, 0x45, 0xf1, 0x55, 0xba,
|
||||
0x0c, 0x9e, 0xd6, 0xcb, 0x42, 0x39, 0x5b, 0xa8, 0x08, 0xcc, 0x4a, 0xc4, 0x81, 0x9f, 0x37, 0xac,
|
||||
0x08, 0x01, 0xe5, 0x15, 0xbb, 0x07, 0xe2, 0x3a, 0xca, 0x24, 0x11, 0xaa, 0x10, 0x76, 0x80, 0xe7,
|
||||
0x37, 0x01, 0x76, 0xb6, 0x80, 0x50, 0xee, 0x70, 0xc7, 0xd7, 0x71, 0x09, 0xaa, 0xa5, 0x50, 0x11,
|
||||
0x5a, 0x34, 0x97, 0xa1, 0xc3, 0xdf, 0x0e, 0xbd, 0xf3, 0xa9, 0x4c, 0xe4, 0xf5, 0x52, 0x5a, 0xeb,
|
||||
0x7e, 0xa5, 0x7b, 0xf9, 0x4b, 0xe6, 0x12, 0x65, 0x9f, 0x0c, 0xc9, 0xa8, 0x7b, 0xf4, 0x84, 0xd7,
|
||||
0xe9, 0x6d, 0x8d, 0x79, 0x1c, 0xf8, 0x79, 0xc3, 0xf2, 0x5c, 0xcd, 0xd3, 0x31, 0xff, 0x38, 0xfd,
|
||||
0x0e, 0x33, 0xfc, 0x00, 0x28, 0x27, 0xee, 0xfa, 0xe2, 0xa0, 0x95, 0x5d, 0x1c, 0xd0, 0xba, 0xe7,
|
||||
0x6d, 0x5d, 0xdd, 0x67, 0xb4, 0x1b, 0x1b, 0x9d, 0x2a, 0xab, 0x74, 0x04, 0xa6, 0xef, 0x0c, 0xc9,
|
||||
0x68, 0x7f, 0x72, 0xbf, 0x42, 0xba, 0xa7, 0xf5, 0xc8, 0x6b, 0xea, 0x5c, 0x9f, 0xd2, 0x58, 0x1a,
|
||||
0x19, 0x02, 0x82, 0xb1, 0xfd, 0xf6, 0xb0, 0x3d, 0xea, 0x1e, 0x1d, 0xf3, 0x2b, 0x7f, 0x2c, 0x6f,
|
||||
0xbe, 0x88, 0x9f, 0x6e, 0xa9, 0x37, 0x11, 0x9a, 0x55, 0x7d, 0x5d, 0x3d, 0xf0, 0x1a, 0xd6, 0x83,
|
||||
0x97, 0xf4, 0xde, 0x25, 0xc4, 0xed, 0xd1, 0x76, 0x00, 0xab, 0x22, 0x8f, 0x7d, 0x2f, 0xff, 0x74,
|
||||
0x1f, 0xd0, 0x4e, 0x2a, 0x97, 0x09, 0x94, 0xe7, 0x7b, 0x65, 0xf1, 0xc2, 0x39, 0x21, 0x87, 0xbf,
|
||||
0x08, 0xed, 0x35, 0xf7, 0xbf, 0x57, 0x16, 0xdd, 0x2f, 0x3b, 0xa9, 0xf2, 0xdb, 0xa5, 0x9a, 0xd3,
|
||||
0x45, 0xa6, 0xbd, 0xea, 0xea, 0xbd, 0xff, 0x9d, 0x46, 0xa2, 0x6f, 0x69, 0x47, 0x21, 0x84, 0xb6,
|
||||
0xef, 0x14, 0xa9, 0x3c, 0xba, 0x45, 0x2a, 0x93, 0xbb, 0x95, 0x5f, 0xe7, 0x5d, 0x4e, 0x7a, 0xa5,
|
||||
0xc1, 0x64, 0xb4, 0xde, 0xb0, 0xd6, 0xd9, 0x86, 0xb5, 0xce, 0x37, 0xac, 0xf5, 0x23, 0x63, 0x64,
|
||||
0x9d, 0x31, 0x72, 0x96, 0x31, 0x72, 0x9e, 0x31, 0xf2, 0x27, 0x63, 0xe4, 0xe7, 0x5f, 0xd6, 0xfa,
|
||||
0xec, 0xa4, 0xe3, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xba, 0xfb, 0xcc, 0xa9, 0x93, 0x03, 0x00,
|
||||
// 529 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcd, 0x8a, 0x13, 0x41,
|
||||
0x10, 0xce, 0x24, 0x2e, 0xec, 0x76, 0x0c, 0x86, 0x51, 0x21, 0xe4, 0x30, 0x09, 0xeb, 0x25, 0x08,
|
||||
0x76, 0x6f, 0x76, 0x55, 0x16, 0x41, 0x0f, 0x91, 0x05, 0x05, 0xc5, 0x30, 0x82, 0x07, 0xf1, 0x60,
|
||||
0x67, 0x52, 0x4e, 0xda, 0xf9, 0xe9, 0xa1, 0xbb, 0x66, 0x20, 0x37, 0x1f, 0xc1, 0xe7, 0x11, 0x1f,
|
||||
0x20, 0xc7, 0x3d, 0xee, 0x29, 0x98, 0xf1, 0x2d, 0x3c, 0xc9, 0xcc, 0xc4, 0xcc, 0xec, 0x26, 0x8b,
|
||||
0x7b, 0xeb, 0xaa, 0xfa, 0xbe, 0xaf, 0xab, 0xea, 0x2b, 0xf2, 0xc2, 0x3b, 0xd5, 0x54, 0x48, 0xe6,
|
||||
0xc5, 0x13, 0x50, 0x21, 0x20, 0x68, 0x96, 0x40, 0x38, 0x95, 0x8a, 0xad, 0x0b, 0x3c, 0x12, 0x4c,
|
||||
0xa3, 0x54, 0xdc, 0x05, 0x96, 0x0c, 0x99, 0x0b, 0x21, 0x28, 0x8e, 0x30, 0xa5, 0x91, 0x92, 0x28,
|
||||
0xcd, 0xfb, 0x05, 0x8c, 0xf2, 0x48, 0xd0, 0x35, 0x8c, 0x26, 0xc3, 0xee, 0x23, 0x57, 0xe0, 0x2c,
|
||||
0x9e, 0x50, 0x47, 0x06, 0xcc, 0x95, 0xae, 0x64, 0x39, 0x7a, 0x12, 0x7f, 0xc9, 0xa3, 0x3c, 0xc8,
|
||||
0x5f, 0x85, 0x4a, 0xf7, 0xe1, 0xce, 0xcf, 0x26, 0x80, 0x7c, 0xeb, 0xc7, 0xee, 0xe3, 0x12, 0x1b,
|
||||
0x70, 0x67, 0x26, 0x42, 0x50, 0x73, 0x16, 0x79, 0x6e, 0x96, 0xd0, 0x2c, 0x00, 0xe4, 0x3b, 0xfa,
|
||||
0xec, 0xb2, 0xeb, 0x58, 0x2a, 0x0e, 0x51, 0x04, 0xb0, 0x45, 0x78, 0xfa, 0x3f, 0x82, 0x76, 0x66,
|
||||
0x10, 0xf0, 0x2d, 0xde, 0xc9, 0x75, 0xbc, 0x18, 0x85, 0xcf, 0x44, 0x88, 0x1a, 0xd5, 0x55, 0xd2,
|
||||
0xe1, 0xcf, 0x06, 0xb9, 0xfd, 0xbe, 0x98, 0xfb, 0xa5, 0xcf, 0xb5, 0x36, 0x3f, 0x93, 0xfd, 0x6c,
|
||||
0x92, 0x29, 0x47, 0xde, 0x31, 0xfa, 0xc6, 0xa0, 0x79, 0x7c, 0x44, 0xcb, 0x4d, 0x6f, 0x84, 0x69,
|
||||
0xe4, 0xb9, 0x59, 0x42, 0xd3, 0x0c, 0x4d, 0x93, 0x21, 0x7d, 0x37, 0xf9, 0x0a, 0x0e, 0xbe, 0x05,
|
||||
0xe4, 0x23, 0x73, 0xb1, 0xec, 0xd5, 0xd2, 0x65, 0x8f, 0x94, 0x39, 0x7b, 0xa3, 0x6a, 0x3e, 0x21,
|
||||
0xcd, 0x48, 0xc9, 0x44, 0x68, 0x21, 0x43, 0x50, 0x9d, 0x7a, 0xdf, 0x18, 0x1c, 0x8c, 0xee, 0xae,
|
||||
0x29, 0xcd, 0x71, 0x59, 0xb2, 0xab, 0x38, 0xd3, 0x25, 0x24, 0xe2, 0x8a, 0x07, 0x80, 0xa0, 0x74,
|
||||
0xa7, 0xd1, 0x6f, 0x0c, 0x9a, 0xc7, 0x27, 0x74, 0xe7, 0x11, 0xd0, 0xea, 0x44, 0x74, 0xbc, 0x61,
|
||||
0x9d, 0x85, 0xa8, 0xe6, 0x65, 0x77, 0x65, 0xc1, 0xae, 0x48, 0x9b, 0x1e, 0x69, 0x29, 0x70, 0x7c,
|
||||
0x2e, 0x82, 0xb1, 0xf4, 0x85, 0x33, 0xef, 0xdc, 0xca, 0x3b, 0x3c, 0x4b, 0x97, 0xbd, 0x96, 0x5d,
|
||||
0x2d, 0xfc, 0x59, 0xf6, 0x8e, 0x2a, 0xe7, 0xe3, 0x48, 0x95, 0xdd, 0x0e, 0x1d, 0x83, 0xd2, 0x42,
|
||||
0x23, 0x84, 0xf8, 0x41, 0xfa, 0x71, 0x00, 0x97, 0x38, 0xf6, 0x65, 0xed, 0xee, 0x73, 0x72, 0xe7,
|
||||
0x4a, 0x7f, 0x66, 0x9b, 0x34, 0x3c, 0x98, 0xe7, 0xcb, 0x3f, 0xb0, 0xb3, 0xa7, 0x79, 0x8f, 0xec,
|
||||
0x25, 0xdc, 0x8f, 0xa1, 0xd8, 0x95, 0x5d, 0x04, 0xcf, 0xea, 0xa7, 0xc6, 0xe1, 0x0f, 0x83, 0xb4,
|
||||
0xab, 0xc3, 0xbe, 0x11, 0x1a, 0xcd, 0x4f, 0x5b, 0x16, 0xd2, 0x9b, 0x59, 0x98, 0xb1, 0x73, 0x03,
|
||||
0xdb, 0xeb, 0x15, 0xed, 0xff, 0xcb, 0x54, 0xec, 0x7b, 0x45, 0xf6, 0x04, 0x42, 0xa0, 0x3b, 0xf5,
|
||||
0xdc, 0x82, 0x07, 0x37, 0xb0, 0x60, 0xd4, 0x5a, 0xeb, 0xed, 0xbd, 0xce, 0x98, 0x76, 0x21, 0x30,
|
||||
0x1a, 0x2c, 0x56, 0x56, 0xed, 0x7c, 0x65, 0xd5, 0x2e, 0x56, 0x56, 0xed, 0x5b, 0x6a, 0x19, 0x8b,
|
||||
0xd4, 0x32, 0xce, 0x53, 0xcb, 0xb8, 0x48, 0x2d, 0xe3, 0x57, 0x6a, 0x19, 0xdf, 0x7f, 0x5b, 0xb5,
|
||||
0x8f, 0xf5, 0x64, 0xf8, 0x37, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x64, 0xc7, 0x7e, 0x2c, 0x04, 0x00,
|
||||
0x00,
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ syntax = 'proto2';
|
||||
|
||||
package k8s.io.api.storage.v1;
|
||||
|
||||
import "k8s.io/api/storage/v1beta1/generated.proto";
|
||||
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
||||
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
||||
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
||||
@ -47,6 +48,11 @@ message StorageClass {
|
||||
// create volumes of this storage class.
|
||||
// +optional
|
||||
map<string, string> parameters = 3;
|
||||
|
||||
// Dynamically provisioned PersistentVolumes of this storage class are
|
||||
// created with this reclaimPolicy. Defaults to Delete.
|
||||
// +optional
|
||||
optional string reclaimPolicy = 4;
|
||||
}
|
||||
|
||||
// StorageClassList is a collection of storage classes.
|
||||
|
@ -25,6 +25,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
codec1978 "github.com/ugorji/go/codec"
|
||||
pkg3_v1 "k8s.io/api/core/v1"
|
||||
pkg1_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
pkg2_types "k8s.io/apimachinery/pkg/types"
|
||||
"reflect"
|
||||
@ -62,10 +63,11 @@ func init() {
|
||||
panic(err)
|
||||
}
|
||||
if false { // reference the types, but skip this branch at build/run time
|
||||
var v0 pkg1_v1.TypeMeta
|
||||
var v1 pkg2_types.UID
|
||||
var v2 time.Time
|
||||
_, _, _ = v0, v1, v2
|
||||
var v0 pkg3_v1.PersistentVolumeReclaimPolicy
|
||||
var v1 pkg1_v1.TypeMeta
|
||||
var v2 pkg2_types.UID
|
||||
var v3 time.Time
|
||||
_, _, _, _ = v0, v1, v2, v3
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,16 +85,17 @@ func (x *StorageClass) CodecEncodeSelf(e *codec1978.Encoder) {
|
||||
} else {
|
||||
yysep2 := !z.EncBinary()
|
||||
yy2arr2 := z.EncBasicHandle().StructToArray
|
||||
var yyq2 [5]bool
|
||||
var yyq2 [6]bool
|
||||
_, _, _ = yysep2, yyq2, yy2arr2
|
||||
const yyr2 bool = false
|
||||
yyq2[0] = x.Kind != ""
|
||||
yyq2[1] = x.APIVersion != ""
|
||||
yyq2[2] = true
|
||||
yyq2[4] = len(x.Parameters) != 0
|
||||
yyq2[5] = x.ReclaimPolicy != nil
|
||||
var yynn2 int
|
||||
if yyr2 || yy2arr2 {
|
||||
r.EncodeArrayStart(5)
|
||||
r.EncodeArrayStart(6)
|
||||
} else {
|
||||
yynn2 = 1
|
||||
for _, b := range yyq2 {
|
||||
@ -234,6 +237,33 @@ func (x *StorageClass) CodecEncodeSelf(e *codec1978.Encoder) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if yyr2 || yy2arr2 {
|
||||
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
|
||||
if yyq2[5] {
|
||||
if x.ReclaimPolicy == nil {
|
||||
r.EncodeNil()
|
||||
} else {
|
||||
yy21 := *x.ReclaimPolicy
|
||||
yysf22 := &yy21
|
||||
yysf22.CodecEncodeSelf(e)
|
||||
}
|
||||
} else {
|
||||
r.EncodeNil()
|
||||
}
|
||||
} else {
|
||||
if yyq2[5] {
|
||||
z.EncSendContainerState(codecSelfer_containerMapKey1234)
|
||||
r.EncodeString(codecSelferC_UTF81234, string("reclaimPolicy"))
|
||||
z.EncSendContainerState(codecSelfer_containerMapValue1234)
|
||||
if x.ReclaimPolicy == nil {
|
||||
r.EncodeNil()
|
||||
} else {
|
||||
yy23 := *x.ReclaimPolicy
|
||||
yysf24 := &yy23
|
||||
yysf24.CodecEncodeSelf(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
if yyr2 || yy2arr2 {
|
||||
z.EncSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
} else {
|
||||
@ -356,6 +386,17 @@ func (x *StorageClass) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
|
||||
z.F.DecMapStringStringX(yyv12, false, d)
|
||||
}
|
||||
}
|
||||
case "reclaimPolicy":
|
||||
if r.TryDecodeAsNil() {
|
||||
if x.ReclaimPolicy != nil {
|
||||
x.ReclaimPolicy = nil
|
||||
}
|
||||
} else {
|
||||
if x.ReclaimPolicy == nil {
|
||||
x.ReclaimPolicy = new(pkg3_v1.PersistentVolumeReclaimPolicy)
|
||||
}
|
||||
x.ReclaimPolicy.CodecDecodeSelf(d)
|
||||
}
|
||||
default:
|
||||
z.DecStructFieldNotFound(-1, yys3)
|
||||
} // end switch yys3
|
||||
@ -367,16 +408,16 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
var h codecSelfer1234
|
||||
z, r := codec1978.GenHelperDecoder(d)
|
||||
_, _, _ = h, z, r
|
||||
var yyj14 int
|
||||
var yyb14 bool
|
||||
var yyhl14 bool = l >= 0
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
var yyj15 int
|
||||
var yyb15 bool
|
||||
var yyhl15 bool = l >= 0
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -384,21 +425,21 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.Kind = ""
|
||||
} else {
|
||||
yyv15 := &x.Kind
|
||||
yym16 := z.DecBinary()
|
||||
_ = yym16
|
||||
yyv16 := &x.Kind
|
||||
yym17 := z.DecBinary()
|
||||
_ = yym17
|
||||
if false {
|
||||
} else {
|
||||
*((*string)(yyv15)) = r.DecodeString()
|
||||
*((*string)(yyv16)) = r.DecodeString()
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -406,21 +447,21 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.APIVersion = ""
|
||||
} else {
|
||||
yyv17 := &x.APIVersion
|
||||
yym18 := z.DecBinary()
|
||||
_ = yym18
|
||||
yyv18 := &x.APIVersion
|
||||
yym19 := z.DecBinary()
|
||||
_ = yym19
|
||||
if false {
|
||||
} else {
|
||||
*((*string)(yyv17)) = r.DecodeString()
|
||||
*((*string)(yyv18)) = r.DecodeString()
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -428,22 +469,22 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.ObjectMeta = pkg1_v1.ObjectMeta{}
|
||||
} else {
|
||||
yyv19 := &x.ObjectMeta
|
||||
yym20 := z.DecBinary()
|
||||
_ = yym20
|
||||
yyv20 := &x.ObjectMeta
|
||||
yym21 := z.DecBinary()
|
||||
_ = yym21
|
||||
if false {
|
||||
} else if z.HasExtensions() && z.DecExt(yyv19) {
|
||||
} else if z.HasExtensions() && z.DecExt(yyv20) {
|
||||
} else {
|
||||
z.DecFallback(yyv19, false)
|
||||
z.DecFallback(yyv20, false)
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -451,21 +492,21 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.Provisioner = ""
|
||||
} else {
|
||||
yyv21 := &x.Provisioner
|
||||
yym22 := z.DecBinary()
|
||||
_ = yym22
|
||||
yyv22 := &x.Provisioner
|
||||
yym23 := z.DecBinary()
|
||||
_ = yym23
|
||||
if false {
|
||||
} else {
|
||||
*((*string)(yyv21)) = r.DecodeString()
|
||||
*((*string)(yyv22)) = r.DecodeString()
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -473,26 +514,47 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.Parameters = nil
|
||||
} else {
|
||||
yyv23 := &x.Parameters
|
||||
yym24 := z.DecBinary()
|
||||
_ = yym24
|
||||
yyv24 := &x.Parameters
|
||||
yym25 := z.DecBinary()
|
||||
_ = yym25
|
||||
if false {
|
||||
} else {
|
||||
z.F.DecMapStringStringX(yyv23, false, d)
|
||||
z.F.DecMapStringStringX(yyv24, false, d)
|
||||
}
|
||||
}
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
|
||||
if r.TryDecodeAsNil() {
|
||||
if x.ReclaimPolicy != nil {
|
||||
x.ReclaimPolicy = nil
|
||||
}
|
||||
} else {
|
||||
if x.ReclaimPolicy == nil {
|
||||
x.ReclaimPolicy = new(pkg3_v1.PersistentVolumeReclaimPolicy)
|
||||
}
|
||||
x.ReclaimPolicy.CodecDecodeSelf(d)
|
||||
}
|
||||
for {
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
break
|
||||
}
|
||||
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
|
||||
z.DecStructFieldNotFound(yyj14-1, "")
|
||||
z.DecStructFieldNotFound(yyj15-1, "")
|
||||
}
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
}
|
||||
@ -904,7 +966,7 @@ func (x codecSelfer1234) decSliceStorageClass(v *[]StorageClass, d *codec1978.De
|
||||
|
||||
yyrg1 := len(yyv1) > 0
|
||||
yyv21 := yyv1
|
||||
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 288)
|
||||
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 296)
|
||||
if yyrt1 {
|
||||
if yyrl1 <= cap(yyv1) {
|
||||
yyv1 = yyv1[:yyrl1]
|
||||
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||
package v1
|
||||
|
||||
import (
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
@ -43,6 +44,11 @@ type StorageClass struct {
|
||||
// create volumes of this storage class.
|
||||
// +optional
|
||||
Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"`
|
||||
|
||||
// Dynamically provisioned PersistentVolumes of this storage class are
|
||||
// created with this reclaimPolicy. Defaults to Delete.
|
||||
// +optional
|
||||
ReclaimPolicy *v1.PersistentVolumeReclaimPolicy `json:"reclaimPolicy,omitempty" protobuf:"bytes,4,opt,name=reclaimPolicy,casttype=k8s.io/api/core/v1.PersistentVolumeReclaimPolicy"`
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
@ -32,6 +32,7 @@ var map_StorageClass = map[string]string{
|
||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
|
||||
"provisioner": "Provisioner indicates the type of the provisioner.",
|
||||
"parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.",
|
||||
"reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
|
||||
}
|
||||
|
||||
func (StorageClass) SwaggerDoc() map[string]string {
|
||||
|
@ -21,6 +21,7 @@ limitations under the License.
|
||||
package v1
|
||||
|
||||
import (
|
||||
core_v1 "k8s.io/api/core/v1"
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
reflect "reflect"
|
||||
@ -59,6 +60,15 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) {
|
||||
(*out)[key] = val
|
||||
}
|
||||
}
|
||||
if in.ReclaimPolicy != nil {
|
||||
in, out := &in.ReclaimPolicy, &out.ReclaimPolicy
|
||||
if *in == nil {
|
||||
*out = nil
|
||||
} else {
|
||||
*out = new(core_v1.PersistentVolumeReclaimPolicy)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ go_library(
|
||||
"//vendor/github.com/gogo/protobuf/proto:go_default_library",
|
||||
"//vendor/github.com/gogo/protobuf/sortkeys:go_default_library",
|
||||
"//vendor/github.com/ugorji/go/codec:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
|
@ -34,6 +34,8 @@ import proto "github.com/gogo/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
|
||||
import k8s_io_api_core_v1 "k8s.io/api/core/v1"
|
||||
|
||||
import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys"
|
||||
|
||||
import strings "strings"
|
||||
@ -113,6 +115,12 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) {
|
||||
i += copy(dAtA[i:], v)
|
||||
}
|
||||
}
|
||||
if m.ReclaimPolicy != nil {
|
||||
dAtA[i] = 0x22
|
||||
i++
|
||||
i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReclaimPolicy)))
|
||||
i += copy(dAtA[i:], *m.ReclaimPolicy)
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
@ -196,6 +204,10 @@ func (m *StorageClass) Size() (n int) {
|
||||
n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.ReclaimPolicy != nil {
|
||||
l = len(*m.ReclaimPolicy)
|
||||
n += 1 + l + sovGenerated(uint64(l))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
@ -244,6 +256,7 @@ func (this *StorageClass) String() string {
|
||||
`ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`,
|
||||
`Provisioner:` + fmt.Sprintf("%v", this.Provisioner) + `,`,
|
||||
`Parameters:` + mapStringForParameters + `,`,
|
||||
`ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`,
|
||||
`}`,
|
||||
}, "")
|
||||
return s
|
||||
@ -471,6 +484,36 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error {
|
||||
m.Parameters[mapkey] = mapvalue
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field ReclaimPolicy", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowGenerated
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthGenerated
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
s := k8s_io_api_core_v1.PersistentVolumeReclaimPolicy(dAtA[iNdEx:postIndex])
|
||||
m.ReclaimPolicy = &s
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipGenerated(dAtA[iNdEx:])
|
||||
@ -713,35 +756,38 @@ func init() {
|
||||
}
|
||||
|
||||
var fileDescriptorGenerated = []byte{
|
||||
// 468 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xbf, 0x8e, 0xd3, 0x40,
|
||||
0x10, 0xc6, 0xbd, 0x89, 0x22, 0xee, 0x36, 0x20, 0x22, 0x43, 0x11, 0xb9, 0xf0, 0x45, 0x57, 0xa5,
|
||||
0xb9, 0x5d, 0x72, 0xfc, 0x51, 0x84, 0x44, 0x93, 0x13, 0x05, 0x12, 0x27, 0x4e, 0xa6, 0x43, 0x14,
|
||||
0xac, 0x93, 0xc1, 0x59, 0x1c, 0x7b, 0xad, 0xdd, 0xb1, 0xa5, 0x74, 0x3c, 0x02, 0x6f, 0x44, 0x9b,
|
||||
0xf2, 0x0a, 0x8a, 0xab, 0x4e, 0xc4, 0xbc, 0x08, 0xf2, 0x1f, 0x62, 0xeb, 0xa2, 0x88, 0xeb, 0x3c,
|
||||
0x33, 0xdf, 0xef, 0xdb, 0x99, 0xcf, 0xf4, 0x22, 0x9c, 0x1a, 0x26, 0x15, 0x0f, 0x53, 0x1f, 0x74,
|
||||
0x0c, 0x08, 0x86, 0x67, 0x10, 0x2f, 0x94, 0xe6, 0xf5, 0x40, 0x24, 0x92, 0x1b, 0x54, 0x5a, 0x04,
|
||||
0xc0, 0xb3, 0x89, 0x0f, 0x28, 0x26, 0x3c, 0x80, 0x18, 0xb4, 0x40, 0x58, 0xb0, 0x44, 0x2b, 0x54,
|
||||
0xb6, 0x53, 0x69, 0x99, 0x48, 0x24, 0xab, 0xb5, 0xac, 0xd6, 0x3a, 0x67, 0x81, 0xc4, 0x65, 0xea,
|
||||
0xb3, 0xb9, 0x8a, 0x78, 0xa0, 0x02, 0xc5, 0x4b, 0xc4, 0x4f, 0xbf, 0x96, 0x55, 0x59, 0x94, 0x5f,
|
||||
0x95, 0x95, 0xf3, 0xa2, 0x79, 0x36, 0x12, 0xf3, 0xa5, 0x8c, 0x41, 0xaf, 0x79, 0x12, 0x06, 0x45,
|
||||
0xc3, 0xf0, 0x08, 0x50, 0xf0, 0x6c, 0x6f, 0x01, 0x87, 0x1f, 0xa2, 0x74, 0x1a, 0xa3, 0x8c, 0x60,
|
||||
0x0f, 0x78, 0xf5, 0x3f, 0xc0, 0xcc, 0x97, 0x10, 0x89, 0x3d, 0xee, 0xf9, 0x21, 0x2e, 0x45, 0xb9,
|
||||
0xe2, 0x32, 0x46, 0x83, 0xfa, 0x2e, 0x74, 0xfa, 0xab, 0x43, 0x1f, 0x7e, 0xac, 0x62, 0xb9, 0x58,
|
||||
0x09, 0x63, 0xec, 0x2f, 0xf4, 0xa8, 0xb8, 0x64, 0x21, 0x50, 0x0c, 0xc9, 0x88, 0x8c, 0xfb, 0xe7,
|
||||
0xcf, 0x58, 0x13, 0xe1, 0xce, 0x98, 0x25, 0x61, 0x50, 0x34, 0x0c, 0x2b, 0xd4, 0x2c, 0x9b, 0xb0,
|
||||
0x0f, 0xfe, 0x37, 0x98, 0xe3, 0x25, 0xa0, 0x98, 0xd9, 0x9b, 0xdb, 0x13, 0x2b, 0xbf, 0x3d, 0xa1,
|
||||
0x4d, 0xcf, 0xdb, 0xb9, 0xda, 0x2f, 0x69, 0x3f, 0xd1, 0x2a, 0x93, 0x46, 0xaa, 0x18, 0xf4, 0xb0,
|
||||
0x33, 0x22, 0xe3, 0xe3, 0xd9, 0x93, 0x1a, 0xe9, 0x5f, 0x35, 0x23, 0xaf, 0xad, 0xb3, 0x57, 0x94,
|
||||
0x26, 0x42, 0x8b, 0x08, 0x10, 0xb4, 0x19, 0x76, 0x47, 0xdd, 0x71, 0xff, 0x7c, 0xca, 0x0e, 0xff,
|
||||
0x5d, 0xd6, 0x3e, 0x8b, 0x5d, 0xed, 0xd0, 0xb7, 0x31, 0xea, 0x75, 0xb3, 0x62, 0x33, 0xf0, 0x5a,
|
||||
0xfe, 0xce, 0x1b, 0xfa, 0xf8, 0x0e, 0x62, 0x0f, 0x68, 0x37, 0x84, 0x75, 0x19, 0xca, 0xb1, 0x57,
|
||||
0x7c, 0xda, 0x4f, 0x69, 0x2f, 0x13, 0xab, 0x14, 0xaa, 0x1b, 0xbc, 0xaa, 0x78, 0xdd, 0x99, 0x92,
|
||||
0xd3, 0x9f, 0x84, 0x0e, 0xda, 0xef, 0xbf, 0x97, 0x06, 0xed, 0xcf, 0x7b, 0xd1, 0xb2, 0xfb, 0x45,
|
||||
0x5b, 0xd0, 0x65, 0xb0, 0x83, 0x7a, 0xeb, 0xa3, 0x7f, 0x9d, 0x56, 0xac, 0x97, 0xb4, 0x27, 0x11,
|
||||
0x22, 0x33, 0xec, 0x94, 0xd1, 0x8c, 0xef, 0x1b, 0xcd, 0xec, 0x51, 0x6d, 0xda, 0x7b, 0x57, 0xe0,
|
||||
0x5e, 0xe5, 0x32, 0x3b, 0xdb, 0x6c, 0x5d, 0xeb, 0x7a, 0xeb, 0x5a, 0x37, 0x5b, 0xd7, 0xfa, 0x9e,
|
||||
0xbb, 0x64, 0x93, 0xbb, 0xe4, 0x3a, 0x77, 0xc9, 0x4d, 0xee, 0x92, 0xdf, 0xb9, 0x4b, 0x7e, 0xfc,
|
||||
0x71, 0xad, 0x4f, 0x0f, 0x6a, 0xc7, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0xec, 0x16, 0x3f,
|
||||
0xac, 0x03, 0x00, 0x00,
|
||||
// 527 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xbb, 0x8e, 0x13, 0x3f,
|
||||
0x14, 0xc6, 0xe3, 0xe4, 0x1f, 0xfd, 0x77, 0x1d, 0x22, 0xa2, 0x81, 0x22, 0x4a, 0x31, 0x89, 0x52,
|
||||
0xa5, 0x59, 0x7b, 0xb3, 0x5c, 0x14, 0x21, 0xd1, 0x64, 0xb5, 0x05, 0x12, 0x2b, 0xa2, 0x41, 0xa2,
|
||||
0x40, 0x14, 0x38, 0x93, 0xc3, 0xc4, 0xcc, 0xc5, 0x23, 0xdb, 0x33, 0x52, 0x3a, 0x1e, 0x81, 0x37,
|
||||
0x42, 0x74, 0x29, 0xb7, 0xdc, 0x2a, 0x22, 0xc3, 0x5b, 0x50, 0xa1, 0xb9, 0x90, 0x99, 0x4d, 0x88,
|
||||
0xd8, 0xce, 0x3e, 0xe7, 0xfb, 0x7d, 0xb6, 0xcf, 0x67, 0x7c, 0xe9, 0x4e, 0x14, 0xe1, 0x82, 0xba,
|
||||
0xd1, 0x1c, 0x64, 0x00, 0x1a, 0x14, 0x8d, 0x21, 0x58, 0x08, 0x49, 0x8b, 0x06, 0x0b, 0x39, 0x55,
|
||||
0x5a, 0x48, 0xe6, 0x00, 0x8d, 0xc7, 0x73, 0xd0, 0x6c, 0x4c, 0x1d, 0x08, 0x40, 0x32, 0x0d, 0x0b,
|
||||
0x12, 0x4a, 0xa1, 0x85, 0xd1, 0xcb, 0xb5, 0x84, 0x85, 0x9c, 0x14, 0x5a, 0x52, 0x68, 0x7b, 0x67,
|
||||
0x0e, 0xd7, 0xcb, 0x68, 0x4e, 0x6c, 0xe1, 0x53, 0x47, 0x38, 0x82, 0x66, 0xc8, 0x3c, 0xfa, 0x94,
|
||||
0xed, 0xb2, 0x4d, 0xb6, 0xca, 0xad, 0x7a, 0xc3, 0xca, 0xb1, 0xb6, 0x90, 0xe9, 0x99, 0xfb, 0xc7,
|
||||
0xf5, 0x9e, 0x96, 0x1a, 0x9f, 0xd9, 0x4b, 0x1e, 0x80, 0x5c, 0xd1, 0xd0, 0x75, 0xd2, 0x82, 0xa2,
|
||||
0x3e, 0x68, 0xf6, 0x37, 0x8a, 0x1e, 0xa3, 0x64, 0x14, 0x68, 0xee, 0xc3, 0x01, 0xf0, 0xfc, 0x5f,
|
||||
0x80, 0xb2, 0x97, 0xe0, 0xb3, 0x03, 0xee, 0xc9, 0x31, 0x2e, 0xd2, 0xdc, 0xa3, 0x3c, 0xd0, 0x4a,
|
||||
0xcb, 0x7d, 0x68, 0xf8, 0xbd, 0x81, 0x1f, 0xbc, 0xcd, 0x47, 0x77, 0xe9, 0x31, 0xa5, 0x8c, 0x8f,
|
||||
0xf8, 0x24, 0x7d, 0xc9, 0x82, 0x69, 0xd6, 0x45, 0x03, 0x34, 0x6a, 0x5d, 0x9c, 0x93, 0x72, 0xcc,
|
||||
0x3b, 0x63, 0x12, 0xba, 0x4e, 0x5a, 0x50, 0x24, 0x55, 0x93, 0x78, 0x4c, 0xde, 0xcc, 0x3f, 0x83,
|
||||
0xad, 0xaf, 0x41, 0xb3, 0xa9, 0xb1, 0xde, 0xf4, 0x6b, 0xc9, 0xa6, 0x8f, 0xcb, 0x9a, 0xb5, 0x73,
|
||||
0x35, 0x9e, 0xe1, 0x56, 0x28, 0x45, 0xcc, 0x15, 0x17, 0x01, 0xc8, 0x6e, 0x7d, 0x80, 0x46, 0xa7,
|
||||
0xd3, 0x47, 0x05, 0xd2, 0x9a, 0x95, 0x2d, 0xab, 0xaa, 0x33, 0x3c, 0x8c, 0x43, 0x26, 0x99, 0x0f,
|
||||
0x1a, 0xa4, 0xea, 0x36, 0x06, 0x8d, 0x51, 0xeb, 0x62, 0x42, 0x8e, 0xff, 0x00, 0x52, 0x7d, 0x16,
|
||||
0x99, 0xed, 0xd0, 0xab, 0x40, 0xcb, 0x55, 0x79, 0xc5, 0xb2, 0x61, 0x55, 0xfc, 0x0d, 0x17, 0xb7,
|
||||
0x25, 0xd8, 0x1e, 0xe3, 0xfe, 0x4c, 0x78, 0xdc, 0x5e, 0x75, 0xff, 0xcb, 0xae, 0x79, 0x95, 0x6c,
|
||||
0xfa, 0x6d, 0xab, 0xda, 0xf8, 0xb5, 0xe9, 0x9f, 0x1f, 0xfe, 0x1d, 0x32, 0x03, 0xa9, 0xb8, 0xd2,
|
||||
0x10, 0xe8, 0x77, 0xc2, 0x8b, 0x7c, 0xb8, 0xc3, 0x58, 0x77, 0xbd, 0x7b, 0x2f, 0xf1, 0xc3, 0xbd,
|
||||
0xfb, 0x19, 0x1d, 0xdc, 0x70, 0x61, 0x95, 0x25, 0x70, 0x6a, 0xa5, 0x4b, 0xe3, 0x31, 0x6e, 0xc6,
|
||||
0xcc, 0x8b, 0x20, 0x1f, 0x98, 0x95, 0x6f, 0x5e, 0xd4, 0x27, 0x68, 0xf8, 0x0d, 0xe1, 0x4e, 0xf5,
|
||||
0xb1, 0xaf, 0xb9, 0xd2, 0xc6, 0x87, 0x83, 0x1c, 0xc9, 0xfd, 0x72, 0x4c, 0xe9, 0x2c, 0xc5, 0x4e,
|
||||
0x31, 0xa2, 0x93, 0x3f, 0x95, 0x4a, 0x86, 0xd7, 0xb8, 0xc9, 0x35, 0xf8, 0xaa, 0x5b, 0xcf, 0x72,
|
||||
0x18, 0xdd, 0x37, 0x87, 0x69, 0xbb, 0x30, 0x6d, 0xbe, 0x4a, 0x71, 0x2b, 0x77, 0x99, 0x9e, 0xad,
|
||||
0xb7, 0x66, 0xed, 0x66, 0x6b, 0xd6, 0x6e, 0xb7, 0x66, 0xed, 0x4b, 0x62, 0xa2, 0x75, 0x62, 0xa2,
|
||||
0x9b, 0xc4, 0x44, 0xb7, 0x89, 0x89, 0x7e, 0x24, 0x26, 0xfa, 0xfa, 0xd3, 0xac, 0xbd, 0xff, 0xbf,
|
||||
0x70, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x94, 0xc8, 0xc6, 0xb6, 0x3d, 0x04, 0x00, 0x00,
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ syntax = 'proto2';
|
||||
|
||||
package k8s.io.api.storage.v1beta1;
|
||||
|
||||
import "k8s.io/api/core/v1/generated.proto";
|
||||
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
||||
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
||||
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
||||
@ -47,6 +48,11 @@ message StorageClass {
|
||||
// create volumes of this storage class.
|
||||
// +optional
|
||||
map<string, string> parameters = 3;
|
||||
|
||||
// Dynamically provisioned PersistentVolumes of this storage class are
|
||||
// created with this reclaimPolicy. Defaults to Delete.
|
||||
// +optional
|
||||
optional string reclaimPolicy = 4;
|
||||
}
|
||||
|
||||
// StorageClassList is a collection of storage classes.
|
||||
|
@ -25,6 +25,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
codec1978 "github.com/ugorji/go/codec"
|
||||
pkg3_v1 "k8s.io/api/core/v1"
|
||||
pkg1_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
pkg2_types "k8s.io/apimachinery/pkg/types"
|
||||
"reflect"
|
||||
@ -62,10 +63,11 @@ func init() {
|
||||
panic(err)
|
||||
}
|
||||
if false { // reference the types, but skip this branch at build/run time
|
||||
var v0 pkg1_v1.TypeMeta
|
||||
var v1 pkg2_types.UID
|
||||
var v2 time.Time
|
||||
_, _, _ = v0, v1, v2
|
||||
var v0 pkg3_v1.PersistentVolumeReclaimPolicy
|
||||
var v1 pkg1_v1.TypeMeta
|
||||
var v2 pkg2_types.UID
|
||||
var v3 time.Time
|
||||
_, _, _, _ = v0, v1, v2, v3
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,16 +85,17 @@ func (x *StorageClass) CodecEncodeSelf(e *codec1978.Encoder) {
|
||||
} else {
|
||||
yysep2 := !z.EncBinary()
|
||||
yy2arr2 := z.EncBasicHandle().StructToArray
|
||||
var yyq2 [5]bool
|
||||
var yyq2 [6]bool
|
||||
_, _, _ = yysep2, yyq2, yy2arr2
|
||||
const yyr2 bool = false
|
||||
yyq2[0] = x.Kind != ""
|
||||
yyq2[1] = x.APIVersion != ""
|
||||
yyq2[2] = true
|
||||
yyq2[4] = len(x.Parameters) != 0
|
||||
yyq2[5] = x.ReclaimPolicy != nil
|
||||
var yynn2 int
|
||||
if yyr2 || yy2arr2 {
|
||||
r.EncodeArrayStart(5)
|
||||
r.EncodeArrayStart(6)
|
||||
} else {
|
||||
yynn2 = 1
|
||||
for _, b := range yyq2 {
|
||||
@ -234,6 +237,33 @@ func (x *StorageClass) CodecEncodeSelf(e *codec1978.Encoder) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if yyr2 || yy2arr2 {
|
||||
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
|
||||
if yyq2[5] {
|
||||
if x.ReclaimPolicy == nil {
|
||||
r.EncodeNil()
|
||||
} else {
|
||||
yy21 := *x.ReclaimPolicy
|
||||
yysf22 := &yy21
|
||||
yysf22.CodecEncodeSelf(e)
|
||||
}
|
||||
} else {
|
||||
r.EncodeNil()
|
||||
}
|
||||
} else {
|
||||
if yyq2[5] {
|
||||
z.EncSendContainerState(codecSelfer_containerMapKey1234)
|
||||
r.EncodeString(codecSelferC_UTF81234, string("reclaimPolicy"))
|
||||
z.EncSendContainerState(codecSelfer_containerMapValue1234)
|
||||
if x.ReclaimPolicy == nil {
|
||||
r.EncodeNil()
|
||||
} else {
|
||||
yy23 := *x.ReclaimPolicy
|
||||
yysf24 := &yy23
|
||||
yysf24.CodecEncodeSelf(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
if yyr2 || yy2arr2 {
|
||||
z.EncSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
} else {
|
||||
@ -356,6 +386,17 @@ func (x *StorageClass) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
|
||||
z.F.DecMapStringStringX(yyv12, false, d)
|
||||
}
|
||||
}
|
||||
case "reclaimPolicy":
|
||||
if r.TryDecodeAsNil() {
|
||||
if x.ReclaimPolicy != nil {
|
||||
x.ReclaimPolicy = nil
|
||||
}
|
||||
} else {
|
||||
if x.ReclaimPolicy == nil {
|
||||
x.ReclaimPolicy = new(pkg3_v1.PersistentVolumeReclaimPolicy)
|
||||
}
|
||||
x.ReclaimPolicy.CodecDecodeSelf(d)
|
||||
}
|
||||
default:
|
||||
z.DecStructFieldNotFound(-1, yys3)
|
||||
} // end switch yys3
|
||||
@ -367,16 +408,16 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
var h codecSelfer1234
|
||||
z, r := codec1978.GenHelperDecoder(d)
|
||||
_, _, _ = h, z, r
|
||||
var yyj14 int
|
||||
var yyb14 bool
|
||||
var yyhl14 bool = l >= 0
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
var yyj15 int
|
||||
var yyb15 bool
|
||||
var yyhl15 bool = l >= 0
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -384,21 +425,21 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.Kind = ""
|
||||
} else {
|
||||
yyv15 := &x.Kind
|
||||
yym16 := z.DecBinary()
|
||||
_ = yym16
|
||||
yyv16 := &x.Kind
|
||||
yym17 := z.DecBinary()
|
||||
_ = yym17
|
||||
if false {
|
||||
} else {
|
||||
*((*string)(yyv15)) = r.DecodeString()
|
||||
*((*string)(yyv16)) = r.DecodeString()
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -406,21 +447,21 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.APIVersion = ""
|
||||
} else {
|
||||
yyv17 := &x.APIVersion
|
||||
yym18 := z.DecBinary()
|
||||
_ = yym18
|
||||
yyv18 := &x.APIVersion
|
||||
yym19 := z.DecBinary()
|
||||
_ = yym19
|
||||
if false {
|
||||
} else {
|
||||
*((*string)(yyv17)) = r.DecodeString()
|
||||
*((*string)(yyv18)) = r.DecodeString()
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -428,22 +469,22 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.ObjectMeta = pkg1_v1.ObjectMeta{}
|
||||
} else {
|
||||
yyv19 := &x.ObjectMeta
|
||||
yym20 := z.DecBinary()
|
||||
_ = yym20
|
||||
yyv20 := &x.ObjectMeta
|
||||
yym21 := z.DecBinary()
|
||||
_ = yym21
|
||||
if false {
|
||||
} else if z.HasExtensions() && z.DecExt(yyv19) {
|
||||
} else if z.HasExtensions() && z.DecExt(yyv20) {
|
||||
} else {
|
||||
z.DecFallback(yyv19, false)
|
||||
z.DecFallback(yyv20, false)
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -451,21 +492,21 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.Provisioner = ""
|
||||
} else {
|
||||
yyv21 := &x.Provisioner
|
||||
yym22 := z.DecBinary()
|
||||
_ = yym22
|
||||
yyv22 := &x.Provisioner
|
||||
yym23 := z.DecBinary()
|
||||
_ = yym23
|
||||
if false {
|
||||
} else {
|
||||
*((*string)(yyv21)) = r.DecodeString()
|
||||
*((*string)(yyv22)) = r.DecodeString()
|
||||
}
|
||||
}
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
@ -473,26 +514,47 @@ func (x *StorageClass) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
|
||||
if r.TryDecodeAsNil() {
|
||||
x.Parameters = nil
|
||||
} else {
|
||||
yyv23 := &x.Parameters
|
||||
yym24 := z.DecBinary()
|
||||
_ = yym24
|
||||
yyv24 := &x.Parameters
|
||||
yym25 := z.DecBinary()
|
||||
_ = yym25
|
||||
if false {
|
||||
} else {
|
||||
z.F.DecMapStringStringX(yyv23, false, d)
|
||||
z.F.DecMapStringStringX(yyv24, false, d)
|
||||
}
|
||||
}
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb15 {
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
return
|
||||
}
|
||||
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
|
||||
if r.TryDecodeAsNil() {
|
||||
if x.ReclaimPolicy != nil {
|
||||
x.ReclaimPolicy = nil
|
||||
}
|
||||
} else {
|
||||
if x.ReclaimPolicy == nil {
|
||||
x.ReclaimPolicy = new(pkg3_v1.PersistentVolumeReclaimPolicy)
|
||||
}
|
||||
x.ReclaimPolicy.CodecDecodeSelf(d)
|
||||
}
|
||||
for {
|
||||
yyj14++
|
||||
if yyhl14 {
|
||||
yyb14 = yyj14 > l
|
||||
yyj15++
|
||||
if yyhl15 {
|
||||
yyb15 = yyj15 > l
|
||||
} else {
|
||||
yyb14 = r.CheckBreak()
|
||||
yyb15 = r.CheckBreak()
|
||||
}
|
||||
if yyb14 {
|
||||
if yyb15 {
|
||||
break
|
||||
}
|
||||
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
|
||||
z.DecStructFieldNotFound(yyj14-1, "")
|
||||
z.DecStructFieldNotFound(yyj15-1, "")
|
||||
}
|
||||
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
|
||||
}
|
||||
@ -904,7 +966,7 @@ func (x codecSelfer1234) decSliceStorageClass(v *[]StorageClass, d *codec1978.De
|
||||
|
||||
yyrg1 := len(yyv1) > 0
|
||||
yyv21 := yyv1
|
||||
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 288)
|
||||
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 296)
|
||||
if yyrt1 {
|
||||
if yyrl1 <= cap(yyv1) {
|
||||
yyv1 = yyv1[:yyrl1]
|
||||
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
@ -43,6 +44,11 @@ type StorageClass struct {
|
||||
// create volumes of this storage class.
|
||||
// +optional
|
||||
Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"`
|
||||
|
||||
// Dynamically provisioned PersistentVolumes of this storage class are
|
||||
// created with this reclaimPolicy. Defaults to Delete.
|
||||
// +optional
|
||||
ReclaimPolicy *v1.PersistentVolumeReclaimPolicy `json:"reclaimPolicy,omitempty" protobuf:"bytes,4,opt,name=reclaimPolicy,casttype=k8s.io/api/core/v1.PersistentVolumeReclaimPolicy"`
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
@ -32,6 +32,7 @@ var map_StorageClass = map[string]string{
|
||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
|
||||
"provisioner": "Provisioner indicates the type of the provisioner.",
|
||||
"parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.",
|
||||
"reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
|
||||
}
|
||||
|
||||
func (StorageClass) SwaggerDoc() map[string]string {
|
||||
|
@ -21,6 +21,7 @@ limitations under the License.
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
v1 "k8s.io/api/core/v1"
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
reflect "reflect"
|
||||
@ -59,6 +60,15 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) {
|
||||
(*out)[key] = val
|
||||
}
|
||||
}
|
||||
if in.ReclaimPolicy != nil {
|
||||
in, out := &in.ReclaimPolicy, &out.ReclaimPolicy
|
||||
if *in == nil {
|
||||
*out = nil
|
||||
} else {
|
||||
*out = new(v1.PersistentVolumeReclaimPolicy)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user