From 734b88e102d9f9f2574a00b9737152119dd4d980 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Mon, 21 Mar 2022 16:06:17 +0400 Subject: [PATCH] fix(v3): Added network name normalization in v3 parsing --- pkg/loader/compose/v3.go | 23 ++++++++++++--- script/test/fixtures/v3.0/docker-compose.yaml | 2 ++ script/test/fixtures/v3.0/output-k8s.json | 29 +++++++++++++++++++ script/test/fixtures/v3.0/output-os.json | 1 + 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/pkg/loader/compose/v3.go b/pkg/loader/compose/v3.go index cf4af85f..05a85bf7 100644 --- a/pkg/loader/compose/v3.go +++ b/pkg/loader/compose/v3.go @@ -439,7 +439,9 @@ func dockerComposeToKomposeMapping(composeObject *types.Config) (kobject.Kompose serviceConfig.StopGracePeriod = composeServiceConfig.StopGracePeriod.String() } - parseV3Network(&composeServiceConfig, &serviceConfig, composeObject) + if err := parseV3Network(&composeServiceConfig, &serviceConfig, composeObject); err != nil { + return kobject.KomposeObject{}, err + } if err := parseV3Resources(&composeServiceConfig, &serviceConfig); err != nil { return kobject.KomposeObject{}, err @@ -556,24 +558,37 @@ func resolveV3Context(inFile string, context string) string { return current } -func parseV3Network(composeServiceConfig *types.ServiceConfig, serviceConfig *kobject.ServiceConfig, composeObject *types.Config) { +func parseV3Network(composeServiceConfig *types.ServiceConfig, serviceConfig *kobject.ServiceConfig, composeObject *types.Config) error { if len(composeServiceConfig.Networks) == 0 { if defaultNetwork, ok := composeObject.Networks["default"]; ok { - serviceConfig.Network = append(serviceConfig.Network, defaultNetwork.Name) + normalizedNetworkName, err := normalizeNetworkNames(defaultNetwork.Name) + if err != nil { + return errors.Wrap(err, "Unable to normalize network name") + } + serviceConfig.Network = append(serviceConfig.Network, normalizedNetworkName) } } else { var alias = "" for key := range composeServiceConfig.Networks { alias = key netName := composeObject.Networks[alias].Name + // if Network Name Field is empty in the docker-compose definition // we will use the alias name defined in service config file if netName == "" { netName = alias } - serviceConfig.Network = append(serviceConfig.Network, netName) + + normalizedNetworkName, err := normalizeNetworkNames(netName) + if err != nil { + return errors.Wrap(err, "Unable to normalize network name") + } + + serviceConfig.Network = append(serviceConfig.Network, normalizedNetworkName) } } + + return nil } func parseV3Resources(composeServiceConfig *types.ServiceConfig, serviceConfig *kobject.ServiceConfig) error { diff --git a/script/test/fixtures/v3.0/docker-compose.yaml b/script/test/fixtures/v3.0/docker-compose.yaml index c7eef686..3c193cdc 100644 --- a/script/test/fixtures/v3.0/docker-compose.yaml +++ b/script/test/fixtures/v3.0/docker-compose.yaml @@ -17,7 +17,9 @@ services: networks: app: {} web: {} + normalized_network: {} networks: + normalized_network: app: external: name: app-network diff --git a/script/test/fixtures/v3.0/output-k8s.json b/script/test/fixtures/v3.0/output-k8s.json index c06aae0d..c3cdaf74 100644 --- a/script/test/fixtures/v3.0/output-k8s.json +++ b/script/test/fixtures/v3.0/output-k8s.json @@ -55,6 +55,7 @@ "creationTimestamp": null, "labels": { "io.kompose.network/app-network": "true", + "io.kompose.network/normalized-network": "true", "io.kompose.network/web-network": "true", "io.kompose.service": "foo" } @@ -107,6 +108,34 @@ ] } }, + { + "kind": "NetworkPolicy", + "apiVersion": "networking.k8s.io/v1", + "metadata": { + "name": "normalized-network", + "creationTimestamp": null + }, + "spec": { + "podSelector": { + "matchLabels": { + "io.kompose.network/normalized-network": "true" + } + }, + "ingress": [ + { + "from": [ + { + "podSelector": { + "matchLabels": { + "io.kompose.network/normalized-network": "true" + } + } + } + ] + } + ] + } + }, { "kind": "NetworkPolicy", "apiVersion": "networking.k8s.io/v1", diff --git a/script/test/fixtures/v3.0/output-os.json b/script/test/fixtures/v3.0/output-os.json index aa4cffd0..c7163fa0 100644 --- a/script/test/fixtures/v3.0/output-os.json +++ b/script/test/fixtures/v3.0/output-os.json @@ -75,6 +75,7 @@ "creationTimestamp": null, "labels": { "io.kompose.network/app-network": "true", + "io.kompose.network/normalized-network": "true", "io.kompose.network/web-network": "true", "io.kompose.service": "foo" }