Add label support to named volumes in docker compose v3 to Kubernetes (#1083)
* Support read specific label (kompose.volume.size) from named volume and apply to kubernetes supported volume size * Fix the PVC size in log message when deploy Kubernetes * Skip creation of PersistentVolumeClaim if it is already created in the same kubernetes deploy * Add selector to PersistentVolumeClaim only when specific label (kompose.volume.selector) is used in named volume * Add test case to named-volume for the new labels
This commit is contained in:
@@ -422,11 +422,51 @@ func dockerComposeToKomposeMapping(composeObject *types.Config) (kobject.Kompose
|
||||
komposeObject.ServiceConfigs[normalizeServiceNames(name)] = serviceConfig
|
||||
}
|
||||
|
||||
handleVolume(&komposeObject)
|
||||
handleV3Volume(&komposeObject, &composeObject.Volumes)
|
||||
|
||||
return komposeObject, nil
|
||||
}
|
||||
|
||||
func handleV3Volume(komposeObject *kobject.KomposeObject, volumes *map[string]types.VolumeConfig) {
|
||||
for name := range komposeObject.ServiceConfigs {
|
||||
// retrieve volumes of service
|
||||
vols, err := retrieveVolume(name, *komposeObject)
|
||||
if err != nil {
|
||||
errors.Wrap(err, "could not retrieve vvolume")
|
||||
}
|
||||
for volName, vol := range vols {
|
||||
size, selector := getV3VolumeLabels(vol.VolumeName, volumes)
|
||||
if len(size) > 0 || len(selector) > 0 {
|
||||
// We can't assign value to struct field in map while iterating over it, so temporary variable `temp` is used here
|
||||
var temp = vols[volName]
|
||||
temp.PVCSize = size
|
||||
temp.SelectorValue = selector
|
||||
vols[volName] = temp
|
||||
}
|
||||
}
|
||||
// We can't assign value to struct field in map while iterating over it, so temporary variable `temp` is used here
|
||||
var temp = komposeObject.ServiceConfigs[name]
|
||||
temp.Volumes = vols
|
||||
komposeObject.ServiceConfigs[name] = temp
|
||||
}
|
||||
}
|
||||
|
||||
func getV3VolumeLabels(name string, volumes *map[string]types.VolumeConfig) (string, string) {
|
||||
size, selector := "", ""
|
||||
|
||||
if volume, ok := (*volumes)[name]; ok {
|
||||
for key, value := range volume.Labels {
|
||||
if key == "kompose.volume.size" {
|
||||
size = value
|
||||
} else if key == "kompose.volume.selector" {
|
||||
selector = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return size, selector
|
||||
}
|
||||
|
||||
func mergeComposeObject(oldCompose *types.Config, newCompose *types.Config) (*types.Config, error) {
|
||||
if oldCompose == nil || newCompose == nil {
|
||||
return nil, fmt.Errorf("Merge multiple compose error, compose config is nil")
|
||||
|
||||
Reference in New Issue
Block a user