fix(v3): Added network name normalization in v3 parsing

This commit is contained in:
Sergey Shevchenko 2022-03-21 16:06:17 +04:00
parent b796ec0222
commit 734b88e102
4 changed files with 51 additions and 4 deletions

View File

@ -439,7 +439,9 @@ func dockerComposeToKomposeMapping(composeObject *types.Config) (kobject.Kompose
serviceConfig.StopGracePeriod = composeServiceConfig.StopGracePeriod.String() 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 { if err := parseV3Resources(&composeServiceConfig, &serviceConfig); err != nil {
return kobject.KomposeObject{}, err return kobject.KomposeObject{}, err
@ -556,24 +558,37 @@ func resolveV3Context(inFile string, context string) string {
return current 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 len(composeServiceConfig.Networks) == 0 {
if defaultNetwork, ok := composeObject.Networks["default"]; ok { 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 { } else {
var alias = "" var alias = ""
for key := range composeServiceConfig.Networks { for key := range composeServiceConfig.Networks {
alias = key alias = key
netName := composeObject.Networks[alias].Name netName := composeObject.Networks[alias].Name
// if Network Name Field is empty in the docker-compose definition // if Network Name Field is empty in the docker-compose definition
// we will use the alias name defined in service config file // we will use the alias name defined in service config file
if netName == "" { if netName == "" {
netName = alias 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 { func parseV3Resources(composeServiceConfig *types.ServiceConfig, serviceConfig *kobject.ServiceConfig) error {

View File

@ -17,7 +17,9 @@ services:
networks: networks:
app: {} app: {}
web: {} web: {}
normalized_network: {}
networks: networks:
normalized_network:
app: app:
external: external:
name: app-network name: app-network

View File

@ -55,6 +55,7 @@
"creationTimestamp": null, "creationTimestamp": null,
"labels": { "labels": {
"io.kompose.network/app-network": "true", "io.kompose.network/app-network": "true",
"io.kompose.network/normalized-network": "true",
"io.kompose.network/web-network": "true", "io.kompose.network/web-network": "true",
"io.kompose.service": "foo" "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", "kind": "NetworkPolicy",
"apiVersion": "networking.k8s.io/v1", "apiVersion": "networking.k8s.io/v1",

View File

@ -75,6 +75,7 @@
"creationTimestamp": null, "creationTimestamp": null,
"labels": { "labels": {
"io.kompose.network/app-network": "true", "io.kompose.network/app-network": "true",
"io.kompose.network/normalized-network": "true",
"io.kompose.network/web-network": "true", "io.kompose.network/web-network": "true",
"io.kompose.service": "foo" "io.kompose.service": "foo"
} }