pkg/k8s/policyhelper/kind.go (54 lines of code) (raw):
package policyhelper
import (
corev1 "k8s.io/api/core/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
gwv1 "sigs.k8s.io/gateway-api/apis/v1"
gwv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
anv1alpha1 "github.com/aws/aws-application-networking-k8s/pkg/apis/applicationnetworking/v1alpha1"
)
type GroupKind struct {
Group string
Kind string
}
func ObjToGroupKind(obj client.Object) GroupKind {
switch obj.(type) {
case *gwv1.Gateway:
return GroupKind{gwv1.GroupName, "Gateway"}
case *gwv1.HTTPRoute:
return GroupKind{gwv1.GroupName, "HTTPRoute"}
case *gwv1.GRPCRoute:
return GroupKind{gwv1alpha2.GroupName, "GRPCRoute"}
case *gwv1alpha2.TCPRoute:
return GroupKind{gwv1alpha2.GroupName, "TCPRoute"}
case *anv1alpha1.ServiceExport:
return GroupKind{anv1alpha1.GroupName, "ServiceExport"}
case *corev1.Service:
return GroupKind{corev1.GroupName, "Service"}
default:
return GroupKind{}
}
}
func TargetRefGroupKind(tr *TargetRef) GroupKind {
return GroupKind{
Group: string(tr.Group),
Kind: string(tr.Kind),
}
}
func GroupKindToObj(gk GroupKind) (client.Object, bool) {
switch gk {
case GroupKind{gwv1.GroupName, "Gateway"}:
return &gwv1.Gateway{}, true
case GroupKind{gwv1.GroupName, "HTTPRoute"}:
return &gwv1.HTTPRoute{}, true
case GroupKind{gwv1alpha2.GroupName, "GRPCRoute"}:
return &gwv1.GRPCRoute{}, true
case GroupKind{gwv1alpha2.GroupName, "TCPRoute"}:
return &gwv1alpha2.TCPRoute{}, true
case GroupKind{corev1.GroupName, "Service"}:
return &corev1.Service{}, true
case GroupKind{anv1alpha1.GroupName, "ServiceExport"}:
return &anv1alpha1.ServiceExport{}, true
default:
return nil, false
}
}