From 1975c32740d1860eebf0519a875ce0b2df70cfa7 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Wed, 8 Nov 2017 04:14:28 +0300 Subject: [PATCH] Set service volume size with kompose.volume.size label (#235) 1. Copy labels from compose to kobject 2. If kompose.volume.size is set on service level, use it Internal API changes: - Add PVCSize to kobject Volumes struct - Pass default volume size as CreatePVC() param --- pkg/kobject/kobject.go | 1 + pkg/loader/compose/v3.go | 3 ++- pkg/transformer/kubernetes/kubernetes.go | 16 ++++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg/kobject/kobject.go b/pkg/kobject/kobject.go index 8c025ae3..95f2214a 100644 --- a/pkg/kobject/kobject.go +++ b/pkg/kobject/kobject.go @@ -142,4 +142,5 @@ type Volumes struct { Container string // Mountpath Mode string // access mode for volume PVCName string // name of PVC + PVCSize string // PVC size } diff --git a/pkg/loader/compose/v3.go b/pkg/loader/compose/v3.go index 55288156..107ccbe3 100644 --- a/pkg/loader/compose/v3.go +++ b/pkg/loader/compose/v3.go @@ -217,7 +217,7 @@ func dockerComposeToKomposeMapping(composeObject *types.Config) (kobject.Kompose LoadedFrom: "compose", } - // Step 2. Parse through the object and conver it to kobject.KomposeObject! + // Step 2. Parse through the object and convert it to kobject.KomposeObject! // Here we "clean up" the service configuration so we return something that includes // all relevant information as well as avoid the unsupported keys as well. for _, composeServiceConfig := range composeObject.Services { @@ -240,6 +240,7 @@ func dockerComposeToKomposeMapping(composeObject *types.Config) (kobject.Kompose serviceConfig.ContainerName = composeServiceConfig.ContainerName serviceConfig.Command = composeServiceConfig.Entrypoint serviceConfig.Args = composeServiceConfig.Command + serviceConfig.Labels = composeServiceConfig.Labels // // Deploy keys diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index eb53871c..ebe0b509 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -267,8 +267,8 @@ func (k *Kubernetes) initIngress(name string, service kobject.ServiceConfig, por } // CreatePVC initializes PersistentVolumeClaim -func (k *Kubernetes) CreatePVC(name string, mode string) (*api.PersistentVolumeClaim, error) { - size, err := resource.ParseQuantity(PVCRequestSize) +func (k *Kubernetes) CreatePVC(name string, mode string, size string) (*api.PersistentVolumeClaim, error) { + volsize, err := resource.ParseQuantity(size) if err != nil { return nil, errors.Wrap(err, "resource.ParseQuantity failed, Error parsing size") } @@ -285,7 +285,7 @@ func (k *Kubernetes) CreatePVC(name string, mode string) (*api.PersistentVolumeC Spec: api.PersistentVolumeClaimSpec{ Resources: api.ResourceRequirements{ Requests: api.ResourceList{ - api.ResourceStorage: size, + api.ResourceStorage: volsize, }, }, }, @@ -448,7 +448,15 @@ func (k *Kubernetes) ConfigVolumes(name string, service kobject.ServiceConfig) ( volsource = k.ConfigPVCVolumeSource(volumeName, readonly) if volume.VFrom == "" { - createdPVC, err := k.CreatePVC(volumeName, volume.Mode) + defaultSize := PVCRequestSize + + for key, value := range service.Labels { + if key == "kompose.volume.size" { + defaultSize = value + } + } + + createdPVC, err := k.CreatePVC(volumeName, volume.Mode, defaultSize) if err != nil { return nil, nil, nil, errors.Wrap(err, "k.CreatePVC failed")