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
1dd73c59
Unverified
Commit
1dd73c59
authored
Oct 27, 2016
by
Jordan Liggitt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Require PV provisioner secrets to match type
parent
e233f14a
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
45 additions
and
12 deletions
+45
-12
glusterfs.go
pkg/volume/glusterfs/glusterfs.go
+1
-1
glusterfs_test.go
pkg/volume/glusterfs/glusterfs_test.go
+1
-0
quobyte.go
pkg/volume/quobyte/quobyte.go
+3
-2
rbd.go
pkg/volume/rbd/rbd.go
+19
-6
util.go
pkg/volume/util/util.go
+21
-3
No files found.
pkg/volume/glusterfs/glusterfs.go
View file @
1dd73c59
...
@@ -623,7 +623,7 @@ func (d *glusterfsVolumeDeleter) deleteEndpointService(namespace string, epServi
...
@@ -623,7 +623,7 @@ func (d *glusterfsVolumeDeleter) deleteEndpointService(namespace string, epServi
// parseSecret finds a given Secret instance and reads user password from it.
// parseSecret finds a given Secret instance and reads user password from it.
func
parseSecret
(
namespace
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
string
,
error
)
{
func
parseSecret
(
namespace
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
string
,
error
)
{
secretMap
,
err
:=
volutil
.
GetSecret
(
namespace
,
secret
Name
,
kubeClient
)
secretMap
,
err
:=
volutil
.
GetSecret
ForPV
(
namespace
,
secretName
,
glusterfsPlugin
Name
,
kubeClient
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
glog
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
return
""
,
fmt
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
return
""
,
fmt
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
...
...
pkg/volume/glusterfs/glusterfs_test.go
View file @
1dd73c59
...
@@ -242,6 +242,7 @@ func TestPersistentClaimReadOnlyFlag(t *testing.T) {
...
@@ -242,6 +242,7 @@ func TestPersistentClaimReadOnlyFlag(t *testing.T) {
func
TestParseClassParameters
(
t
*
testing
.
T
)
{
func
TestParseClassParameters
(
t
*
testing
.
T
)
{
secret
:=
api
.
Secret
{
secret
:=
api
.
Secret
{
Type
:
"kubernetes.io/glusterfs"
,
Data
:
map
[
string
][]
byte
{
Data
:
map
[
string
][]
byte
{
"data"
:
[]
byte
(
"mypassword"
),
"data"
:
[]
byte
(
"mypassword"
),
},
},
...
...
pkg/volume/quobyte/quobyte.go
View file @
1dd73c59
...
@@ -371,7 +371,7 @@ func (provisioner *quobyteVolumeProvisioner) Provision() (*api.PersistentVolume,
...
@@ -371,7 +371,7 @@ func (provisioner *quobyteVolumeProvisioner) Provision() (*api.PersistentVolume,
}
}
}
}
secretMap
,
err
:=
util
.
GetSecret
(
adminSecretNamespace
,
adminSecret
Name
,
provisioner
.
plugin
.
host
.
GetKubeClient
())
secretMap
,
err
:=
util
.
GetSecret
ForPV
(
adminSecretNamespace
,
adminSecretName
,
quobytePlugin
Name
,
provisioner
.
plugin
.
host
.
GetKubeClient
())
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -444,9 +444,10 @@ func (deleter *quobyteVolumeDeleter) Delete() error {
...
@@ -444,9 +444,10 @@ func (deleter *quobyteVolumeDeleter) Delete() error {
return
err
return
err
}
}
secretMap
,
err
:=
util
.
GetSecret
(
secretMap
,
err
:=
util
.
GetSecret
ForPV
(
annotations
[
annotationQuobyteAPISecretNamespace
],
annotations
[
annotationQuobyteAPISecretNamespace
],
annotations
[
annotationQuobyteAPISecret
],
annotations
[
annotationQuobyteAPISecret
],
quobytePluginName
,
deleter
.
plugin
.
host
.
GetKubeClient
())
deleter
.
plugin
.
host
.
GetKubeClient
())
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/volume/rbd/rbd.go
View file @
1dd73c59
...
@@ -99,7 +99,7 @@ func (plugin *rbdPlugin) NewMounter(spec *volume.Spec, pod *api.Pod, _ volume.Vo
...
@@ -99,7 +99,7 @@ func (plugin *rbdPlugin) NewMounter(spec *volume.Spec, pod *api.Pod, _ volume.Vo
source
,
_
:=
plugin
.
getRBDVolumeSource
(
spec
)
source
,
_
:=
plugin
.
getRBDVolumeSource
(
spec
)
if
source
.
SecretRef
!=
nil
{
if
source
.
SecretRef
!=
nil
{
if
secret
,
err
=
parse
Secret
(
pod
.
Namespace
,
source
.
SecretRef
.
Name
,
plugin
.
host
.
GetKubeClient
());
err
!=
nil
{
if
secret
,
err
=
parse
PodSecret
(
pod
,
source
.
SecretRef
.
Name
,
plugin
.
host
.
GetKubeClient
());
err
!=
nil
{
glog
.
Errorf
(
"Couldn't get secret from %v/%v"
,
pod
.
Namespace
,
source
.
SecretRef
)
glog
.
Errorf
(
"Couldn't get secret from %v/%v"
,
pod
.
Namespace
,
source
.
SecretRef
)
return
nil
,
err
return
nil
,
err
}
}
...
@@ -199,7 +199,7 @@ func (plugin *rbdPlugin) NewDeleter(spec *volume.Spec) (volume.Deleter, error) {
...
@@ -199,7 +199,7 @@ func (plugin *rbdPlugin) NewDeleter(spec *volume.Spec) (volume.Deleter, error) {
}
}
}
}
secret
,
err
:=
parseSecret
(
adminSecretNamespace
,
adminSecretName
,
plugin
.
host
.
GetKubeClient
())
secret
,
err
:=
parse
PV
Secret
(
adminSecretNamespace
,
adminSecretName
,
plugin
.
host
.
GetKubeClient
())
if
err
!=
nil
{
if
err
!=
nil
{
// log error but don't return yet
// log error but don't return yet
glog
.
Errorf
(
"failed to get admin secret from [%q/%q]: %v"
,
adminSecretNamespace
,
adminSecretName
,
err
)
glog
.
Errorf
(
"failed to get admin secret from [%q/%q]: %v"
,
adminSecretNamespace
,
adminSecretName
,
err
)
...
@@ -281,7 +281,7 @@ func (r *rbdVolumeProvisioner) Provision() (*api.PersistentVolume, error) {
...
@@ -281,7 +281,7 @@ func (r *rbdVolumeProvisioner) Provision() (*api.PersistentVolume, error) {
if
adminSecretName
==
""
{
if
adminSecretName
==
""
{
return
nil
,
fmt
.
Errorf
(
"missing Ceph admin secret name"
)
return
nil
,
fmt
.
Errorf
(
"missing Ceph admin secret name"
)
}
}
if
secret
,
err
=
parseSecret
(
adminSecretNamespace
,
adminSecretName
,
r
.
plugin
.
host
.
GetKubeClient
());
err
!=
nil
{
if
secret
,
err
=
parse
PV
Secret
(
adminSecretNamespace
,
adminSecretName
,
r
.
plugin
.
host
.
GetKubeClient
());
err
!=
nil
{
// log error but don't return yet
// log error but don't return yet
glog
.
Errorf
(
"failed to get admin secret from [%q/%q]"
,
adminSecretNamespace
,
adminSecretName
)
glog
.
Errorf
(
"failed to get admin secret from [%q/%q]"
,
adminSecretNamespace
,
adminSecretName
)
}
}
...
@@ -428,13 +428,26 @@ func getVolumeSource(
...
@@ -428,13 +428,26 @@ func getVolumeSource(
return
nil
,
false
,
fmt
.
Errorf
(
"Spec does not reference a RBD volume type"
)
return
nil
,
false
,
fmt
.
Errorf
(
"Spec does not reference a RBD volume type"
)
}
}
// parseSecretMap locates the secret by key name.
func
parsePodSecret
(
pod
*
api
.
Pod
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
string
,
error
)
{
func
parseSecret
(
namespace
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
string
,
error
)
{
secret
,
err
:=
volutil
.
GetSecretForPod
(
pod
,
secretName
,
kubeClient
)
secretMap
,
err
:=
volutil
.
GetSecret
(
namespace
,
secretName
,
kubeClient
)
if
err
!=
nil
{
glog
.
Errorf
(
"failed to get secret from [%q/%q]"
,
pod
.
Namespace
,
secretName
)
return
""
,
fmt
.
Errorf
(
"failed to get secret from [%q/%q]"
,
pod
.
Namespace
,
secretName
)
}
return
parseSecretMap
(
secret
)
}
func
parsePVSecret
(
namespace
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
string
,
error
)
{
secret
,
err
:=
volutil
.
GetSecretForPV
(
namespace
,
secretName
,
rbdPluginName
,
kubeClient
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
glog
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
return
""
,
fmt
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
return
""
,
fmt
.
Errorf
(
"failed to get secret from [%q/%q]"
,
namespace
,
secretName
)
}
}
return
parseSecretMap
(
secret
)
}
// parseSecretMap locates the secret by key name.
func
parseSecretMap
(
secretMap
map
[
string
]
string
)
(
string
,
error
)
{
if
len
(
secretMap
)
==
0
{
if
len
(
secretMap
)
==
0
{
return
""
,
fmt
.
Errorf
(
"empty secret map"
)
return
""
,
fmt
.
Errorf
(
"empty secret map"
)
}
}
...
...
pkg/volume/util/util.go
View file @
1dd73c59
...
@@ -112,17 +112,35 @@ func PathExists(path string) (bool, error) {
...
@@ -112,17 +112,35 @@ func PathExists(path string) (bool, error) {
}
}
}
}
// GetSecret
locates secret by name and
namespace and returns secret map
// GetSecret
ForPod locates secret by name in the pod's
namespace and returns secret map
func
GetSecret
(
namespace
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
map
[
string
]
string
,
error
)
{
func
GetSecret
ForPod
(
pod
*
api
.
Pod
,
secretName
string
,
kubeClient
clientset
.
Interface
)
(
map
[
string
]
string
,
error
)
{
secret
:=
make
(
map
[
string
]
string
)
secret
:=
make
(
map
[
string
]
string
)
if
kubeClient
==
nil
{
if
kubeClient
==
nil
{
return
secret
,
fmt
.
Errorf
(
"Cannot get kube client"
)
return
secret
,
fmt
.
Errorf
(
"Cannot get kube client"
)
}
}
secrets
,
err
:=
kubeClient
.
Core
()
.
Secrets
(
pod
.
Namespace
)
.
Get
(
secretName
)
if
err
!=
nil
{
return
secret
,
err
}
for
name
,
data
:=
range
secrets
.
Data
{
secret
[
name
]
=
string
(
data
)
}
return
secret
,
nil
}
secrets
,
err
:=
kubeClient
.
Core
()
.
Secrets
(
namespace
)
.
Get
(
secretName
)
// GetSecretForPV locates secret by name and namespace, verifies the secret type, and returns secret map
func
GetSecretForPV
(
secretNamespace
,
secretName
,
volumePluginName
string
,
kubeClient
clientset
.
Interface
)
(
map
[
string
]
string
,
error
)
{
secret
:=
make
(
map
[
string
]
string
)
if
kubeClient
==
nil
{
return
secret
,
fmt
.
Errorf
(
"Cannot get kube client"
)
}
secrets
,
err
:=
kubeClient
.
Core
()
.
Secrets
(
secretNamespace
)
.
Get
(
secretName
)
if
err
!=
nil
{
if
err
!=
nil
{
return
secret
,
err
return
secret
,
err
}
}
if
secrets
.
Type
!=
api
.
SecretType
(
volumePluginName
)
{
return
secret
,
fmt
.
Errorf
(
"Cannot get secret of type %s"
,
volumePluginName
)
}
for
name
,
data
:=
range
secrets
.
Data
{
for
name
,
data
:=
range
secrets
.
Data
{
secret
[
name
]
=
string
(
data
)
secret
[
name
]
=
string
(
data
)
}
}
...
...
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