diff --git a/docs/user-guide.md b/docs/user-guide.md index 8387d3b7b2..d27e715a79 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -400,4 +400,8 @@ If the Docker Compose file has a volume specified for a service, the Deployment If the Docker Compose file has service name with `_` in it (eg.`web_service`), then it will be replaced by `-` and the service name will be renamed accordingly (eg.`web-service`). Kompose does this because "Kubernetes" doesn't allow `_` in object name. -Please note that changing service name might break some `docker-compose` files. \ No newline at end of file +Please note that changing service name might break some `docker-compose` files. + +#### Warning about Labels + +`kompose.service.type` label should be defined with `ports` only, otherwise `kompose` will fail. \ No newline at end of file diff --git a/pkg/loader/compose/compose.go b/pkg/loader/compose/compose.go index 77ce6297a6..0806fc61a3 100644 --- a/pkg/loader/compose/compose.go +++ b/pkg/loader/compose/compose.go @@ -363,6 +363,10 @@ func (c *Compose) LoadFile(files []string) (kobject.KomposeObject, error) { } } + err1 := checkLabelsPorts(len(serviceConfig.Port), composeServiceConfig.Labels["kompose.service.type"], name) + if err1 != nil { + return kobject.KomposeObject{}, errors.Wrap(err, err1.Error()) + } // convert compose labels to annotations serviceConfig.Annotations = map[string]string(composeServiceConfig.Labels) serviceConfig.CPUQuota = int64(composeServiceConfig.CPUQuota) @@ -402,3 +406,10 @@ func handleServiceType(ServiceType string) (string, error) { func normalizeServiceNames(svcName string) string { return strings.Replace(svcName, "_", "-", -1) } + +func checkLabelsPorts(noOfPort int, labels string, svcName string) error { + if noOfPort == 0 && labels == "NodePort" || labels == "LoadBalancer" { + return errors.Errorf("%s defined in service %s with no ports present. Issues may occur when bringing up artifacts.", labels, svcName) + } + return nil +} diff --git a/pkg/loader/compose/compose_test.go b/pkg/loader/compose/compose_test.go index 6960f4af77..6c54c5cfaf 100644 --- a/pkg/loader/compose/compose_test.go +++ b/pkg/loader/compose/compose_test.go @@ -286,3 +286,25 @@ func TestNormalizeServiceNames(t *testing.T) { } } } + +func TestCheckLabelsPorts(t *testing.T) { + testCases := []struct { + name string + noOfPort int + labels string + svcName string + }{ + {"ports is defined", 1, "NodePort", "foo"}, + {"ports is not defined", 0, "NodePort", "foo"}, + } + + var err error + for _, testcase := range testCases { + t.Log(testcase.name) + err = checkLabelsPorts(testcase.noOfPort, testcase.labels, testcase.svcName) + if err != nil { + t.Log(err) + } + + } +}