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
36877daf
Unverified
Commit
36877daf
authored
Sep 10, 2018
by
k8s-ci-robot
Committed by
GitHub
Sep 10, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #68426 from verult/csi-informer-spam
Consolidated CSIDriver logic under CSIDriverRegistry flag
parents
c0953ed2
4ca39ef0
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
61 additions
and
57 deletions
+61
-57
kube_features.go
pkg/features/kube_features.go
+0
-12
BUILD
pkg/volume/csi/BUILD
+2
-0
csi_attacher_test.go
pkg/volume/csi/csi_attacher_test.go
+9
-20
csi_mounter.go
pkg/volume/csi/csi_mounter.go
+1
-1
csi_mounter_test.go
pkg/volume/csi/csi_mounter_test.go
+7
-5
csi_plugin.go
pkg/volume/csi/csi_plugin.go
+20
-6
csi_plugin_test.go
pkg/volume/csi/csi_plugin_test.go
+6
-4
csi_util.go
pkg/volume/csi/csi_util.go
+6
-0
BUILD
pkg/volume/csi/nodeinfomanager/BUILD
+1
-0
nodeinfomanager.go
pkg/volume/csi/nodeinfomanager/nodeinfomanager.go
+4
-0
nodeinfomanager_test.go
pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go
+3
-7
controller_policy.go
...auth/authorizer/rbac/bootstrappolicy/controller_policy.go
+1
-1
policy.go
plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go
+1
-1
No files found.
pkg/features/kube_features.go
View file @
36877daf
...
@@ -391,16 +391,6 @@ const (
...
@@ -391,16 +391,6 @@ const (
//
//
// Allow TTL controller to clean up Pods and Jobs after they finish.
// Allow TTL controller to clean up Pods and Jobs after they finish.
TTLAfterFinished
utilfeature
.
Feature
=
"TTLAfterFinished"
TTLAfterFinished
utilfeature
.
Feature
=
"TTLAfterFinished"
// owner: @jsafrane
// Kubernetes skips attaching CSI volumes that don't require attachment.
//
CSISkipAttach
utilfeature
.
Feature
=
"CSISkipAttach"
// owner: @jsafrane
//
// Kubelet sends pod information in NodePublish CSI call when a CSI driver wants so.
CSIPodInfo
utilfeature
.
Feature
=
"CSIPodInfo"
)
)
func
init
()
{
func
init
()
{
...
@@ -467,8 +457,6 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
...
@@ -467,8 +457,6 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
VolumeSnapshotDataSource
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
VolumeSnapshotDataSource
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
ProcMountType
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
ProcMountType
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
TTLAfterFinished
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
TTLAfterFinished
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
CSISkipAttach
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
CSIPodInfo
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
// unintentionally on either side:
// unintentionally on either side:
...
...
pkg/volume/csi/BUILD
View file @
36877daf
...
@@ -27,6 +27,7 @@ go_library(
...
@@ -27,6 +27,7 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/informers/externalversions:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/informers/externalversions:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/informers/externalversions/csi/v1alpha1:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/informers/externalversions/csi/v1alpha1:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/listers/csi/v1alpha1:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/listers/csi/v1alpha1:go_default_library",
...
@@ -59,6 +60,7 @@ go_test(
...
@@ -59,6 +60,7 @@ go_test(
"//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/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
...
...
pkg/volume/csi/csi_attacher_test.go
View file @
36877daf
...
@@ -30,13 +30,16 @@ import (
...
@@ -30,13 +30,16 @@ import (
meta
"k8s.io/apimachinery/pkg/apis/meta/v1"
meta
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
clientset
"k8s.io/client-go/kubernetes"
clientset
"k8s.io/client-go/kubernetes"
fakeclient
"k8s.io/client-go/kubernetes/fake"
fakeclient
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
core
"k8s.io/client-go/testing"
utiltesting
"k8s.io/client-go/util/testing"
utiltesting
"k8s.io/client-go/util/testing"
fakecsi
"k8s.io/csi-api/pkg/client/clientset/versioned/fake"
fakecsi
"k8s.io/csi-api/pkg/client/clientset/versioned/fake"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume"
volumetest
"k8s.io/kubernetes/pkg/volume/testing"
volumetest
"k8s.io/kubernetes/pkg/volume/testing"
)
)
...
@@ -202,14 +205,7 @@ func TestAttacherAttach(t *testing.T) {
...
@@ -202,14 +205,7 @@ func TestAttacherAttach(t *testing.T) {
}
}
func
TestAttacherWithCSIDriver
(
t
*
testing
.
T
)
{
func
TestAttacherWithCSIDriver
(
t
*
testing
.
T
)
{
originalFeatures
:=
utilfeature
.
DefaultFeatureGate
.
DeepCopy
()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
CSIDriverRegistry
,
true
)()
defer
func
()
{
utilfeature
.
DefaultFeatureGate
=
originalFeatures
}()
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"CSISkipAttach=true"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to set CSISkipAttach=true: %s"
,
err
)
}
tests
:=
[]
struct
{
tests
:=
[]
struct
{
name
string
name
string
...
@@ -277,14 +273,7 @@ func TestAttacherWithCSIDriver(t *testing.T) {
...
@@ -277,14 +273,7 @@ func TestAttacherWithCSIDriver(t *testing.T) {
}
}
func
TestAttacherWaitForVolumeAttachmentWithCSIDriver
(
t
*
testing
.
T
)
{
func
TestAttacherWaitForVolumeAttachmentWithCSIDriver
(
t
*
testing
.
T
)
{
originalFeatures
:=
utilfeature
.
DefaultFeatureGate
.
DeepCopy
()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
CSIDriverRegistry
,
true
)()
defer
func
()
{
utilfeature
.
DefaultFeatureGate
=
originalFeatures
}()
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"CSISkipAttach=true"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to set CSISkipAttach=true: %s"
,
err
)
}
// In order to detect if the volume plugin would skip WaitForAttach for non-attachable drivers,
// In order to detect if the volume plugin would skip WaitForAttach for non-attachable drivers,
// we do not instantiate any VolumeAttachment. So if the plugin does not skip attach, WaitForVolumeAttachment
// we do not instantiate any VolumeAttachment. So if the plugin does not skip attach, WaitForVolumeAttachment
...
@@ -940,11 +929,11 @@ func newTestWatchPlugin(t *testing.T, csiClient *fakecsi.Clientset) (*csiPlugin,
...
@@ -940,11 +929,11 @@ func newTestWatchPlugin(t *testing.T, csiClient *fakecsi.Clientset) (*csiPlugin,
t
.
Fatalf
(
"cannot assert plugin to be type csiPlugin"
)
t
.
Fatalf
(
"cannot assert plugin to be type csiPlugin"
)
}
}
for
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIDriverRegistry
)
{
// Wait until the informer in CSI volume plugin has all CSIDrivers.
// Wait until the informer in CSI volume plugin has all CSIDrivers.
if
csiPlug
.
csiDriverInformer
.
Informer
()
.
HasSynced
(
)
{
wait
.
PollImmediate
(
testInformerSyncPeriod
,
testInformerSyncTimeout
,
func
()
(
bool
,
error
)
{
break
return
csiPlug
.
csiDriverInformer
.
Informer
()
.
HasSynced
(),
nil
}
}
)
}
}
return
csiPlug
,
fakeWatcher
,
tmpDir
,
fakeClient
return
csiPlug
,
fakeWatcher
,
tmpDir
,
fakeClient
...
...
pkg/volume/csi/csi_mounter.go
View file @
36877daf
...
@@ -238,7 +238,7 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error {
...
@@ -238,7 +238,7 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error {
}
}
func
(
c
*
csiMountMgr
)
podAttributes
()
(
map
[
string
]
string
,
error
)
{
func
(
c
*
csiMountMgr
)
podAttributes
()
(
map
[
string
]
string
,
error
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
PodInfo
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
DriverRegistry
)
{
return
nil
,
nil
return
nil
,
nil
}
}
if
c
.
plugin
.
csiDriverLister
==
nil
{
if
c
.
plugin
.
csiDriverLister
==
nil
{
...
...
pkg/volume/csi/csi_mounter_test.go
View file @
36877daf
...
@@ -32,6 +32,7 @@ import (
...
@@ -32,6 +32,7 @@ import (
storage
"k8s.io/api/storage/v1beta1"
storage
"k8s.io/api/storage/v1beta1"
meta
"k8s.io/apimachinery/pkg/apis/meta/v1"
meta
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
fakeclient
"k8s.io/client-go/kubernetes/fake"
fakeclient
"k8s.io/client-go/kubernetes/fake"
...
@@ -95,7 +96,7 @@ func TestMounterGetPath(t *testing.T) {
...
@@ -95,7 +96,7 @@ func TestMounterGetPath(t *testing.T) {
}
}
func
MounterSetUpTests
(
t
*
testing
.
T
,
podInfoEnabled
bool
)
{
func
MounterSetUpTests
(
t
*
testing
.
T
,
podInfoEnabled
bool
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
CSI
PodInfo
,
podInfoEnabled
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
CSI
DriverRegistry
,
podInfoEnabled
)()
tests
:=
[]
struct
{
tests
:=
[]
struct
{
name
string
name
string
driver
string
driver
string
...
@@ -154,12 +155,13 @@ func MounterSetUpTests(t *testing.T, podInfoEnabled bool) {
...
@@ -154,12 +155,13 @@ func MounterSetUpTests(t *testing.T, podInfoEnabled bool) {
plug
,
tmpDir
:=
newTestPlugin
(
t
,
fakeClient
,
fakeCSIClient
)
plug
,
tmpDir
:=
newTestPlugin
(
t
,
fakeClient
,
fakeCSIClient
)
defer
os
.
RemoveAll
(
tmpDir
)
defer
os
.
RemoveAll
(
tmpDir
)
for
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIDriverRegistry
)
{
// Wait until the informer in CSI volume plugin has all CSIDrivers.
// Wait until the informer in CSI volume plugin has all CSIDrivers.
if
plug
.
csiDriverInformer
.
Informer
()
.
HasSynced
(
)
{
wait
.
PollImmediate
(
testInformerSyncPeriod
,
testInformerSyncTimeout
,
func
()
(
bool
,
error
)
{
break
return
plug
.
csiDriverInformer
.
Informer
()
.
HasSynced
(),
nil
}
}
)
}
}
pv
:=
makeTestPV
(
"test-pv"
,
10
,
test
.
driver
,
testVol
)
pv
:=
makeTestPV
(
"test-pv"
,
10
,
test
.
driver
,
testVol
)
pv
.
Spec
.
CSI
.
VolumeAttributes
=
test
.
attributes
pv
.
Spec
.
CSI
.
VolumeAttributes
=
test
.
attributes
pvName
:=
pv
.
GetName
()
pvName
:=
pv
.
GetName
()
...
...
pkg/volume/csi/csi_plugin.go
View file @
36877daf
...
@@ -36,6 +36,7 @@ import (
...
@@ -36,6 +36,7 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
clientset
"k8s.io/client-go/kubernetes"
clientset
"k8s.io/client-go/kubernetes"
csiclientset
"k8s.io/csi-api/pkg/client/clientset/versioned"
csiapiinformer
"k8s.io/csi-api/pkg/client/informers/externalversions"
csiapiinformer
"k8s.io/csi-api/pkg/client/informers/externalversions"
csiinformer
"k8s.io/csi-api/pkg/client/informers/externalversions/csi/v1alpha1"
csiinformer
"k8s.io/csi-api/pkg/client/informers/externalversions/csi/v1alpha1"
csilister
"k8s.io/csi-api/pkg/client/listers/csi/v1alpha1"
csilister
"k8s.io/csi-api/pkg/client/listers/csi/v1alpha1"
...
@@ -160,12 +161,21 @@ func (h *RegistrationHandler) DeRegisterPlugin(pluginName string) {
...
@@ -160,12 +161,21 @@ func (h *RegistrationHandler) DeRegisterPlugin(pluginName string) {
func
(
p
*
csiPlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
func
(
p
*
csiPlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
p
.
host
=
host
p
.
host
=
host
// Initializing csiDrivers map and label management channels
kubeClient
:=
host
.
GetKubeClient
()
csiDrivers
=
csiDriversStore
{
driversMap
:
map
[
string
]
csiDriver
{}}
if
kubeClient
==
nil
{
nim
=
nodeinfomanager
.
NewNodeInfoManager
(
host
.
GetNodeName
(),
host
.
GetKubeClient
(),
host
.
GetCSIClient
())
return
fmt
.
Errorf
(
"error getting kube client"
)
}
csiClient
:=
host
.
GetCSIClient
()
var
csiClient
csiclientset
.
Interface
if
csiClient
!=
nil
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIDriverRegistry
)
||
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSINodeInfo
)
{
csiClient
=
host
.
GetCSIClient
()
if
csiClient
==
nil
{
return
fmt
.
Errorf
(
"error getting CSI client"
)
}
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIDriverRegistry
)
{
// Start informer for CSIDrivers.
// Start informer for CSIDrivers.
factory
:=
csiapiinformer
.
NewSharedInformerFactory
(
csiClient
,
csiResyncPeriod
)
factory
:=
csiapiinformer
.
NewSharedInformerFactory
(
csiClient
,
csiResyncPeriod
)
p
.
csiDriverInformer
=
factory
.
Csi
()
.
V1alpha1
()
.
CSIDrivers
()
p
.
csiDriverInformer
=
factory
.
Csi
()
.
V1alpha1
()
.
CSIDrivers
()
...
@@ -173,6 +183,10 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
...
@@ -173,6 +183,10 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
go
factory
.
Start
(
wait
.
NeverStop
)
go
factory
.
Start
(
wait
.
NeverStop
)
}
}
// Initializing csiDrivers map and label management channels
csiDrivers
=
csiDriversStore
{
driversMap
:
map
[
string
]
csiDriver
{}}
nim
=
nodeinfomanager
.
NewNodeInfoManager
(
host
.
GetNodeName
(),
kubeClient
,
csiClient
)
return
nil
return
nil
}
}
...
@@ -514,7 +528,7 @@ func (p *csiPlugin) ConstructBlockVolumeSpec(podUID types.UID, specVolName, mapP
...
@@ -514,7 +528,7 @@ func (p *csiPlugin) ConstructBlockVolumeSpec(podUID types.UID, specVolName, mapP
}
}
func
(
p
*
csiPlugin
)
skipAttach
(
driver
string
)
(
bool
,
error
)
{
func
(
p
*
csiPlugin
)
skipAttach
(
driver
string
)
(
bool
,
error
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
SkipAttach
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
DriverRegistry
)
{
return
false
,
nil
return
false
,
nil
}
}
if
p
.
csiDriverLister
==
nil
{
if
p
.
csiDriverLister
==
nil
{
...
...
pkg/volume/csi/csi_plugin_test.go
View file @
36877daf
...
@@ -27,10 +27,12 @@ import (
...
@@ -27,10 +27,12 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/api/resource"
meta
"k8s.io/apimachinery/pkg/apis/meta/v1"
meta
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
fakeclient
"k8s.io/client-go/kubernetes/fake"
fakeclient
"k8s.io/client-go/kubernetes/fake"
utiltesting
"k8s.io/client-go/util/testing"
utiltesting
"k8s.io/client-go/util/testing"
fakecsi
"k8s.io/csi-api/pkg/client/clientset/versioned/fake"
fakecsi
"k8s.io/csi-api/pkg/client/clientset/versioned/fake"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume"
volumetest
"k8s.io/kubernetes/pkg/volume/testing"
volumetest
"k8s.io/kubernetes/pkg/volume/testing"
)
)
...
@@ -73,11 +75,11 @@ func newTestPlugin(t *testing.T, client *fakeclient.Clientset, csiClient *fakecs
...
@@ -73,11 +75,11 @@ func newTestPlugin(t *testing.T, client *fakeclient.Clientset, csiClient *fakecs
t
.
Fatalf
(
"cannot assert plugin to be type csiPlugin"
)
t
.
Fatalf
(
"cannot assert plugin to be type csiPlugin"
)
}
}
for
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIDriverRegistry
)
{
// Wait until the informer in CSI volume plugin has all CSIDrivers.
// Wait until the informer in CSI volume plugin has all CSIDrivers.
if
csiPlug
.
csiDriverInformer
.
Informer
()
.
HasSynced
(
)
{
wait
.
PollImmediate
(
testInformerSyncPeriod
,
testInformerSyncTimeout
,
func
()
(
bool
,
error
)
{
break
return
csiPlug
.
csiDriverInformer
.
Informer
()
.
HasSynced
(),
nil
}
}
)
}
}
return
csiPlug
,
tmpDir
return
csiPlug
,
tmpDir
...
...
pkg/volume/csi/csi_util.go
View file @
36877daf
...
@@ -28,6 +28,12 @@ import (
...
@@ -28,6 +28,12 @@ import (
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes"
kstrings
"k8s.io/kubernetes/pkg/util/strings"
kstrings
"k8s.io/kubernetes/pkg/util/strings"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume"
"time"
)
const
(
testInformerSyncPeriod
=
100
*
time
.
Millisecond
testInformerSyncTimeout
=
30
*
time
.
Second
)
)
func
getCredentialsFromSecret
(
k8s
kubernetes
.
Interface
,
secretRef
*
api
.
SecretReference
)
(
map
[
string
]
string
,
error
)
{
func
getCredentialsFromSecret
(
k8s
kubernetes
.
Interface
,
secretRef
*
api
.
SecretReference
)
(
map
[
string
]
string
,
error
)
{
...
...
pkg/volume/csi/nodeinfomanager/BUILD
View file @
36877daf
...
@@ -51,6 +51,7 @@ go_test(
...
@@ -51,6 +51,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/apis/csi/v1alpha1:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/fake:go_default_library",
"//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned/fake:go_default_library",
...
...
pkg/volume/csi/nodeinfomanager/nodeinfomanager.go
View file @
36877daf
...
@@ -315,6 +315,10 @@ func (nim *nodeInfoManager) updateCSINodeInfo(
...
@@ -315,6 +315,10 @@ func (nim *nodeInfoManager) updateCSINodeInfo(
driverNodeID
string
,
driverNodeID
string
,
topology
*
csipb
.
Topology
)
error
{
topology
*
csipb
.
Topology
)
error
{
if
nim
.
csiKubeClient
==
nil
{
return
fmt
.
Errorf
(
"CSI client cannot be nil"
)
}
retryErr
:=
retry
.
RetryOnConflict
(
retry
.
DefaultRetry
,
func
()
error
{
retryErr
:=
retry
.
RetryOnConflict
(
retry
.
DefaultRetry
,
func
()
error
{
nodeInfo
,
err
:=
nim
.
csiKubeClient
.
CsiV1alpha1
()
.
CSINodeInfos
()
.
Get
(
string
(
nim
.
nodeName
),
metav1
.
GetOptions
{})
nodeInfo
,
err
:=
nim
.
csiKubeClient
.
CsiV1alpha1
()
.
CSINodeInfos
()
.
Get
(
string
(
nim
.
nodeName
),
metav1
.
GetOptions
{})
if
nodeInfo
==
nil
||
errors
.
IsNotFound
(
err
)
{
if
nodeInfo
==
nil
||
errors
.
IsNotFound
(
err
)
{
...
...
pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go
View file @
36877daf
...
@@ -18,7 +18,6 @@ package nodeinfomanager
...
@@ -18,7 +18,6 @@ package nodeinfomanager
import
(
import
(
"encoding/json"
"encoding/json"
"fmt"
"github.com/container-storage-interface/spec/lib/go/csi/v0"
"github.com/container-storage-interface/spec/lib/go/csi/v0"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/errors"
...
@@ -26,6 +25,7 @@ import (
...
@@ -26,6 +25,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/fake"
csiv1alpha1
"k8s.io/csi-api/pkg/apis/csi/v1alpha1"
csiv1alpha1
"k8s.io/csi-api/pkg/apis/csi/v1alpha1"
csifake
"k8s.io/csi-api/pkg/client/clientset/versioned/fake"
csifake
"k8s.io/csi-api/pkg/client/clientset/versioned/fake"
...
@@ -496,9 +496,7 @@ func TestRemoveNodeInfo_CSINodeInfoDisabled(t *testing.T) {
...
@@ -496,9 +496,7 @@ func TestRemoveNodeInfo_CSINodeInfoDisabled(t *testing.T) {
}
}
func
TestAddNodeInfoExistingAnnotation
(
t
*
testing
.
T
)
{
func
TestAddNodeInfoExistingAnnotation
(
t
*
testing
.
T
)
{
csiNodeInfoEnabled
:=
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSINodeInfo
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
CSINodeInfo
,
true
)()
utilfeature
.
DefaultFeatureGate
.
Set
(
fmt
.
Sprintf
(
"%s=true"
,
features
.
CSINodeInfo
))
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
fmt
.
Sprintf
(
"%s=%t"
,
features
.
CSINodeInfo
,
csiNodeInfoEnabled
))
driverName
:=
"com.example.csi/driver1"
driverName
:=
"com.example.csi/driver1"
nodeID
:=
"com.example.csi/some-node"
nodeID
:=
"com.example.csi/some-node"
...
@@ -561,9 +559,7 @@ func TestAddNodeInfoExistingAnnotation(t *testing.T) {
...
@@ -561,9 +559,7 @@ func TestAddNodeInfoExistingAnnotation(t *testing.T) {
}
}
func
test
(
t
*
testing
.
T
,
addNodeInfo
bool
,
csiNodeInfoEnabled
bool
,
testcases
[]
testcase
)
{
func
test
(
t
*
testing
.
T
,
addNodeInfo
bool
,
csiNodeInfoEnabled
bool
,
testcases
[]
testcase
)
{
wasEnabled
:=
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSINodeInfo
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
CSINodeInfo
,
csiNodeInfoEnabled
)()
utilfeature
.
DefaultFeatureGate
.
Set
(
fmt
.
Sprintf
(
"%s=%t"
,
features
.
CSINodeInfo
,
csiNodeInfoEnabled
))
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
fmt
.
Sprintf
(
"%s=%t"
,
features
.
CSINodeInfo
,
wasEnabled
))
for
_
,
tc
:=
range
testcases
{
for
_
,
tc
:=
range
testcases
{
t
.
Logf
(
"test case: %q"
,
tc
.
name
)
t
.
Logf
(
"test case: %q"
,
tc
.
name
)
...
...
plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go
View file @
36877daf
...
@@ -73,7 +73,7 @@ func buildControllerRoles() ([]rbacv1.ClusterRole, []rbacv1.ClusterRoleBinding)
...
@@ -73,7 +73,7 @@ func buildControllerRoles() ([]rbacv1.ClusterRole, []rbacv1.ClusterRoleBinding)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIPersistentVolume
)
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIPersistentVolume
)
{
role
.
Rules
=
append
(
role
.
Rules
,
rbacv1helpers
.
NewRule
(
"get"
,
"create"
,
"delete"
,
"list"
,
"watch"
)
.
Groups
(
storageGroup
)
.
Resources
(
"volumeattachments"
)
.
RuleOrDie
())
role
.
Rules
=
append
(
role
.
Rules
,
rbacv1helpers
.
NewRule
(
"get"
,
"create"
,
"delete"
,
"list"
,
"watch"
)
.
Groups
(
storageGroup
)
.
Resources
(
"volumeattachments"
)
.
RuleOrDie
())
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
SkipAttach
)
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
DriverRegistry
)
{
role
.
Rules
=
append
(
role
.
Rules
,
rbacv1helpers
.
NewRule
(
"get"
,
"watch"
,
"list"
)
.
Groups
(
"csi.storage.k8s.io"
)
.
Resources
(
"csidrivers"
)
.
RuleOrDie
())
role
.
Rules
=
append
(
role
.
Rules
,
rbacv1helpers
.
NewRule
(
"get"
,
"watch"
,
"list"
)
.
Groups
(
"csi.storage.k8s.io"
)
.
Resources
(
"csidrivers"
)
.
RuleOrDie
())
}
}
}
}
...
...
plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go
View file @
36877daf
...
@@ -159,7 +159,7 @@ func NodeRules() []rbacv1.PolicyRule {
...
@@ -159,7 +159,7 @@ func NodeRules() []rbacv1.PolicyRule {
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIPersistentVolume
)
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIPersistentVolume
)
{
volAttachRule
:=
rbacv1helpers
.
NewRule
(
"get"
)
.
Groups
(
storageGroup
)
.
Resources
(
"volumeattachments"
)
.
RuleOrDie
()
volAttachRule
:=
rbacv1helpers
.
NewRule
(
"get"
)
.
Groups
(
storageGroup
)
.
Resources
(
"volumeattachments"
)
.
RuleOrDie
()
nodePolicyRules
=
append
(
nodePolicyRules
,
volAttachRule
)
nodePolicyRules
=
append
(
nodePolicyRules
,
volAttachRule
)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
SkipAttach
)
||
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSIPodInfo
)
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
CSI
DriverRegistry
)
{
csiDriverRule
:=
rbacv1helpers
.
NewRule
(
"get"
,
"watch"
,
"list"
)
.
Groups
(
"csi.storage.k8s.io"
)
.
Resources
(
"csidrivers"
)
.
RuleOrDie
()
csiDriverRule
:=
rbacv1helpers
.
NewRule
(
"get"
,
"watch"
,
"list"
)
.
Groups
(
"csi.storage.k8s.io"
)
.
Resources
(
"csidrivers"
)
.
RuleOrDie
()
nodePolicyRules
=
append
(
nodePolicyRules
,
csiDriverRule
)
nodePolicyRules
=
append
(
nodePolicyRules
,
csiDriverRule
)
}
}
...
...
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