feat: support external traffic policy

Signed-off-by: AhmedGrati <ahmedgrati1999@gmail.com>
This commit is contained in:
AhmedGrati
2023-02-13 14:59:46 +01:00
parent f2aeb70e59
commit 6be6fdd165
18 changed files with 650 additions and 6 deletions
+7
View File
@@ -386,6 +386,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
if service.ServiceType == "LoadBalancer" {
svcs := o.CreateLBService(name, service)
for _, svc := range svcs {
svc.Spec.ExternalTrafficPolicy = corev1.ServiceExternalTrafficPolicyType(service.ServiceExternalTrafficPolicy)
objects = append(objects, svc)
}
if len(svcs) > 1 {
@@ -398,10 +399,16 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
if service.ExposeService != "" {
objects = append(objects, o.initRoute(name, service, svc.Spec.Ports[0].Port))
}
if service.ServiceExternalTrafficPolicy != "" && svc.Spec.Type != corev1.ServiceTypeNodePort {
log.Warningf("External Traffic Policy is ignored for the service %v of type %v", name, service.ServiceType)
}
}
} else if service.ServiceType == "Headless" {
svc := o.CreateHeadlessService(name, service)
objects = append(objects, svc)
if service.ServiceExternalTrafficPolicy != "" {
log.Warningf("External Traffic Policy is ignored for the service %v of type Headless", name)
}
}
err := o.UpdateKubernetesObjects(name, service, opt, &objects)
@@ -20,6 +20,7 @@ import (
"os"
"path/filepath"
"reflect"
"strings"
"testing"
"github.com/kubernetes/kompose/pkg/kobject"
@@ -56,6 +57,16 @@ func newServiceConfig() kobject.ServiceConfig {
}
}
func newServiceConfigWithExternalTrafficPolicy() kobject.ServiceConfig {
loadBalancerServiceType := string(corev1.ServiceTypeLoadBalancer)
return kobject.ServiceConfig{
Name: "app",
Port: []kobject.Ports{{HostPort: 123, ContainerPort: 456}},
ServiceType: loadBalancerServiceType,
ServiceExternalTrafficPolicy: "local",
}
}
func TestOpenShiftUpdateKubernetesObjects(t *testing.T) {
t.Log("Test case: Testing o.UpdateKubernetesObjects()")
var object []runtime.Object
@@ -425,3 +436,27 @@ func TestRecreateStrategyWithVolumesPresent(t *testing.T) {
}
}
}
func TestServiceExternalTrafficPolicy(t *testing.T) {
groupName := "pod_group"
komposeObject := kobject.KomposeObject{
ServiceConfigs: map[string]kobject.ServiceConfig{"app": newServiceConfigWithExternalTrafficPolicy()},
}
o := OpenShift{}
objs, err := o.Transform(komposeObject, kobject.ConvertOptions{ServiceGroupMode: groupName})
if err != nil {
t.Error(errors.Wrap(err, "k.Transform failed"))
}
for _, obj := range objs {
if service, ok := obj.(*corev1.Service); ok {
serviceExternalTrafficPolicy := string(service.Spec.ExternalTrafficPolicy)
if serviceExternalTrafficPolicy != strings.ToLower(string(corev1.ServiceExternalTrafficPolicyTypeLocal)) {
t.Errorf("Expected Local as external lifecycle policy, got %v", serviceExternalTrafficPolicy)
}
serviceType := service.Spec.Type
if serviceType != corev1.ServiceTypeLoadBalancer {
t.Errorf("Expected LoadBalancer as service type, got %v", serviceType)
}
}
}
}