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