Add missing pvname
This adds the ability to use the pvname as part of the pathpattern. The defaultpath is now a string that is parsed the same way as the user specified pathpattern.
This commit is contained in:
parent
c2a2d5d544
commit
b48ecac166
|
|
@ -235,10 +235,10 @@ To disable leader election, define an env variable named ENABLE_LEADER_ELECTION
|
||||||
**_Parameters:_**
|
**_Parameters:_**
|
||||||
|
|
||||||
| Name | Description | Default |
|
| Name | Description | Default |
|
||||||
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------: |
|
| --------------- | ------------------------------------------------------------ | :----------------------------------------------------------: |
|
||||||
| onDelete | If it exists and has a delete value, delete the directory, if it exists and has a retain value, save the directory. | will be archived with name on the share: `archived-<volume.Name>` |
|
| onDelete | If it exists and has a delete value, delete the directory, if it exists and has a retain value, save the directory. | will be archived with name on the share: `archived-<volume.Name>` |
|
||||||
| archiveOnDelete | If it exists and has a false value, delete the directory. if `onDelete` exists, `archiveOnDelete` will be ignored. | will be archived with name on the share: `archived-<volume.Name>` |
|
| archiveOnDelete | If it exists and has a false value, delete the directory. if `onDelete` exists, `archiveOnDelete` will be ignored. | will be archived with name on the share: `archived-<volume.Name>` |
|
||||||
| pathPattern | Specifies a template for creating a directory path via PVC metadata's such as labels, annotations, name or namespace. To specify metadata use `${.PVC.<metadata>}`. Example: If folder should be named like `<pvc-namespace>-<pvc-name>`, use `${.PVC.namespace}-${.PVC.name}` as pathPattern. | n/a |
|
| pathPattern | Specifies a template for creating a directory path via PVC metadata's such as labels, annotations, name or namespace. To specify metadata use `${.PVC.<metadata>}`. Example: If folder should be named like `<pvc-namespace>-<pvc-name>`, use `${.PVC.namespace}-${.PVC.name}` as pathPattern. The default pattern will add the pvname to folder, which will result in a unique folder name, combing namespace, name and an unique id. | will create a folder witht the pattern: `${.PVC.namespace}-${.PVC.name}-${.PVC.pvname}` |
|
||||||
|
|
||||||
This is `deploy/class.yaml` which defines the NFS subdir external provisioner's Kubernetes Storage Class:
|
This is `deploy/class.yaml` which defines the NFS subdir external provisioner's Kubernetes Storage Class:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,8 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
provisionerNameKey = "PROVISIONER_NAME"
|
provisionerNameKey = "PROVISIONER_NAME"
|
||||||
|
defaultPathPattern = "${.PVC.namespace}-${.PVC.name}-${.PVC.pvname}"
|
||||||
|
mountPath = "/persistentvolumes"
|
||||||
)
|
)
|
||||||
|
|
||||||
type nfsProvisioner struct {
|
type nfsProvisioner struct {
|
||||||
|
|
@ -73,10 +75,6 @@ func (meta *pvcMetadata) stringParser(str string) string {
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
mountPath = "/persistentvolumes"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ controller.Provisioner = &nfsProvisioner{}
|
var _ controller.Provisioner = &nfsProvisioner{}
|
||||||
|
|
||||||
func (p *nfsProvisioner) Provision(ctx context.Context, options controller.ProvisionOptions) (*v1.PersistentVolume, controller.ProvisioningState, error) {
|
func (p *nfsProvisioner) Provision(ctx context.Context, options controller.ProvisionOptions) (*v1.PersistentVolume, controller.ProvisioningState, error) {
|
||||||
|
|
@ -85,31 +83,27 @@ func (p *nfsProvisioner) Provision(ctx context.Context, options controller.Provi
|
||||||
}
|
}
|
||||||
glog.V(4).Infof("nfs provisioner: VolumeOptions %v", options)
|
glog.V(4).Infof("nfs provisioner: VolumeOptions %v", options)
|
||||||
|
|
||||||
pvcNamespace := options.PVC.Namespace
|
|
||||||
pvcName := options.PVC.Name
|
|
||||||
|
|
||||||
pvName := strings.Join([]string{pvcNamespace, pvcName, options.PVName}, "-")
|
|
||||||
|
|
||||||
metadata := &pvcMetadata{
|
metadata := &pvcMetadata{
|
||||||
data: map[string]string{
|
data: map[string]string{
|
||||||
"name": pvcName,
|
"name": options.PVC.Name,
|
||||||
"namespace": pvcNamespace,
|
"namespace": options.PVC.Namespace,
|
||||||
|
"pvname": options.PVName,
|
||||||
},
|
},
|
||||||
labels: options.PVC.Labels,
|
labels: options.PVC.Labels,
|
||||||
annotations: options.PVC.Annotations,
|
annotations: options.PVC.Annotations,
|
||||||
}
|
}
|
||||||
|
|
||||||
fullPath := filepath.Join(mountPath, pvName)
|
|
||||||
path := filepath.Join(p.path, pvName)
|
|
||||||
|
|
||||||
pathPattern, exists := options.StorageClass.Parameters["pathPattern"]
|
pathPattern, exists := options.StorageClass.Parameters["pathPattern"]
|
||||||
if exists {
|
if !exists {
|
||||||
customPath := metadata.stringParser(pathPattern)
|
pathPattern = defaultPathPattern
|
||||||
if customPath != "" {
|
|
||||||
path = filepath.Join(p.path, customPath)
|
|
||||||
fullPath = filepath.Join(mountPath, customPath)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parsedPath := metadata.stringParser(pathPattern)
|
||||||
|
if parsedPath == "" {
|
||||||
|
return nil, controller.ProvisioningFinished, errors.New("unable to parse pathPattern: " + pathPattern)
|
||||||
}
|
}
|
||||||
|
path := filepath.Join(p.path, parsedPath)
|
||||||
|
fullPath := filepath.Join(mountPath, parsedPath)
|
||||||
|
|
||||||
glog.V(4).Infof("creating path %s", fullPath)
|
glog.V(4).Infof("creating path %s", fullPath)
|
||||||
if err := os.MkdirAll(fullPath, 0o777); err != nil {
|
if err := os.MkdirAll(fullPath, 0o777); err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue