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 (
optionKeyServiceAccountName
=
"kubernetes.io/serviceAccount.name"
attachCapability
=
"attach"
attachCapability
=
"attach"
selinuxRelabelCapability
=
"selinuxRelabel"
)
const
(
...
...
@@ -82,6 +83,11 @@ type DriverCall struct {
args
[]
string
}
type
driverCapabilities
struct
{
attach
bool
selinuxRelabel
bool
}
func
(
plugin
*
flexVolumePlugin
)
NewDriverCall
(
command
string
)
*
DriverCall
{
return
plugin
.
NewDriverCallWithTimeout
(
command
,
0
)
}
...
...
@@ -235,3 +241,23 @@ func handleCmdResponse(cmd string, output []byte) (*DriverStatus, error) {
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 {
return
volume
.
Attributes
{
ReadOnly
:
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 {
runner
exec
.
Interface
sync
.
Mutex
capabilities
*
driverCapabilities
unsupportedCommands
[]
string
}
...
...
@@ -64,44 +65,29 @@ func NewFlexVolumePlugin(pluginDir, name string) (volume.VolumePlugin, error) {
unsupportedCommands
:
[]
string
{},
}
// Check whether the plugin is attachable.
ok
,
err
:=
isAttachable
(
flexPlugin
)
// Retrieve driver reported capabilities
call
:=
flexPlugin
.
NewDriverCall
(
initCmd
)
ds
,
err
:=
call
.
Run
()
if
err
!=
nil
{
return
nil
,
err
}
if
ok
{
// Plugin supports attach/detach, so return flexVolumeAttachablePlugin
driverCaps
:=
ds
.
getDriverCapabilities
()
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
}
else
{
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.
func
(
plugin
*
flexVolumePlugin
)
Init
(
host
volume
.
VolumeHost
)
error
{
plugin
.
host
=
host
// call the init script
call
:=
plugin
.
NewDriverCall
(
initCmd
)
_
,
err
:=
call
.
Run
()
return
err
// Hardwired 'success' as any errors from calling init() will be caught by NewFlexVolumePlugin()
return
nil
}
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