blob: 53deb202fcee1729830d7e299404de81e557df24 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package kubernetes
import (
"net/url"
v1 "k8s.io/api/core/v1"
"knative.dev/pkg/apis"
)
// TODO: retrieve the cluster domain from the /etc/resolve inside the pod or from the Platform CRD - will be addressed by KOGITO-9198
var defaultClusterDomain = "svc.cluster.local"
// retrieveServiceHost function that based on the service name, namespace and eventually the nodeport, will provide the service URI
func retrieveServiceHost(service *v1.Service) string {
namespace := service.Namespace
if len(namespace) == 0 {
namespace = "default"
}
// TODO: Retrieve the cluster domain or use the default one
return service.Name + "." + namespace + "." + defaultClusterDomain
}
// RetrieveServiceURL function that based on the service name, namespace and eventually the nodeport, will provide the service URI
func RetrieveServiceURL(service *v1.Service) (*apis.URL, error) {
url := url.URL{
Scheme: "http",
Host: retrieveServiceHost(service),
Path: service.Name}
return apis.ParseURL(url.String())
}
// GetServicePortByName returns a pointer to the ServicePort within the given Service.
// If none found, returns nil.
// It also returns the position where the service port por was found, -1 if none.
func GetServicePortByName(name string, service *v1.Service) (*v1.ServicePort, int) {
if service == nil {
return nil, -1
}
for i, servicePort := range service.Spec.Ports {
if name == servicePort.Name {
return &servicePort, i
}
}
return nil, -1
}