Add generated file
This PR adds generated files under pkg/client and vendor folder.
This commit is contained in:
41
vendor/k8s.io/kubernetes/pkg/volume/validation/BUILD
generated
vendored
Normal file
41
vendor/k8s.io/kubernetes/pkg/volume/validation/BUILD
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
"go_test",
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["pv_validation_test.go"],
|
||||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["pv_validation.go"],
|
||||
importpath = "k8s.io/kubernetes/pkg/volume/validation",
|
||||
deps = [
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
71
vendor/k8s.io/kubernetes/pkg/volume/validation/pv_validation.go
generated
vendored
Normal file
71
vendor/k8s.io/kubernetes/pkg/volume/validation/pv_validation.go
generated
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
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 validation
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
)
|
||||
|
||||
// ValidatePersistentVolume validates PV object for plugin specific validation
|
||||
// We can put here validations which are specific to volume types.
|
||||
func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList {
|
||||
return checkMountOption(pv)
|
||||
}
|
||||
|
||||
func checkMountOption(pv *api.PersistentVolume) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
// if PV is of these types we don't return errors
|
||||
// since mount options is supported
|
||||
if pv.Spec.GCEPersistentDisk != nil ||
|
||||
pv.Spec.AWSElasticBlockStore != nil ||
|
||||
pv.Spec.Glusterfs != nil ||
|
||||
pv.Spec.NFS != nil ||
|
||||
pv.Spec.RBD != nil ||
|
||||
pv.Spec.Quobyte != nil ||
|
||||
pv.Spec.ISCSI != nil ||
|
||||
pv.Spec.Cinder != nil ||
|
||||
pv.Spec.CephFS != nil ||
|
||||
pv.Spec.AzureFile != nil ||
|
||||
pv.Spec.VsphereVolume != nil ||
|
||||
pv.Spec.AzureDisk != nil ||
|
||||
pv.Spec.PhotonPersistentDisk != nil {
|
||||
return allErrs
|
||||
}
|
||||
// any other type if mount option is present lets return error
|
||||
if _, ok := pv.Annotations[api.MountOptionAnnotation]; ok {
|
||||
metaField := field.NewPath("metadata")
|
||||
allErrs = append(allErrs, field.Forbidden(metaField.Child("annotations", api.MountOptionAnnotation), "may not specify mount options for this volume type"))
|
||||
}
|
||||
return allErrs
|
||||
}
|
||||
|
||||
// ValidatePathNoBacksteps will make sure the targetPath does not have any element which is ".."
|
||||
func ValidatePathNoBacksteps(targetPath string) error {
|
||||
parts := strings.Split(filepath.ToSlash(targetPath), "/")
|
||||
for _, item := range parts {
|
||||
if item == ".." {
|
||||
return errors.New("must not contain '..'")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
113
vendor/k8s.io/kubernetes/pkg/volume/validation/pv_validation_test.go
generated
vendored
Normal file
113
vendor/k8s.io/kubernetes/pkg/volume/validation/pv_validation_test.go
generated
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
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 validation
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
)
|
||||
|
||||
func TestValidatePersistentVolumes(t *testing.T) {
|
||||
scenarios := map[string]struct {
|
||||
isExpectedFailure bool
|
||||
volume *api.PersistentVolume
|
||||
}{
|
||||
"volume with valid mount option for nfs": {
|
||||
isExpectedFailure: false,
|
||||
volume: testVolumeWithMountOption("good-nfs-mount-volume", "", "ro,nfsvers=3", api.PersistentVolumeSpec{
|
||||
Capacity: api.ResourceList{
|
||||
api.ResourceName(api.ResourceStorage): resource.MustParse("10G"),
|
||||
},
|
||||
AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce},
|
||||
PersistentVolumeSource: api.PersistentVolumeSource{
|
||||
NFS: &api.NFSVolumeSource{Server: "localhost", Path: "/srv", ReadOnly: false},
|
||||
},
|
||||
}),
|
||||
},
|
||||
"volume with mount option for host path": {
|
||||
isExpectedFailure: true,
|
||||
volume: testVolumeWithMountOption("bad-hostpath-mount-volume", "", "ro,nfsvers=3", api.PersistentVolumeSpec{
|
||||
Capacity: api.ResourceList{
|
||||
api.ResourceName(api.ResourceStorage): resource.MustParse("10G"),
|
||||
},
|
||||
AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce},
|
||||
PersistentVolumeSource: api.PersistentVolumeSource{
|
||||
HostPath: &api.HostPathVolumeSource{Path: "/a/.."},
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
for name, scenario := range scenarios {
|
||||
errs := ValidatePersistentVolume(scenario.volume)
|
||||
if len(errs) == 0 && scenario.isExpectedFailure {
|
||||
t.Errorf("Unexpected success for scenario: %s", name)
|
||||
}
|
||||
if len(errs) > 0 && !scenario.isExpectedFailure {
|
||||
t.Errorf("Unexpected failure for scenario: %s - %+v", name, errs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testVolumeWithMountOption(name string, namespace string, mountOptions string, spec api.PersistentVolumeSpec) *api.PersistentVolume {
|
||||
annotations := map[string]string{
|
||||
api.MountOptionAnnotation: mountOptions,
|
||||
}
|
||||
objMeta := metav1.ObjectMeta{
|
||||
Name: name,
|
||||
Annotations: annotations,
|
||||
}
|
||||
|
||||
if namespace != "" {
|
||||
objMeta.Namespace = namespace
|
||||
}
|
||||
|
||||
return &api.PersistentVolume{
|
||||
ObjectMeta: objMeta,
|
||||
Spec: spec,
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidatePathNoBacksteps(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
path string
|
||||
expectedErr bool
|
||||
}{
|
||||
"valid path": {
|
||||
path: "/foo/bar",
|
||||
},
|
||||
"invalid path": {
|
||||
path: "/foo/bar/..",
|
||||
expectedErr: true,
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
err := ValidatePathNoBacksteps(tc.path)
|
||||
|
||||
if err == nil && tc.expectedErr {
|
||||
t.Fatalf("expected test `%s` to return an error but it didnt", name)
|
||||
}
|
||||
|
||||
if err != nil && !tc.expectedErr {
|
||||
t.Fatalf("expected test `%s` to return no error but got `%v`", name, err)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user