Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
1a316015
Commit
1a316015
authored
Jan 18, 2019
by
andrewsykim
Committed by
Andrew Kim
Jan 24, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor persistent volume labeler admission controller to use cloudprovider.PVLabler
parent
20a11ac5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
76 additions
and
106 deletions
+76
-106
BUILD
plugin/pkg/admission/storage/persistentvolume/label/BUILD
+4
-6
admission.go
...pkg/admission/storage/persistentvolume/label/admission.go
+60
-52
admission_test.go
...dmission/storage/persistentvolume/label/admission_test.go
+12
-48
No files found.
plugin/pkg/admission/storage/persistentvolume/label/BUILD
View file @
1a316015
...
@@ -15,13 +15,12 @@ go_library(
...
@@ -15,13 +15,12 @@ go_library(
importpath = "k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/label",
importpath = "k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/label",
deps = [
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/cloudprovider/providers/aws:go_default_library",
"//pkg/apis/core/v1:go_default_library",
"//pkg/cloudprovider/providers/azure:go_default_library",
"//pkg/cloudprovider/providers/gce:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume/util:go_default_library",
"//pkg/volume/util:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
...
@@ -34,13 +33,12 @@ go_test(
...
@@ -34,13 +33,12 @@ go_test(
embed = [":go_default_library"],
embed = [":go_default_library"],
deps = [
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/cloudprovider/providers/aws:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/volume/util:go_default_library",
"//pkg/volume/util:go_default_library",
"//staging/src/k8s.io/api
machinery/pkg/api/resource
:go_default_library",
"//staging/src/k8s.io/api
/core/v1
:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
],
],
)
)
...
...
plugin/pkg/admission/storage/persistentvolume/label/admission.go
View file @
1a316015
...
@@ -18,17 +18,18 @@ package label
...
@@ -18,17 +18,18 @@ package label
import
(
import
(
"bytes"
"bytes"
"context"
"errors"
"fmt"
"fmt"
"io"
"io"
"sync"
"sync"
v1
"k8s.io/api/core/v1"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
cloudprovider
"k8s.io/cloud-provider"
cloudprovider
"k8s.io/cloud-provider"
"k8s.io/klog"
"k8s.io/klog"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
k8s_api_v1
"k8s.io/kubernetes/pkg/apis/core/v1"
"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
kubeapiserveradmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
kubeapiserveradmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
vol
"k8s.io/kubernetes/pkg/volume"
vol
"k8s.io/kubernetes/pkg/volume"
...
@@ -53,11 +54,12 @@ var _ = admission.Interface(&persistentVolumeLabel{})
...
@@ -53,11 +54,12 @@ var _ = admission.Interface(&persistentVolumeLabel{})
type
persistentVolumeLabel
struct
{
type
persistentVolumeLabel
struct
{
*
admission
.
Handler
*
admission
.
Handler
mutex
sync
.
Mutex
mutex
sync
.
Mutex
ebsVolumes
aws
.
Volumes
cloudConfig
[]
byte
cloudConfig
[]
byte
awsPVLabeler
cloudprovider
.
PVLabeler
gceCloudProvider
*
gce
.
Cloud
gcePVLabeler
cloudprovider
.
PVLabeler
azureProvider
*
azure
.
Cloud
azurePVLabeler
cloudprovider
.
PVLabeler
openStackPVLabeler
cloudprovider
.
PVLabeler
}
}
var
_
admission
.
MutationInterface
=
&
persistentVolumeLabel
{}
var
_
admission
.
MutationInterface
=
&
persistentVolumeLabel
{}
...
@@ -186,47 +188,47 @@ func (l *persistentVolumeLabel) findAWSEBSLabels(volume *api.PersistentVolume) (
...
@@ -186,47 +188,47 @@ func (l *persistentVolumeLabel) findAWSEBSLabels(volume *api.PersistentVolume) (
if
volume
.
Spec
.
AWSElasticBlockStore
.
VolumeID
==
vol
.
ProvisionedVolumeName
{
if
volume
.
Spec
.
AWSElasticBlockStore
.
VolumeID
==
vol
.
ProvisionedVolumeName
{
return
nil
,
nil
return
nil
,
nil
}
}
ebsVolumes
,
err
:=
l
.
getEBSVolumes
()
pvlabler
,
err
:=
l
.
getAWSPVLabeler
()
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
ebsVolumes
==
nil
{
if
pvlabler
==
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to build AWS cloud provider for EBS"
)
return
nil
,
fmt
.
Errorf
(
"unable to build AWS cloud provider for EBS"
)
}
}
// TODO: GetVolumeLabels is actually a method on the Volumes interface
pv
:=
&
v1
.
PersistentVolume
{}
// If that gets standardized we can refactor to reduce code duplication
err
=
k8s_api_v1
.
Convert_core_PersistentVolume_To_v1_PersistentVolume
(
volume
,
pv
,
nil
)
spec
:=
aws
.
KubernetesVolumeID
(
volume
.
Spec
.
AWSElasticBlockStore
.
VolumeID
)
labels
,
err
:=
ebsVolumes
.
GetVolumeLabels
(
spec
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
fmt
.
Errorf
(
"failed to convert PersistentVolume to core/v1: %q"
,
err
)
}
}
return
labels
,
nil
return
pvlabler
.
GetLabelsForVolume
(
context
.
TODO
(),
pv
)
}
}
// get
EBSVolumes returns the AWS Volumes interface for ebs
// get
AWSPVLabeler returns the AWS implementation of PVLabeler
func
(
l
*
persistentVolumeLabel
)
get
EBSVolumes
()
(
aws
.
Volumes
,
error
)
{
func
(
l
*
persistentVolumeLabel
)
get
AWSPVLabeler
()
(
cloudprovider
.
PVLabeler
,
error
)
{
l
.
mutex
.
Lock
()
l
.
mutex
.
Lock
()
defer
l
.
mutex
.
Unlock
()
defer
l
.
mutex
.
Unlock
()
if
l
.
ebsVolumes
==
nil
{
if
l
.
awsPVLabeler
==
nil
{
var
cloudConfigReader
io
.
Reader
var
cloudConfigReader
io
.
Reader
if
len
(
l
.
cloudConfig
)
>
0
{
if
len
(
l
.
cloudConfig
)
>
0
{
cloudConfigReader
=
bytes
.
NewReader
(
l
.
cloudConfig
)
cloudConfigReader
=
bytes
.
NewReader
(
l
.
cloudConfig
)
}
}
cloudProvider
,
err
:=
cloudprovider
.
GetCloudProvider
(
"aws"
,
cloudConfigReader
)
cloudProvider
,
err
:=
cloudprovider
.
GetCloudProvider
(
"aws"
,
cloudConfigReader
)
if
err
!=
nil
||
cloudProvider
==
nil
{
if
err
!=
nil
||
cloudProvider
==
nil
{
return
nil
,
err
return
nil
,
err
}
}
awsCloudProvider
,
ok
:=
cloudProvider
.
(
*
aws
.
Cloud
)
awsPVLabeler
,
ok
:=
cloudProvider
.
(
cloudprovider
.
PVLabeler
)
if
!
ok
{
if
!
ok
{
// GetCloudProvider has gone very wrong
return
nil
,
errors
.
New
(
"AWS cloud provider does not implement PV labeling"
)
return
nil
,
fmt
.
Errorf
(
"error retrieving AWS cloud provider"
)
}
}
l
.
ebsVolumes
=
awsCloudProvider
l
.
awsPVLabeler
=
awsPVLabeler
}
}
return
l
.
ebsVolumes
,
nil
return
l
.
awsPVLabeler
,
nil
}
}
func
(
l
*
persistentVolumeLabel
)
findGCEPDLabels
(
volume
*
api
.
PersistentVolume
)
(
map
[
string
]
string
,
error
)
{
func
(
l
*
persistentVolumeLabel
)
findGCEPDLabels
(
volume
*
api
.
PersistentVolume
)
(
map
[
string
]
string
,
error
)
{
...
@@ -235,72 +237,73 @@ func (l *persistentVolumeLabel) findGCEPDLabels(volume *api.PersistentVolume) (m
...
@@ -235,72 +237,73 @@ func (l *persistentVolumeLabel) findGCEPDLabels(volume *api.PersistentVolume) (m
return
nil
,
nil
return
nil
,
nil
}
}
p
rovider
,
err
:=
l
.
getGCECloudProvid
er
()
p
vlabler
,
err
:=
l
.
getGCEPVLabel
er
()
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
p
rovid
er
==
nil
{
if
p
vlabl
er
==
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to build GCE cloud provider for PD"
)
return
nil
,
fmt
.
Errorf
(
"unable to build GCE cloud provider for PD"
)
}
}
// If the zone is already labeled, honor the hint
pv
:=
&
v1
.
PersistentVolume
{}
zone
:=
volume
.
Labels
[
kubeletapis
.
LabelZoneFailureDomain
]
err
=
k8s_api_v1
.
Convert_core_PersistentVolume_To_v1_PersistentVolume
(
volume
,
pv
,
nil
)
labels
,
err
:=
provider
.
GetAutoLabelsForPD
(
volume
.
Spec
.
GCEPersistentDisk
.
PDName
,
zone
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
fmt
.
Errorf
(
"failed to convert PersistentVolume to core/v1: %q"
,
err
)
}
}
return
pvlabler
.
GetLabelsForVolume
(
context
.
TODO
(),
pv
)
return
labels
,
nil
}
}
// getGCE
CloudProvider returns the GCE cloud provider, for use for querying volume labels
// getGCE
PVLabeler returns the GCE implementation of PVLabeler
func
(
l
*
persistentVolumeLabel
)
getGCE
CloudProvider
()
(
*
gce
.
Cloud
,
error
)
{
func
(
l
*
persistentVolumeLabel
)
getGCE
PVLabeler
()
(
cloudprovider
.
PVLabeler
,
error
)
{
l
.
mutex
.
Lock
()
l
.
mutex
.
Lock
()
defer
l
.
mutex
.
Unlock
()
defer
l
.
mutex
.
Unlock
()
if
l
.
gce
CloudProvid
er
==
nil
{
if
l
.
gce
PVLabel
er
==
nil
{
var
cloudConfigReader
io
.
Reader
var
cloudConfigReader
io
.
Reader
if
len
(
l
.
cloudConfig
)
>
0
{
if
len
(
l
.
cloudConfig
)
>
0
{
cloudConfigReader
=
bytes
.
NewReader
(
l
.
cloudConfig
)
cloudConfigReader
=
bytes
.
NewReader
(
l
.
cloudConfig
)
}
}
cloudProvider
,
err
:=
cloudprovider
.
GetCloudProvider
(
"gce"
,
cloudConfigReader
)
cloudProvider
,
err
:=
cloudprovider
.
GetCloudProvider
(
"gce"
,
cloudConfigReader
)
if
err
!=
nil
||
cloudProvider
==
nil
{
if
err
!=
nil
||
cloudProvider
==
nil
{
return
nil
,
err
return
nil
,
err
}
}
gceCloudProvider
,
ok
:=
cloudProvider
.
(
*
gce
.
Cloud
)
gcePVLabeler
,
ok
:=
cloudProvider
.
(
cloudprovider
.
PVLabeler
)
if
!
ok
{
if
!
ok
{
// GetCloudProvider has gone very wrong
return
nil
,
errors
.
New
(
"GCE cloud provider does not implement PV labeling"
)
return
nil
,
fmt
.
Errorf
(
"error retrieving GCE cloud provider"
)
}
}
l
.
gceCloudProvider
=
gceCloudProvider
l
.
gcePVLabeler
=
gcePVLabeler
}
}
return
l
.
gce
CloudProvid
er
,
nil
return
l
.
gce
PVLabel
er
,
nil
}
}
// getAzure
CloudProvider returns the Azure cloud provider, for use for querying volume labels
// getAzure
PVLabeler returns the Azure implementation of PVLabeler
func
(
l
*
persistentVolumeLabel
)
getAzure
CloudProvider
()
(
*
azure
.
Cloud
,
error
)
{
func
(
l
*
persistentVolumeLabel
)
getAzure
PVLabeler
()
(
cloudprovider
.
PVLabeler
,
error
)
{
l
.
mutex
.
Lock
()
l
.
mutex
.
Lock
()
defer
l
.
mutex
.
Unlock
()
defer
l
.
mutex
.
Unlock
()
if
l
.
azureP
rovid
er
==
nil
{
if
l
.
azureP
VLabel
er
==
nil
{
var
cloudConfigReader
io
.
Reader
var
cloudConfigReader
io
.
Reader
if
len
(
l
.
cloudConfig
)
>
0
{
if
len
(
l
.
cloudConfig
)
>
0
{
cloudConfigReader
=
bytes
.
NewReader
(
l
.
cloudConfig
)
cloudConfigReader
=
bytes
.
NewReader
(
l
.
cloudConfig
)
}
}
cloudProvider
,
err
:=
cloudprovider
.
GetCloudProvider
(
"azure"
,
cloudConfigReader
)
cloudProvider
,
err
:=
cloudprovider
.
GetCloudProvider
(
"azure"
,
cloudConfigReader
)
if
err
!=
nil
||
cloudProvider
==
nil
{
if
err
!=
nil
||
cloudProvider
==
nil
{
return
nil
,
err
return
nil
,
err
}
}
azureProvider
,
ok
:=
cloudProvider
.
(
*
azure
.
Cloud
)
azurePVLabeler
,
ok
:=
cloudProvider
.
(
cloudprovider
.
PVLabeler
)
if
!
ok
{
if
!
ok
{
// GetCloudProvider has gone very wrong
return
nil
,
errors
.
New
(
"Azure cloud provider does not implement PV labeling"
)
return
nil
,
fmt
.
Errorf
(
"error retrieving Azure cloud provider"
)
}
}
l
.
azureP
rovider
=
azureProvid
er
l
.
azureP
VLabeler
=
azurePVLabel
er
}
}
return
l
.
azureP
rovid
er
,
nil
return
l
.
azureP
VLabel
er
,
nil
}
}
func
(
l
*
persistentVolumeLabel
)
findAzureDiskLabels
(
volume
*
api
.
PersistentVolume
)
(
map
[
string
]
string
,
error
)
{
func
(
l
*
persistentVolumeLabel
)
findAzureDiskLabels
(
volume
*
api
.
PersistentVolume
)
(
map
[
string
]
string
,
error
)
{
...
@@ -309,13 +312,18 @@ func (l *persistentVolumeLabel) findAzureDiskLabels(volume *api.PersistentVolume
...
@@ -309,13 +312,18 @@ func (l *persistentVolumeLabel) findAzureDiskLabels(volume *api.PersistentVolume
return
nil
,
nil
return
nil
,
nil
}
}
p
rovider
,
err
:=
l
.
getAzureCloudProvid
er
()
p
vlabler
,
err
:=
l
.
getAzurePVLabel
er
()
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
p
rovid
er
==
nil
{
if
p
vlabl
er
==
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to build Azure cloud provider for AzureDisk"
)
return
nil
,
fmt
.
Errorf
(
"unable to build Azure cloud provider for AzureDisk"
)
}
}
return
provider
.
GetAzureDiskLabels
(
volume
.
Spec
.
AzureDisk
.
DataDiskURI
)
pv
:=
&
v1
.
PersistentVolume
{}
err
=
k8s_api_v1
.
Convert_core_PersistentVolume_To_v1_PersistentVolume
(
volume
,
pv
,
nil
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to convert PersistentVolume to core/v1: %q"
,
err
)
}
return
pvlabler
.
GetLabelsForVolume
(
context
.
TODO
(),
pv
)
}
}
plugin/pkg/admission/storage/persistentvolume/label/admission_test.go
View file @
1a316015
...
@@ -17,18 +17,17 @@ limitations under the License.
...
@@ -17,18 +17,17 @@ limitations under the License.
package
label
package
label
import
(
import
(
"testing"
"context"
"fmt"
"fmt"
"reflect"
"reflect"
"sort"
"sort"
"testing"
"k8s.io/api
machinery/pkg/api/resource
"
"k8s.io/api
/core/v1
"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
cloudprovider
"k8s.io/cloud-provider"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
volumeutil
"k8s.io/kubernetes/pkg/volume/util"
volumeutil
"k8s.io/kubernetes/pkg/volume/util"
)
)
...
@@ -38,47 +37,12 @@ type mockVolumes struct {
...
@@ -38,47 +37,12 @@ type mockVolumes struct {
volumeLabelsError
error
volumeLabelsError
error
}
}
var
_
aws
.
Volumes
=
&
mockVolumes
{}
var
_
cloudprovider
.
PVLabeler
=
&
mockVolumes
{}
func
(
v
*
mockVolumes
)
AttachDisk
(
diskName
aws
.
KubernetesVolumeID
,
nodeName
types
.
NodeName
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
DetachDisk
(
diskName
aws
.
KubernetesVolumeID
,
nodeName
types
.
NodeName
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
CreateDisk
(
volumeOptions
*
aws
.
VolumeOptions
)
(
volumeName
aws
.
KubernetesVolumeID
,
err
error
)
{
func
(
v
*
mockVolumes
)
GetLabelsForVolume
(
ctx
context
.
Context
,
pv
*
v1
.
PersistentVolume
)
(
map
[
string
]
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
DeleteDisk
(
volumeName
aws
.
KubernetesVolumeID
)
(
bool
,
error
)
{
return
false
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
GetVolumeLabels
(
volumeName
aws
.
KubernetesVolumeID
)
(
map
[
string
]
string
,
error
)
{
return
v
.
volumeLabels
,
v
.
volumeLabelsError
return
v
.
volumeLabels
,
v
.
volumeLabelsError
}
}
func
(
v
*
mockVolumes
)
GetDiskPath
(
volumeName
aws
.
KubernetesVolumeID
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
DiskIsAttached
(
volumeName
aws
.
KubernetesVolumeID
,
nodeName
types
.
NodeName
)
(
bool
,
error
)
{
return
false
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
DisksAreAttached
(
nodeDisks
map
[
types
.
NodeName
][]
aws
.
KubernetesVolumeID
)
(
map
[
types
.
NodeName
]
map
[
aws
.
KubernetesVolumeID
]
bool
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"not implemented"
)
}
func
(
v
*
mockVolumes
)
ResizeDisk
(
diskName
aws
.
KubernetesVolumeID
,
oldSize
resource
.
Quantity
,
newSize
resource
.
Quantity
)
(
resource
.
Quantity
,
error
)
{
return
oldSize
,
nil
}
func
mockVolumeFailure
(
err
error
)
*
mockVolumes
{
func
mockVolumeFailure
(
err
error
)
*
mockVolumes
{
return
&
mockVolumes
{
volumeLabelsError
:
err
}
return
&
mockVolumes
{
volumeLabelsError
:
err
}
}
}
...
@@ -135,7 +99,7 @@ func TestAdmission(t *testing.T) {
...
@@ -135,7 +99,7 @@ func TestAdmission(t *testing.T) {
}
}
// Errors from the cloudprovider block creation of the volume
// Errors from the cloudprovider block creation of the volume
pvHandler
.
ebsVolumes
=
mockVolumeFailure
(
fmt
.
Errorf
(
"invalid volume"
))
pvHandler
.
awsPVLabeler
=
mockVolumeFailure
(
fmt
.
Errorf
(
"invalid volume"
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
==
nil
{
if
err
==
nil
{
t
.
Errorf
(
"Expected error when aws pv info fails"
)
t
.
Errorf
(
"Expected error when aws pv info fails"
)
...
@@ -143,7 +107,7 @@ func TestAdmission(t *testing.T) {
...
@@ -143,7 +107,7 @@ func TestAdmission(t *testing.T) {
// Don't add labels if the cloudprovider doesn't return any
// Don't add labels if the cloudprovider doesn't return any
labels
:=
make
(
map
[
string
]
string
)
labels
:=
make
(
map
[
string
]
string
)
pvHandler
.
ebsVolumes
=
mockVolumeLabels
(
labels
)
pvHandler
.
awsPVLabeler
=
mockVolumeLabels
(
labels
)
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Expected no error when creating aws pv"
)
t
.
Errorf
(
"Expected no error when creating aws pv"
)
...
@@ -156,7 +120,7 @@ func TestAdmission(t *testing.T) {
...
@@ -156,7 +120,7 @@ func TestAdmission(t *testing.T) {
}
}
// Don't panic if the cloudprovider returns nil, nil
// Don't panic if the cloudprovider returns nil, nil
pvHandler
.
ebsVolumes
=
mockVolumeFailure
(
nil
)
pvHandler
.
awsPVLabeler
=
mockVolumeFailure
(
nil
)
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Expected no error when cloud provider returns empty labels"
)
t
.
Errorf
(
"Expected no error when cloud provider returns empty labels"
)
...
@@ -168,7 +132,7 @@ func TestAdmission(t *testing.T) {
...
@@ -168,7 +132,7 @@ func TestAdmission(t *testing.T) {
labels
[
"b"
]
=
"2"
labels
[
"b"
]
=
"2"
zones
,
_
:=
volumeutil
.
ZonesToSet
(
"1,2,3"
)
zones
,
_
:=
volumeutil
.
ZonesToSet
(
"1,2,3"
)
labels
[
kubeletapis
.
LabelZoneFailureDomain
]
=
volumeutil
.
ZonesSetToLabelValue
(
zones
)
labels
[
kubeletapis
.
LabelZoneFailureDomain
]
=
volumeutil
.
ZonesSetToLabelValue
(
zones
)
pvHandler
.
ebsVolumes
=
mockVolumeLabels
(
labels
)
pvHandler
.
awsPVLabeler
=
mockVolumeLabels
(
labels
)
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Expected no error when creating aws pv"
)
t
.
Errorf
(
"Expected no error when creating aws pv"
)
...
@@ -223,7 +187,7 @@ func TestAdmission(t *testing.T) {
...
@@ -223,7 +187,7 @@ func TestAdmission(t *testing.T) {
labels
[
"a"
]
=
"1"
labels
[
"a"
]
=
"1"
labels
[
"b"
]
=
"2"
labels
[
"b"
]
=
"2"
labels
[
"c"
]
=
"3"
labels
[
"c"
]
=
"3"
pvHandler
.
ebsVolumes
=
mockVolumeLabels
(
labels
)
pvHandler
.
awsPVLabeler
=
mockVolumeLabels
(
labels
)
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Expected no error when creating aws pv"
)
t
.
Errorf
(
"Expected no error when creating aws pv"
)
...
@@ -244,7 +208,7 @@ func TestAdmission(t *testing.T) {
...
@@ -244,7 +208,7 @@ func TestAdmission(t *testing.T) {
labels
[
"e"
]
=
"1"
labels
[
"e"
]
=
"1"
labels
[
"f"
]
=
"2"
labels
[
"f"
]
=
"2"
labels
[
"g"
]
=
"3"
labels
[
"g"
]
=
"3"
pvHandler
.
ebsVolumes
=
mockVolumeLabels
(
labels
)
pvHandler
.
awsPVLabeler
=
mockVolumeLabels
(
labels
)
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
err
=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
awsPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
awsPV
.
Namespace
,
awsPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Expected no error when creating aws pv"
)
t
.
Errorf
(
"Expected no error when creating aws pv"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment