mirror of https://github.com/k3s-io/k3s
Merge pull request #58287 from dg-i/ceph-provisioner-userid
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Add keyring parameter in Ceph RBD provisioner **What this PR does / why we need it**: userSecretName is a mandatory parameter for the kubernetes.io/rbd storage provisioner. Ceph RBD persistent volumes however don't need the secretRef. If no secret is given, a local keyring file (/etc/ceph/keyring) on the node will be used. This behaviour should also work with the storage provisioner. If no userSecretName parameter is given, no secretRef should be created in the resulting persistent volume. **Special notes for your reviewer**: **Release note**: ```release-note Add "keyring" parameter for Ceph RBD provisioner ```pull/6/head
commit
117780b908
|
@ -20,6 +20,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
dstrings "strings"
|
||||
|
||||
"github.com/golang/glog"
|
||||
|
@ -585,6 +586,7 @@ func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) {
|
|||
secret := ""
|
||||
secretName := ""
|
||||
secretNamespace := ""
|
||||
keyring := ""
|
||||
imageFormat := rbdImageFormat2
|
||||
fstype := ""
|
||||
|
||||
|
@ -609,6 +611,8 @@ func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) {
|
|||
secretName = v
|
||||
case "usersecretnamespace":
|
||||
secretNamespace = v
|
||||
case "keyring":
|
||||
keyring = v
|
||||
case "imageformat":
|
||||
imageFormat = v
|
||||
case "imagefeatures":
|
||||
|
@ -642,8 +646,8 @@ func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) {
|
|||
if len(r.Mon) < 1 {
|
||||
return nil, fmt.Errorf("missing Ceph monitors")
|
||||
}
|
||||
if secretName == "" {
|
||||
return nil, fmt.Errorf("missing user secret name")
|
||||
if secretName == "" && keyring == "" {
|
||||
return nil, fmt.Errorf("must specify either keyring or user secret name")
|
||||
}
|
||||
if r.adminId == "" {
|
||||
r.adminId = rbdDefaultAdminId
|
||||
|
@ -666,9 +670,19 @@ func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) {
|
|||
glog.Infof("successfully created rbd image %q", image)
|
||||
pv := new(v1.PersistentVolume)
|
||||
metav1.SetMetaDataAnnotation(&pv.ObjectMeta, volumehelper.VolumeDynamicallyCreatedByKey, "rbd-dynamic-provisioner")
|
||||
rbd.SecretRef = new(v1.SecretReference)
|
||||
rbd.SecretRef.Name = secretName
|
||||
rbd.SecretRef.Namespace = secretNamespace
|
||||
|
||||
if secretName != "" {
|
||||
rbd.SecretRef = new(v1.SecretReference)
|
||||
rbd.SecretRef.Name = secretName
|
||||
rbd.SecretRef.Namespace = secretNamespace
|
||||
} else {
|
||||
var filePathRegex = regexp.MustCompile(`^(?:/[^/!;` + "`" + ` ]+)+$`)
|
||||
if keyring != "" && !filePathRegex.MatchString(keyring) {
|
||||
return nil, fmt.Errorf("keyring field must contain a path to a file")
|
||||
}
|
||||
rbd.Keyring = keyring
|
||||
}
|
||||
|
||||
rbd.RadosUser = r.Id
|
||||
rbd.FSType = fstype
|
||||
pv.Spec.PersistentVolumeSource.RBD = rbd
|
||||
|
|
Loading…
Reference in New Issue