mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 19:01:49 +00:00
Use Gid when provisioning Gluster Volumes.
BUG # https://github.com/openshift/origin/issues/11556 Signed-off-by: Humble Chirammal <hchiramm@redhat.com>
This commit is contained in:
parent
122a228b63
commit
7a0d219d12
@ -29,6 +29,7 @@ go_library(
|
||||
"//pkg/util/strings:go_default_library",
|
||||
"//pkg/volume:go_default_library",
|
||||
"//pkg/volume/util:go_default_library",
|
||||
"//pkg/volume/util/volumehelper:go_default_library",
|
||||
"//vendor:github.com/golang/glog",
|
||||
"//vendor:github.com/heketi/heketi/client/api/go-client",
|
||||
"//vendor:github.com/heketi/heketi/pkg/glusterfs/api",
|
||||
|
@ -18,9 +18,12 @@ package glusterfs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
dstrings "strings"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
gcli "github.com/heketi/heketi/client/api/go-client"
|
||||
@ -35,6 +38,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/util/strings"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
volutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
"k8s.io/kubernetes/pkg/volume/util/volumehelper"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
@ -60,6 +64,8 @@ const (
|
||||
volPrefix = "vol_"
|
||||
dynamicEpSvcPrefix = "glusterfs-dynamic-"
|
||||
replicaCount = 3
|
||||
gidMax = 600000
|
||||
gidMin = 2000
|
||||
durabilityType = "replicate"
|
||||
secretKeyName = "key" // key name used in secret
|
||||
annGlusterURL = "glusterfs.kubernetes.io/url"
|
||||
@ -481,6 +487,8 @@ func (d *glusterfsVolumeDeleter) Delete() error {
|
||||
|
||||
func (r *glusterfsVolumeProvisioner) Provision() (*api.PersistentVolume, error) {
|
||||
var err error
|
||||
var reqGid int64
|
||||
gidRandomizer := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
if r.options.PVC.Spec.Selector != nil {
|
||||
glog.V(4).Infof("glusterfs: not able to parse your claim Selector")
|
||||
return nil, fmt.Errorf("glusterfs: not able to parse your claim Selector")
|
||||
@ -492,9 +500,9 @@ func (r *glusterfsVolumeProvisioner) Provision() (*api.PersistentVolume, error)
|
||||
return nil, err
|
||||
}
|
||||
r.provisioningConfig = *cfg
|
||||
|
||||
glog.V(4).Infof("glusterfs: creating volume with configuration %+v", r.provisioningConfig)
|
||||
glusterfs, sizeGB, err := r.CreateVolume()
|
||||
reqGid = gidMin + gidRandomizer.Int63n(gidMax)
|
||||
glusterfs, sizeGB, err := r.CreateVolume(reqGid)
|
||||
if err != nil {
|
||||
glog.Errorf("glusterfs: create volume err: %v.", err)
|
||||
return nil, fmt.Errorf("glusterfs: create volume err: %v.", err)
|
||||
@ -506,13 +514,15 @@ func (r *glusterfsVolumeProvisioner) Provision() (*api.PersistentVolume, error)
|
||||
if len(pv.Spec.AccessModes) == 0 {
|
||||
pv.Spec.AccessModes = r.plugin.GetAccessModes()
|
||||
}
|
||||
sGid := strconv.FormatInt(reqGid, 10)
|
||||
pv.Annotations = map[string]string{volumehelper.VolumeGidAnnotationKey: sGid}
|
||||
pv.Spec.Capacity = api.ResourceList{
|
||||
api.ResourceName(api.ResourceStorage): resource.MustParse(fmt.Sprintf("%dGi", sizeGB)),
|
||||
}
|
||||
return pv, nil
|
||||
}
|
||||
|
||||
func (p *glusterfsVolumeProvisioner) CreateVolume() (r *api.GlusterfsVolumeSource, size int, err error) {
|
||||
func (p *glusterfsVolumeProvisioner) CreateVolume(reqGid int64) (r *api.GlusterfsVolumeSource, size int, err error) {
|
||||
capacity := p.options.PVC.Spec.Resources.Requests[api.ResourceName(api.ResourceStorage)]
|
||||
volSizeBytes := capacity.Value()
|
||||
sz := int(volume.RoundUpSize(volSizeBytes, 1024*1024*1024))
|
||||
@ -526,7 +536,7 @@ func (p *glusterfsVolumeProvisioner) CreateVolume() (r *api.GlusterfsVolumeSourc
|
||||
glog.Errorf("glusterfs: failed to create glusterfs rest client")
|
||||
return nil, 0, fmt.Errorf("failed to create glusterfs REST client, REST server authentication failed")
|
||||
}
|
||||
volumeReq := &gapi.VolumeCreateRequest{Size: sz, Durability: gapi.VolumeDurabilityInfo{Type: durabilityType, Replicate: gapi.ReplicaDurability{Replica: replicaCount}}}
|
||||
volumeReq := &gapi.VolumeCreateRequest{Size: sz, Gid: reqGid, Durability: gapi.VolumeDurabilityInfo{Type: durabilityType, Replicate: gapi.ReplicaDurability{Replica: replicaCount}}}
|
||||
volume, err := cli.VolumeCreate(volumeReq)
|
||||
if err != nil {
|
||||
glog.Errorf("glusterfs: error creating volume %v ", err)
|
||||
|
Loading…
Reference in New Issue
Block a user