Skip to content

Commit

Permalink
Merge pull request kubernetes-retired#306 from humblec/block-rwm
Browse files Browse the repository at this point in the history
Validate claim access mode and act.
  • Loading branch information
wongma7 authored Aug 18, 2017
2 parents 51001c2 + 820537b commit 9ec6189
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,13 @@ func NewGlusterBlockProvisioner(client kubernetes.Interface, id string) controll

var _ controller.Provisioner = &glusterBlockProvisioner{}

func (p *glusterBlockProvisioner) GetAccessModes() []v1.PersistentVolumeAccessMode {
return []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
v1.ReadOnlyMany,
}
}

// Provision creates a storage asset and returns a PV object representing it.
func (p *glusterBlockProvisioner) Provision(options controller.VolumeOptions) (*v1.PersistentVolume, error) {

Expand All @@ -158,6 +165,10 @@ func (p *glusterBlockProvisioner) Provision(options controller.VolumeOptions) (*
return nil, fmt.Errorf("glusterblock: claim Selector is not supported")
}

if !util.AccessModesContainedInAll(p.GetAccessModes(), options.PVC.Spec.AccessModes) {
return nil, fmt.Errorf("invalid AccessModes %v: only AccessModes %v are supported", options.PVC.Spec.AccessModes, p.GetAccessModes())
}

glog.V(4).Infof("glusterblock: VolumeOptions %v", options)

//Parse Class Parameters
Expand Down
22 changes: 22 additions & 0 deletions lib/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ limitations under the License.

package util

import "k8s.io/api/core/v1"

// RoundUpSize calculates how many allocation units are needed to accommodate
// a volume of given size. E.g. when user wants 1500MiB volume, while AWS EBS
// allocates volumes in gibibyte-sized chunks,
Expand All @@ -24,3 +26,23 @@ package util
func RoundUpSize(volumeSizeBytes int64, allocationUnitBytes int64) int64 {
return (volumeSizeBytes + allocationUnitBytes - 1) / allocationUnitBytes
}

// AccessModesContains returns whether the requested mode is contained by modes
func AccessModesContains(modes []v1.PersistentVolumeAccessMode, mode v1.PersistentVolumeAccessMode) bool {
for _, m := range modes {
if m == mode {
return true
}
}
return false
}

// AccessModesContainedInAll returns whether all of the requested modes are contained by modes
func AccessModesContainedInAll(indexedModes []v1.PersistentVolumeAccessMode, requestedModes []v1.PersistentVolumeAccessMode) bool {
for _, mode := range requestedModes {
if !AccessModesContains(indexedModes, mode) {
return false
}
}
return true
}

0 comments on commit 9ec6189

Please sign in to comment.