forked from LaconicNetwork/kompose
Test Headless Services
This commit is contained in:
parent
5a62864ef9
commit
8f2dd5b03b
27
pkg/testutils/kubernetes.go
Normal file
27
pkg/testutils/kubernetes.go
Normal file
@ -0,0 +1,27 @@
|
||||
package testutils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
)
|
||||
|
||||
// CheckForHeadless is helper function for tests.
|
||||
// It checks if all Services in objects are Headless Services and if there is at least one such Services.
|
||||
func CheckForHeadless(objects []runtime.Object) error {
|
||||
serviceCreated := false
|
||||
for _, obj := range objects {
|
||||
if svc, ok := obj.(*api.Service); ok {
|
||||
serviceCreated = true
|
||||
// Check if it is a headless services
|
||||
if svc.Spec.ClusterIP != "None" {
|
||||
return errors.New("this is not a Headless services")
|
||||
}
|
||||
}
|
||||
}
|
||||
if !serviceCreated {
|
||||
return errors.New("no Service created")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -282,7 +282,11 @@ func (k *Kubernetes) CreateService(name string, service kobject.ServiceConfig, o
|
||||
return svc
|
||||
}
|
||||
|
||||
// CreateHeadlessService creates a k8s headless service
|
||||
// CreateHeadlessService creates a k8s headless service.
|
||||
// Thi is used for docker-compose services without ports. For such services we can't create regular Kubernetes Service.
|
||||
// and without Service Pods can't find each other using DNS names.
|
||||
// Instead of regular Kubernetes Service we create Headless Service. DNS of such service points directly to Pod IP address.
|
||||
// You can find more about Headless Services in Kubernetes documentation https://kubernetes.io/docs/user-guide/services/#headless-services
|
||||
func (k *Kubernetes) CreateHeadlessService(name string, service kobject.ServiceConfig, objects []runtime.Object) *api.Service {
|
||||
svc := k.InitSvc(name, service)
|
||||
|
||||
|
||||
@ -24,6 +24,8 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/kubernetes-incubator/kompose/pkg/kobject"
|
||||
"github.com/kubernetes-incubator/kompose/pkg/testutils"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
)
|
||||
@ -161,3 +163,22 @@ func TestIsDir(t *testing.T) {
|
||||
t.Errorf("Error removing the temporary directory during cleanup: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// TestServiceWithoutPort this tests if Headless Service is created for services without Port.
|
||||
func TestServiceWithoutPort(t *testing.T) {
|
||||
service := kobject.ServiceConfig{
|
||||
ContainerName: "name",
|
||||
Image: "image",
|
||||
}
|
||||
|
||||
komposeObject := kobject.KomposeObject{
|
||||
ServiceConfigs: map[string]kobject.ServiceConfig{"app": service},
|
||||
}
|
||||
k := Kubernetes{}
|
||||
|
||||
objects := k.Transform(komposeObject, kobject.ConvertOptions{CreateD: true, Replicas: 1})
|
||||
if err := testutils.CheckForHeadless(objects); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@ import (
|
||||
|
||||
"github.com/kubernetes-incubator/kompose/pkg/kobject"
|
||||
"github.com/kubernetes-incubator/kompose/pkg/testutils"
|
||||
"github.com/kubernetes-incubator/kompose/pkg/transformer/kubernetes"
|
||||
)
|
||||
|
||||
func newServiceConfig() kobject.ServiceConfig {
|
||||
@ -309,3 +310,22 @@ func TestInitBuildConfig(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestServiceWithoutPort this tests if Headless Service is created for services without Port.
|
||||
func TestServiceWithoutPort(t *testing.T) {
|
||||
service := kobject.ServiceConfig{
|
||||
ContainerName: "name",
|
||||
Image: "image",
|
||||
}
|
||||
|
||||
komposeObject := kobject.KomposeObject{
|
||||
ServiceConfigs: map[string]kobject.ServiceConfig{"app": service},
|
||||
}
|
||||
o := OpenShift{Kubernetes: kubernetes.Kubernetes{}}
|
||||
|
||||
objects := o.Transform(komposeObject, kobject.ConvertOptions{CreateD: true, Replicas: 1})
|
||||
if err := testutils.CheckForHeadless(objects); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user