Inline design updates
Signed-off-by: Deep Debroy <ddebroy@docker.com>
This commit is contained in:
parent
988632b197
commit
344a99aa5b
|
|
@ -179,6 +179,10 @@ type CSITranslator interface {
|
||||||
// by the `Driver` field in the CSI Source. The input PV object will not be modified.
|
// by the `Driver` field in the CSI Source. The input PV object will not be modified.
|
||||||
TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) {
|
TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) {
|
||||||
|
|
||||||
|
// TranslateInTreeVolumeToCSI takes an inline intree volume and will translate
|
||||||
|
// the in-tree volume source to a CSIPersistentVolumeSource
|
||||||
|
// A PV object containing the CSIPersistentVolumeSource in it's spec is returned
|
||||||
|
TranslateInTreeInlineVolumeToCSI(volume *v1.Volume (*v1.PersistentVolume, error) {
|
||||||
|
|
||||||
// IsMigratableByName tests whether there is Migration logic for the in-tree plugin
|
// IsMigratableByName tests whether there is Migration logic for the in-tree plugin
|
||||||
// for the given `pluginName`
|
// for the given `pluginName`
|
||||||
|
|
@ -187,11 +191,15 @@ type CSITranslator interface {
|
||||||
// GetCSINameFromIntreeName maps the name of a CSI driver to its in-tree version
|
// GetCSINameFromIntreeName maps the name of a CSI driver to its in-tree version
|
||||||
GetCSINameFromIntreeName(pluginName string) (string, error) {
|
GetCSINameFromIntreeName(pluginName string) (string, error) {
|
||||||
|
|
||||||
|
// GetAccessModeForVolume returns a reasonable access mode based on readonly flag
|
||||||
|
GetAccessModeForVolume(readOnly bool, pluginName string) (csi.VolumeCapability_AccessMode, error) {
|
||||||
|
|
||||||
|
// GetMountOptions returns a reasonable access mode based on readonly flag
|
||||||
|
GetMountOptions(pluginName string) (string) {
|
||||||
|
|
||||||
// IsPVMigratable tests whether there is Migration logic for the given Persistent Volume
|
// IsPVMigratable tests whether there is Migration logic for the given Persistent Volume
|
||||||
IsPVMigratable(pv *v1.PersistentVolume) bool {
|
IsPVMigratable(pv *v1.PersistentVolume) bool {
|
||||||
|
|
||||||
|
|
||||||
// IsInlineMigratable tests whether there is Migration logic for the given Inline Volume
|
// IsInlineMigratable tests whether there is Migration logic for the given Inline Volume
|
||||||
IsInlineMigratable(vol *v1.Volume) bool {
|
IsInlineMigratable(vol *v1.Volume) bool {
|
||||||
}
|
}
|
||||||
|
|
@ -237,15 +245,23 @@ with the in-tree plugin, the VolumeAttachment object becomes orphaned.
|
||||||
### In-line Volumes
|
### In-line Volumes
|
||||||
|
|
||||||
In-line controller calls are a special case because there is no PV. In this case
|
In-line controller calls are a special case because there is no PV. In this case
|
||||||
we will translate the volume source and copy it to the field
|
we will translate the in-line volume source into a CSIPersistentVolumeSource
|
||||||
VolumeAttachment.Spec.Source.VolumeAttachmentSource.InlineVolumeSource. The
|
and copy it to the field `VolumeAttachment.Spec.Source.VolumeAttachmentSource.InlineCSIVolumeSource`.
|
||||||
VolumeAttachment name must be made with the CSI Translated version of the
|
The VolumeAttachment name must be made with the CSI Translated version of the
|
||||||
VolumeSource in order for it to be discoverable by Detach and WaitForAttach
|
VolumeSource in order for it to be discoverable by Detach and WaitForAttach
|
||||||
(described in more detail below).
|
(described in more detail below).
|
||||||
|
|
||||||
The CSI Attacher will have to be modified to also check this location for a
|
The CSI Attacher will have to be modified to also check for `InlineCSIVolumeSource`
|
||||||
source as well as checking for the `pvName`. Only one of the two may be
|
besides the `PersistentVolumeName`. Only one of the two may be specified. If `PersistentVolumeName`
|
||||||
specified.
|
is empty and `InlineCSIVolumeSource` is set, the CSI Attacher will not look for
|
||||||
|
an associated PV in it's PV informer cache as it implies the inline volume scenario
|
||||||
|
(where no PVs are created).
|
||||||
|
|
||||||
|
The CSI Attacher will have access to most of the data it requires for handling in-line
|
||||||
|
volumes to pass to the CSI plugins from `InlineCSIVolumeSource`. However a few fields
|
||||||
|
require special handling due to the absence of a PV. Specifically, reasonable
|
||||||
|
`MountOptions` and `AccessModes` need to be determined by plugin-specific APIs:
|
||||||
|
`GetAccessModeForVolume` and `GetMountOptions`.
|
||||||
|
|
||||||
The new VolumeAttachmentSource API will look as such:
|
The new VolumeAttachmentSource API will look as such:
|
||||||
```
|
```
|
||||||
|
|
@ -278,6 +294,8 @@ Node name. We are able to get all this information for Detach and WaitForAttach
|
||||||
by translating the in-tree inline volume source to a CSI volume source before
|
by translating the in-tree inline volume source to a CSI volume source before
|
||||||
passing it to to the volume operations.
|
passing it to to the volume operations.
|
||||||
|
|
||||||
|
The translation logic for inline volumes needs to set things up
|
||||||
|
|
||||||
There is currently a race condition in in-tree inline volumes where if a pod
|
There is currently a race condition in in-tree inline volumes where if a pod
|
||||||
object is deleted and the ADC restarts we lose the information for the inline
|
object is deleted and the ADC restarts we lose the information for the inline
|
||||||
volume and will not be able to detach the volume. This is a known issue and we
|
volume and will not be able to detach the volume. This is a known issue and we
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue