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
07cfade1
Commit
07cfade1
authored
Aug 15, 2017
by
core
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FlexVolume: Add capability to disable SELinux Relabeling during the driver's init phase
Reference:
https://github.com/lizardfs/lizardfs/issues/581
(SELinux relabeling support)
parent
9aa04c75
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
28 deletions
+40
-28
driver-call.go
pkg/volume/flexvolume/driver-call.go
+27
-1
mounter-defaults.go
pkg/volume/flexvolume/mounter-defaults.go
+1
-1
plugin.go
pkg/volume/flexvolume/plugin.go
+12
-26
No files found.
pkg/volume/flexvolume/driver-call.go
View file @
07cfade1
...
@@ -59,7 +59,8 @@ const (
...
@@ -59,7 +59,8 @@ const (
optionKeyServiceAccountName
=
"kubernetes.io/serviceAccount.name"
optionKeyServiceAccountName
=
"kubernetes.io/serviceAccount.name"
attachCapability
=
"attach"
attachCapability
=
"attach"
selinuxRelabelCapability
=
"selinuxRelabel"
)
)
const
(
const
(
...
@@ -82,6 +83,11 @@ type DriverCall struct {
...
@@ -82,6 +83,11 @@ type DriverCall struct {
args
[]
string
args
[]
string
}
}
type
driverCapabilities
struct
{
attach
bool
selinuxRelabel
bool
}
func
(
plugin
*
flexVolumePlugin
)
NewDriverCall
(
command
string
)
*
DriverCall
{
func
(
plugin
*
flexVolumePlugin
)
NewDriverCall
(
command
string
)
*
DriverCall
{
return
plugin
.
NewDriverCallWithTimeout
(
command
,
0
)
return
plugin
.
NewDriverCallWithTimeout
(
command
,
0
)
}
}
...
@@ -235,3 +241,23 @@ func handleCmdResponse(cmd string, output []byte) (*DriverStatus, error) {
...
@@ -235,3 +241,23 @@ func handleCmdResponse(cmd string, output []byte) (*DriverStatus, error) {
return
&
status
,
nil
return
&
status
,
nil
}
}
// getDriverCapabilities returns the reported capabilities as returned by driver's init() function
func
(
ds
*
DriverStatus
)
getDriverCapabilities
()
*
driverCapabilities
{
driverCaps
:=
&
driverCapabilities
{
attach
:
true
,
selinuxRelabel
:
true
,
}
// Check if driver supports SELinux Relabeling of mounted volume
if
dcap
,
ok
:=
ds
.
Capabilities
[
selinuxRelabelCapability
];
ok
{
driverCaps
.
selinuxRelabel
=
dcap
}
// Check whether the plugin is attachable.
if
dcap
,
ok
:=
ds
.
Capabilities
[
attachCapability
];
ok
{
driverCaps
.
attach
=
dcap
}
return
driverCaps
}
pkg/volume/flexvolume/mounter-defaults.go
View file @
07cfade1
...
@@ -47,7 +47,7 @@ func (f *mounterDefaults) GetAttributes() volume.Attributes {
...
@@ -47,7 +47,7 @@ func (f *mounterDefaults) GetAttributes() volume.Attributes {
return
volume
.
Attributes
{
return
volume
.
Attributes
{
ReadOnly
:
f
.
readOnly
,
ReadOnly
:
f
.
readOnly
,
Managed
:
!
f
.
readOnly
,
Managed
:
!
f
.
readOnly
,
SupportsSELinux
:
true
,
SupportsSELinux
:
f
.
flexVolume
.
plugin
.
capabilities
.
selinuxRelabel
,
}
}
}
}
...
...
pkg/volume/flexvolume/plugin.go
View file @
07cfade1
...
@@ -42,6 +42,7 @@ type flexVolumePlugin struct {
...
@@ -42,6 +42,7 @@ type flexVolumePlugin struct {
runner
exec
.
Interface
runner
exec
.
Interface
sync
.
Mutex
sync
.
Mutex
capabilities
*
driverCapabilities
unsupportedCommands
[]
string
unsupportedCommands
[]
string
}
}
...
@@ -64,44 +65,29 @@ func NewFlexVolumePlugin(pluginDir, name string) (volume.VolumePlugin, error) {
...
@@ -64,44 +65,29 @@ func NewFlexVolumePlugin(pluginDir, name string) (volume.VolumePlugin, error) {
unsupportedCommands
:
[]
string
{},
unsupportedCommands
:
[]
string
{},
}
}
// Check whether the plugin is attachable.
// Retrieve driver reported capabilities
ok
,
err
:=
isAttachable
(
flexPlugin
)
call
:=
flexPlugin
.
NewDriverCall
(
initCmd
)
ds
,
err
:=
call
.
Run
()
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
ok
{
driverCaps
:=
ds
.
getDriverCapabilities
()
// Plugin supports attach/detach, so return flexVolumeAttachablePlugin
flexPlugin
.
capabilities
=
driverCaps
// Check whether the plugin is attachable.
if
driverCaps
.
attach
{
// Plugin supports attach/detach by default, so return flexVolumeAttachablePlugin
return
&
flexVolumeAttachablePlugin
{
flexVolumePlugin
:
flexPlugin
},
nil
return
&
flexVolumeAttachablePlugin
{
flexVolumePlugin
:
flexPlugin
},
nil
}
else
{
}
else
{
return
flexPlugin
,
nil
return
flexPlugin
,
nil
}
}
}
}
func
isAttachable
(
plugin
*
flexVolumePlugin
)
(
bool
,
error
)
{
call
:=
plugin
.
NewDriverCall
(
initCmd
)
res
,
err
:=
call
.
Run
()
if
err
!=
nil
{
return
false
,
err
}
// By default all plugins are attachable, unless they report otherwise.
cap
,
ok
:=
res
.
Capabilities
[
attachCapability
]
if
ok
{
// cap is false, so plugin does not support attach/detach calls.
return
cap
,
nil
}
return
true
,
nil
}
// Init is part of the volume.VolumePlugin interface.
// Init is part of the volume.VolumePlugin interface.
func
(
plugin
*
flexVolumePlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
func
(
plugin
*
flexVolumePlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
plugin
.
host
=
host
// Hardwired 'success' as any errors from calling init() will be caught by NewFlexVolumePlugin()
// call the init script
return
nil
call
:=
plugin
.
NewDriverCall
(
initCmd
)
_
,
err
:=
call
.
Run
()
return
err
}
}
func
(
plugin
*
flexVolumePlugin
)
getExecutable
()
string
{
func
(
plugin
*
flexVolumePlugin
)
getExecutable
()
string
{
...
...
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