From 2632bdd5e0507ee156fefe443643125b63416531 Mon Sep 17 00:00:00 2001 From: Wei Wei Date: Mon, 15 May 2017 12:18:56 +0800 Subject: [PATCH] storageclass ceph add imageformat parameter --- pkg/volume/rbd/rbd.go | 15 +++++++++++++-- pkg/volume/rbd/rbd_util.go | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/volume/rbd/rbd.go b/pkg/volume/rbd/rbd.go index 3163cb8b597..d11b93ba551 100644 --- a/pkg/volume/rbd/rbd.go +++ b/pkg/volume/rbd/rbd.go @@ -51,8 +51,10 @@ var _ volume.DeletableVolumePlugin = &rbdPlugin{} var _ volume.ProvisionableVolumePlugin = &rbdPlugin{} const ( - rbdPluginName = "kubernetes.io/rbd" - secretKeyName = "key" // key name used in secret + rbdPluginName = "kubernetes.io/rbd" + secretKeyName = "key" // key name used in secret + rbdImageFormat1 = "1" + rbdImageFormat2 = "2" ) func (plugin *rbdPlugin) Init(host volume.VolumeHost) error { @@ -267,6 +269,7 @@ func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { adminSecretNamespace := "default" secretName := "" secret := "" + imageFormat := "" for k, v := range r.options.Parameters { switch dstrings.ToLower(k) { @@ -287,11 +290,18 @@ func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { r.Pool = v case "usersecretname": secretName = v + case "imageformat": + imageFormat = v default: return nil, fmt.Errorf("invalid option %q for volume plugin %s", k, r.plugin.GetPluginName()) } } // sanity check + if imageFormat != rbdImageFormat1 && imageFormat != rbdImageFormat2 { + return nil, fmt.Errorf("invalid ceph imageformat %s, expecting %s or %s", + imageFormat, rbdImageFormat1, rbdImageFormat2) + } + r.imageFormat = imageFormat if adminSecretName == "" { return nil, fmt.Errorf("missing Ceph admin secret name") } @@ -384,6 +394,7 @@ type rbdMounter struct { adminSecret string adminId string mountOptions []string + imageFormat string } var _ volume.Mounter = &rbdMounter{} diff --git a/pkg/volume/rbd/rbd_util.go b/pkg/volume/rbd/rbd_util.go index a78ccd3ac97..b868103670a 100644 --- a/pkg/volume/rbd/rbd_util.go +++ b/pkg/volume/rbd/rbd_util.go @@ -357,7 +357,7 @@ func (util *RBDUtil) CreateImage(p *rbdVolumeProvisioner) (r *v1.RBDVolumeSource mon := p.Mon[i%l] glog.V(4).Infof("rbd: create %s size %s using mon %s, pool %s id %s key %s", p.rbdMounter.Image, volSz, mon, p.rbdMounter.Pool, p.rbdMounter.adminId, p.rbdMounter.adminSecret) output, err = p.rbdMounter.plugin.execCommand("rbd", - []string{"create", p.rbdMounter.Image, "--size", volSz, "--pool", p.rbdMounter.Pool, "--id", p.rbdMounter.adminId, "-m", mon, "--key=" + p.rbdMounter.adminSecret, "--image-format", "1"}) + []string{"create", p.rbdMounter.Image, "--size", volSz, "--pool", p.rbdMounter.Pool, "--id", p.rbdMounter.adminId, "-m", mon, "--key=" + p.rbdMounter.adminSecret, "--image-format", p.rbdMounter.imageFormat}) if err == nil { break } else {