Add storageClassName label to pvc manifest(#1413)

This commit is contained in:
w4v3
2021-08-15 15:05:01 +08:00
committed by GitHub
parent 94bff75a15
commit b2dee807a2
7 changed files with 364 additions and 2 deletions
+10 -2
View File
@@ -498,7 +498,7 @@ func (k *Kubernetes) CreateSecrets(komposeObject kobject.KomposeObject) ([]*api.
}
// CreatePVC initializes PersistentVolumeClaim
func (k *Kubernetes) CreatePVC(name string, mode string, size string, selectorValue string) (*api.PersistentVolumeClaim, error) {
func (k *Kubernetes) CreatePVC(name string, mode string, size string, selectorValue string, storageClassName string) (*api.PersistentVolumeClaim, error) {
volSize, err := resource.ParseQuantity(size)
if err != nil {
return nil, errors.Wrap(err, "resource.ParseQuantity failed, Error parsing size")
@@ -533,6 +533,11 @@ func (k *Kubernetes) CreatePVC(name string, mode string, size string, selectorVa
} else {
pvc.Spec.AccessModes = []api.PersistentVolumeAccessMode{api.ReadWriteOnce}
}
if len(storageClassName) > 0 {
pvc.Spec.StorageClassName = &storageClassName
}
return pvc, nil
}
@@ -844,6 +849,7 @@ func (k *Kubernetes) ConfigVolumes(name string, service kobject.ServiceConfig) (
} else {
volsource = k.ConfigPVCVolumeSource(volumeName, readonly)
if volume.VFrom == "" {
var storageClassName string
defaultSize := PVCRequestSize
if k.Opt.PVCRequestSize != "" {
defaultSize = k.Opt.PVCRequestSize
@@ -854,11 +860,13 @@ func (k *Kubernetes) ConfigVolumes(name string, service kobject.ServiceConfig) (
for key, value := range service.Labels {
if key == "kompose.volume.size" {
defaultSize = value
} else if key == "kompose.volume.storage-class-name" {
storageClassName = value
}
}
}
createdPVC, err := k.CreatePVC(volumeName, volume.Mode, defaultSize, volume.SelectorValue)
createdPVC, err := k.CreatePVC(volumeName, volume.Mode, defaultSize, volume.SelectorValue, storageClassName)
if err != nil {
return nil, nil, nil, nil, errors.Wrap(err, "k.CreatePVC failed")
@@ -697,3 +697,15 @@ func TestServiceAccountNameOnMultipleContainers(t *testing.T) {
}
}
}
func TestCreatePVC(t *testing.T) {
storageClassName := "custom-storage-class-name"
k := Kubernetes{}
result, err := k.CreatePVC("", "", PVCRequestSize, "", storageClassName)
if err != nil {
t.Error(errors.Wrap(err, "k.CreatePVC failed"))
}
if *result.Spec.StorageClassName != storageClassName {
t.Errorf("Expected %s returned, got %s", storageClassName, *result.Spec.StorageClassName)
}
}