mirror of
https://github.com/netbirdio/kubernetes-operator.git
synced 2026-05-22 17:11:40 -07:00
This change adds SPDX license headers to all files and eforces it with the linter. Signed-off-by: Philip Laine <philip.laine@gmail.com>
67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package gatewayutil
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"k8s.io/apimachinery/pkg/types"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
gwv1 "sigs.k8s.io/gateway-api/apis/v1"
|
|
|
|
nbv1alpha1 "github.com/netbirdio/kubernetes-operator/api/v1alpha1"
|
|
)
|
|
|
|
func GetParentGateway(ctx context.Context, k8sClient client.Client, parent gwv1.ParentReference, namespace, controllerName string) (*gwv1.Gateway, error) {
|
|
if parent.Namespace != nil {
|
|
namespace = string(*parent.Namespace)
|
|
}
|
|
gw := &gwv1.Gateway{}
|
|
err := k8sClient.Get(ctx, types.NamespacedName{Namespace: namespace, Name: string(parent.Name)}, gw)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
gwc := &gwv1.GatewayClass{}
|
|
err = k8sClient.Get(ctx, client.ObjectKey{Name: string(gw.Spec.GatewayClassName)}, gwc)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if string(gwc.Spec.ControllerName) != controllerName {
|
|
return nil, nil
|
|
}
|
|
|
|
// TODO (phillebaba): Enforce allowed routes in gateway.
|
|
|
|
return gw, nil
|
|
}
|
|
|
|
func GetGatewayNetworkRouter(ctx context.Context, k8sClient client.Client, gw *gwv1.Gateway) (*nbv1alpha1.NetworkRouter, error) {
|
|
netRouterName, err := GetNetworkRouterName(gw.Spec.Listeners)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
netRouter := &nbv1alpha1.NetworkRouter{}
|
|
err = k8sClient.Get(ctx, types.NamespacedName{Namespace: gw.Namespace, Name: netRouterName}, netRouter)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return netRouter, nil
|
|
}
|
|
|
|
func GetNetworkRouterName(listeners []gwv1.Listener) (string, error) {
|
|
if len(listeners) > 1 {
|
|
return "", errors.New("netbird Gateway only supports a single listener")
|
|
}
|
|
group, kind, ok := strings.Cut(string(listeners[0].Protocol), "/")
|
|
if !ok {
|
|
return "", fmt.Errorf("invalid protocol %s, expected gateway.netbird.io/NetworkRouter", listeners[0].Protocol)
|
|
}
|
|
if group != "gateway.netbird.io" || kind != "NetworkRouter" {
|
|
return "", fmt.Errorf("invalid group %s and kind %s, expected gateway.netbird.io/NetworkRouter", group, kind)
|
|
}
|
|
return string(listeners[0].Name), nil
|
|
}
|