diff --git a/api/v1/runtimecomponent_types.go b/api/v1/runtimecomponent_types.go index 9c875478..746e6e5e 100644 --- a/api/v1/runtimecomponent_types.go +++ b/api/v1/runtimecomponent_types.go @@ -765,6 +765,20 @@ func (cr *RuntimeComponent) GetManageTLS() *bool { return cr.Spec.ManageTLS } +func (cr *RuntimeComponent) GetManagedPort() int { + if cr.GetService() != nil && cr.GetService().GetPort() != 0 { + return int(cr.GetService().GetPort()) + } + return 8080 +} + +func (cr *RuntimeComponent) GetManagedScheme() corev1.URIScheme { + if cr.GetManageTLS() == nil || *cr.GetManageTLS() { + return corev1.URISchemeHTTPS + } + return corev1.URISchemeHTTP +} + // GetDeployment returns deployment settings func (cr *RuntimeComponent) GetDeployment() common.BaseComponentDeployment { if cr.Spec.Deployment == nil { @@ -1107,7 +1121,7 @@ func (cr *RuntimeComponent) Initialize() { } if cr.Spec.Service.Port == 0 { - cr.Spec.Service.Port = 8080 + cr.Spec.Service.Port = int32(cr.GetManagedPort()) } // If TargetPorts on Serviceports are not set, default them to the Port value in the CR diff --git a/common/common.go b/common/common.go index a8f750e3..10b7213f 100644 --- a/common/common.go +++ b/common/common.go @@ -11,8 +11,8 @@ func GetDefaultMicroProfileStartupProbe(ba BaseComponent) *corev1.Probe { ProbeHandler: corev1.ProbeHandler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/health/started", - Port: intstr.FromInt(int(ba.GetService().GetPort())), - Scheme: "HTTPS", + Port: intstr.FromInt(ba.GetManagedPort()), + Scheme: ba.GetManagedScheme(), }, }, PeriodSeconds: 10, @@ -27,8 +27,8 @@ func GetDefaultMicroProfileReadinessProbe(ba BaseComponent) *corev1.Probe { ProbeHandler: corev1.ProbeHandler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/health/ready", - Port: intstr.FromInt(int(ba.GetService().GetPort())), - Scheme: "HTTPS", + Port: intstr.FromInt(ba.GetManagedPort()), + Scheme: ba.GetManagedScheme(), }, }, InitialDelaySeconds: 10, @@ -44,8 +44,8 @@ func GetDefaultMicroProfileLivenessProbe(ba BaseComponent) *corev1.Probe { ProbeHandler: corev1.ProbeHandler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/health/live", - Port: intstr.FromInt(int(ba.GetService().GetPort())), - Scheme: "HTTPS", + Port: intstr.FromInt(ba.GetManagedPort()), + Scheme: ba.GetManagedScheme(), }, }, InitialDelaySeconds: 60, @@ -59,3 +59,53 @@ func GetDefaultMicroProfileLivenessProbe(ba BaseComponent) *corev1.Probe { func GetComponentNameLabel(ba BaseComponent) string { return ba.GetGroupName() + "/name" } + +func CustomizeProbeDefaults(config *corev1.Probe, defaultProbe *corev1.Probe) *corev1.Probe { + probe := defaultProbe + if config.ProbeHandler.Exec != nil { + probe.ProbeHandler.Exec = config.ProbeHandler.Exec + } + if config.ProbeHandler.GRPC != nil { + probe.ProbeHandler.GRPC = config.ProbeHandler.GRPC + } + if config.ProbeHandler.HTTPGet != nil { + if probe.ProbeHandler.HTTPGet == nil { + probe.ProbeHandler.HTTPGet = &corev1.HTTPGetAction{} + } + probe.ProbeHandler.HTTPGet.Port = config.ProbeHandler.HTTPGet.Port + if config.ProbeHandler.HTTPGet.Host != "" { + probe.ProbeHandler.HTTPGet.Host = config.ProbeHandler.HTTPGet.Host + } + if config.ProbeHandler.HTTPGet.Path != "" { + probe.ProbeHandler.HTTPGet.Path = config.ProbeHandler.HTTPGet.Path + } + if config.ProbeHandler.HTTPGet.Scheme != "" { + probe.ProbeHandler.HTTPGet.Scheme = config.ProbeHandler.HTTPGet.Scheme + } + if len(config.ProbeHandler.HTTPGet.HTTPHeaders) > 0 { + probe.ProbeHandler.HTTPGet.HTTPHeaders = config.ProbeHandler.HTTPGet.HTTPHeaders + } + } + if config.ProbeHandler.TCPSocket != nil { + probe.ProbeHandler.TCPSocket = config.ProbeHandler.TCPSocket + } + if config.InitialDelaySeconds != 0 { + probe.InitialDelaySeconds = config.InitialDelaySeconds + } + if config.TimeoutSeconds != 0 { + probe.TimeoutSeconds = config.TimeoutSeconds + } + if config.PeriodSeconds != 0 { + probe.PeriodSeconds = config.PeriodSeconds + } + if config.SuccessThreshold != 0 { + probe.SuccessThreshold = config.SuccessThreshold + } + if config.FailureThreshold != 0 { + probe.FailureThreshold = config.FailureThreshold + } + if config.TerminationGracePeriodSeconds != nil { + probe.TerminationGracePeriodSeconds = config.TerminationGracePeriodSeconds + } + return probe +} diff --git a/common/types.go b/common/types.go index c9232ad6..8ca37850 100644 --- a/common/types.go +++ b/common/types.go @@ -257,6 +257,8 @@ type BaseComponent interface { GetTopologySpreadConstraints() BaseComponentTopologySpreadConstraints GetSecurityContext() *corev1.SecurityContext GetManageTLS() *bool + GetManagedPort() int + GetManagedScheme() corev1.URIScheme GetDisableServiceLinks() *bool GetTolerations() []corev1.Toleration GetDNS() BaseComponentDNS diff --git a/utils/utils.go b/utils/utils.go index 3d016372..51ab5e33 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -310,34 +310,8 @@ func customizeProbe(config *corev1.Probe, defaultProbeCallback func(ba common.Ba return nil } - // Probe handler is defined in config so use probe as is - if config.ProbeHandler != (corev1.ProbeHandler{}) { - return config - } - // Probe handler is not defined so use default values for the probe if values not set in probe config - return CustomizeProbeDefaults(config, defaultProbeCallback(ba)) -} - -func CustomizeProbeDefaults(config *corev1.Probe, defaultProbe *corev1.Probe) *corev1.Probe { - probe := defaultProbe - if config.InitialDelaySeconds != 0 { - probe.InitialDelaySeconds = config.InitialDelaySeconds - } - if config.TimeoutSeconds != 0 { - probe.TimeoutSeconds = config.TimeoutSeconds - } - if config.PeriodSeconds != 0 { - probe.PeriodSeconds = config.PeriodSeconds - } - if config.SuccessThreshold != 0 { - probe.SuccessThreshold = config.SuccessThreshold - } - if config.FailureThreshold != 0 { - probe.FailureThreshold = config.FailureThreshold - } - - return probe + return common.CustomizeProbeDefaults(config, defaultProbeCallback(ba)) } // CustomizeNetworkPolicy configures the network policy. diff --git a/utils/utils_test.go b/utils/utils_test.go index 007a1945..a3d58bb8 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -156,7 +156,7 @@ func TestCustomizeService(t *testing.T) { CustomizeService(svc, runtime) testCS := []Test{ {"Service number of exposed ports", 1, len(svc.Spec.Ports)}, - {"Sercice first exposed port", runtime.Spec.Service.Port, svc.Spec.Ports[0].Port}, + {"Service first exposed port", runtime.Spec.Service.Port, svc.Spec.Ports[0].Port}, {"Service first exposed target port", intstr.FromInt(int(runtime.Spec.Service.Port)), svc.Spec.Ports[0].TargetPort}, {"Service type", *runtime.Spec.Service.Type, svc.Spec.Type}, {"Service selector", name, svc.Spec.Selector["app.kubernetes.io/instance"]}, @@ -195,7 +195,7 @@ func optionalNodePortFunctionalityTests() []Test { CustomizeService(svc, runtime) testCS := []Test{ {"Service number of exposed ports", 1, len(svc.Spec.Ports)}, - {"Sercice first exposed port", runtime.Spec.Service.Port, svc.Spec.Ports[0].Port}, + {"Service first exposed port", runtime.Spec.Service.Port, svc.Spec.Ports[0].Port}, {"Service first exposed target port", intstr.FromInt(int(runtime.Spec.Service.Port)), svc.Spec.Ports[0].TargetPort}, {"Service type", *runtime.Spec.Service.Type, svc.Spec.Type}, {"Service selector", name, svc.Spec.Selector["app.kubernetes.io/instance"]},