# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in conformance 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.

# Configuration for resource types.
resources:
  # Kubernetes specific configuration.
  - kind: "CustomResourceDefinition"
    plural: "customresourcedefinitions"
    group: "apiextensions.k8s.io"
    version: "v1"
    clusterScoped: true
    builtin: true
    proto: "k8s.io.apiextensions_apiserver.pkg.apis.apiextensions.v1.CustomResourceDefinition"
    protoPackage: "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"

  - kind: "MutatingWebhookConfiguration"
    plural: "mutatingwebhookconfigurations"
    group: "admissionregistration.k8s.io"
    version: "v1"
    clusterScoped: true
    builtin: true
    specless: true
    proto: "k8s.io.api.admissionregistration.v1.MutatingWebhookConfiguration"
    protoPackage: "k8s.io/api/admissionregistration/v1"

  - kind: "ValidatingWebhookConfiguration"
    plural: "validatingwebhookconfigurations"
    group: "admissionregistration.k8s.io"
    version: "v1"
    clusterScoped: true
    builtin: true
    specless: true
    proto: "k8s.io.api.admissionregistration.v1.ValidatingWebhookConfiguration"
    protoPackage: "k8s.io/api/admissionregistration/v1"

  - kind: "Deployment"
    plural: "deployments"
    group: "apps"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.apps.v1.DeploymentSpec"
    protoPackage: "k8s.io/api/apps/v1"

  - kind: "Endpoints"
    plural: "endpoints"
    version: "v1"
    builtin: true
    specless: true
    proto: "k8s.io.api.core.v1.Endpoints"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "EndpointSlice"
    plural: "endpointslices"
    group: "discovery.k8s.io"
    version: "v1"
    builtin: true
    specless: true
    proto: "k8s.io.api.discovery.v1.EndpointSlice"
    protoPackage: "k8s.io/api/discovery/v1"

  - kind: "Namespace"
    plural: "namespaces"
    version: "v1"
    clusterScoped: true
    builtin: true
    proto: "k8s.io.api.core.v1.NamespaceSpec"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "Node"
    plural: "nodes"
    version: "v1"
    clusterScoped: true
    builtin: true
    proto: "k8s.io.api.core.v1.NodeSpec"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "Pod"
    plural: "pods"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.core.v1.PodSpec"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "DaemonSet"
    plural: "daemonsets"
    group: "apps"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.apps.v1.DaemonSetSpec"
    protoPackage: "k8s.io/api/apps/v1"

  - kind: "StatefulSet"
    plural: "statefulsets"
    group: "apps"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.apps.v1.StatefulSetSpec"
    protoPackage: "k8s.io/api/apps/v1"

  - kind: "Secret"
    plural: "secrets"
    version: "v1"
    builtin: true
    specless: true
    proto: "k8s.io.api.core.v1.Secret"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "Service"
    plural: "services"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.core.v1.ServiceSpec"
    protoPackage: "k8s.io/api/core/v1"
    statusProto: "k8s.io.api.core.v1.ServiceStatus"
    statusProtoPackage: "k8s.io/api/core/v1"

  - kind: "ConfigMap"
    plural: "configmaps"
    version: "v1"
    builtin: true
    specless: true
    proto: "k8s.io.api.core.v1.ConfigMap"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "ServiceAccount"
    plural: "serviceaccounts"
    version: "v1"
    builtin: true
    specless: true
    proto: "k8s.io.api.core.v1.ServiceAccount"
    protoPackage: "k8s.io/api/core/v1"

  - kind: "CertificateSigningRequest"
    plural: "certificatesigningrequests"
    group: "certificates.k8s.io"
    version: "v1"
    builtin: true
    clusterScoped: true
    proto: "k8s.io.api.certificates.v1.CertificateSigningRequestSpec"
    protoPackage: "k8s.io/api/certificates/v1"
    statusProto: "k8s.io.api.certificates.v1.CertificateSigningRequestStatus"
    statusProtoPackage: "k8s.io/api/certificates/v1"

  - kind: "ClusterTrustBundle"
    plural: "clustertrustbundles"
    group: "certificates.k8s.io"
    version: "v1beta1"
    builtin: true
    clusterScoped: true
    proto: "k8s.io.api.certificates.v1beta1.ClusterTrustBundleSpec"
    protoPackage: "k8s.io/api/certificates/v1beta1"

  - kind: "Ingress"
    plural: "ingresses"
    group: "networking.k8s.io"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.networking.v1.IngressSpec"
    protoPackage: "k8s.io/api/networking/v1"
    statusProto: "k8s.io.api.networking.v1.IngressStatus"
    statusProtoPackage: "k8s.io/api/networking/v1"

  - kind: "IngressClass"
    plural: "ingressclasses"
    group: "networking.k8s.io"
    version: "v1"
    builtin: true
    clusterScoped: true
    proto: "k8s.io.api.networking.v1.IngressClassSpec"
    protoPackage: "k8s.io/api/networking/v1"

  - kind: "Lease"
    plural: "leases"
    group: "coordination.k8s.io"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.coordination.v1.LeaseSpec"
    protoPackage: "k8s.io/api/coordination/v1"

  - kind: "HorizontalPodAutoscaler"
    plural: "horizontalpodautoscalers"
    group: "autoscaling"
    version: "v2"
    builtin: true
    proto: "k8s.io.api.autoscaling.v2.HorizontalPodAutoscalerSpec"
    protoPackage: "k8s.io/api/autoscaling/v2"
    statusProto: "k8s.io.api.autoscaling.v2.HorizontalPodAutoscalerStatus"
    statusProtoPackage: "k8s.io/api/autoscaling/v2"

  - kind: "PodDisruptionBudget"
    plural: "poddisruptionbudgets"
    group: "policy"
    version: "v1"
    builtin: true
    proto: "k8s.io.api.policy.v1.PodDisruptionBudgetSpec"
    protoPackage: "k8s.io/api/policy/v1"
    statusProto: "k8s.io.api.policy.v1.PodDisruptionBudgetStatus"
    statusProtoPackage: "k8s.io/api/policy/v1"
#
#  - kind: "ClusterRole"
#    plural: "clusterroles"
#    group: "rbac.authorization.k8s.io"
#    version: "v1"
#    builtin: true

  - kind: "GatewayClass"
    plural: "gatewayclasses"
    group: "gateway.networking.k8s.io"
    version: "v1beta1"
    versionAliases:
    - "v1alpha2"
    - "v1"
    clusterScoped: true
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"
    proto: "k8s.io.gateway_api.api.v1alpha1.GatewayClassSpec"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.GatewayClassStatus"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"

  - kind: "Gateway"
    identifier: KubernetesGateway
    plural: "gateways"
    group: "gateway.networking.k8s.io"
    version: "v1beta1"
    versionAliases:
    - "v1alpha2"
    - "v1"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"
    proto: "k8s.io.gateway_api.api.v1alpha1.GatewaySpec"
    validate: "validation.EmptyValidate"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.GatewayStatus"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"

  - kind: "HTTPRoute"
    plural: "httproutes"
    group: "gateway.networking.k8s.io"
    version: "v1beta1"
    versionAliases:
    - "v1alpha2"
    - "v1"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"
    proto: "k8s.io.gateway_api.api.v1alpha1.HTTPRouteSpec"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.HTTPRouteStatus"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"

  - kind: "InferencePool"
    plural: "inferencepools"
    group: "inference.networking.k8s.io"
    version: "v1"
    protoPackage: "sigs.k8s.io/gateway-api-inference-extension/api/v1"
    proto: "x-k8s.io.gateway-api-inference-extension.api.v1.InferencePoolSpec"
    statusProto: "x-k8s.io.gateway-api-inference-extension.api.v1.InferencePoolStatus"
    statusProtoPackage: "sigs.k8s.io/gateway-api-inference-extension/api/v1"
    
  - kind: "GRPCRoute"
    plural: "grpcroutes"
    group: "gateway.networking.k8s.io"
    version: "v1"
    versionAliases:
    - "v1alpha2"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1"
    proto: "k8s.io.gateway_api.api.v1alpha1.GRPCRouteSpec"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.GRPCRouteStatus"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1"

  - kind: "TCPRoute"
    plural: "tcproutes"
    group: "gateway.networking.k8s.io"
    version: "v1alpha2"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1alpha2"
    proto: "k8s.io.gateway_api.api.v1alpha1.TCPRouteSpec"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.TCPRouteStatus"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1alpha2"

  - kind: "TLSRoute"
    plural: "tlsroutes"
    group: "gateway.networking.k8s.io"
    version: "v1alpha2"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1alpha2"
    proto: "k8s.io.gateway_api.api.v1alpha1.TLSRouteSpec"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1alpha2"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.TLSRouteStatus"

  - kind: "UDPRoute"
    plural: "udproutes"
    group: "gateway.networking.k8s.io"
    version: "v1alpha2"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1alpha2"
    proto: "k8s.io.gateway_api.api.v1alpha1.UDPRouteSpec"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1alpha2"
    statusProto: "k8s.io.gateway_api.api.v1alpha1.UDPRouteStatus"

  - kind: "ReferenceGrant"
    plural: "referencegrants"
    group: "gateway.networking.k8s.io"
    version: "v1beta1"
    versionAliases:
    - "v1alpha2"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1beta1"
    proto: "k8s.io.gateway_api.api.v1alpha1.ReferenceGrantSpec"

  - kind: "XBackendTrafficPolicy"
    plural: "xbackendtrafficpolicies"
    group: "gateway.networking.x-k8s.io"
    version: "v1alpha1"
    protoPackage: "sigs.k8s.io/gateway-api/apisx/v1alpha1"
    proto: "k8s.io.gateway_api.apix.v1alpha1.BackendTrafficPolicySpec"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apisx/v1alpha1"
    statusProto: PolicyStatus

  - kind: "BackendTLSPolicy"
    plural: "backendtlspolicies"
    group: "gateway.networking.k8s.io"
    version: "v1"
    protoPackage: "sigs.k8s.io/gateway-api/apis/v1"
    proto: "k8s.io.gateway_api.api.v1.BackendTLSPolicySpec"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apis/v1"
    statusProto: "k8s.io.gateway_api.api.v1.PolicyStatus"

  - kind: "XListenerSet"
    identifier: XListenerSet
    plural: "xlistenersets"
    group: "gateway.networking.x-k8s.io"
    version: "v1alpha1"
    protoPackage: "sigs.k8s.io/gateway-api/apisx/v1alpha1"
    proto: "ListenerSetSpec"
    statusProtoPackage: "sigs.k8s.io/gateway-api/apisx/v1alpha1"
    statusProto: "ListenerSetStatus"

  ## Istio resources
  - kind: "VirtualService"
    plural: "virtualservices"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.VirtualService"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "Gateway"
    plural: "gateways"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.Gateway"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "ServiceEntry"
    plural: "serviceentries"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.ServiceEntry"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.networking.v1alpha3.ServiceEntryStatus"
    statusProtoPackage: "istio.io/api/networking/v1alpha3"

  - kind: "WorkloadEntry"
    plural: "workloadentries"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.WorkloadEntry"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "WorkloadGroup"
    plural: "workloadgroups"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.WorkloadGroup"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: DestinationRule
    plural: "destinationrules"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.DestinationRule"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "EnvoyFilter"
    plural: "envoyfilters"
    group: "networking.istio.io"
    version: "v1alpha3"
    proto: "istio.networking.v1alpha3.EnvoyFilter"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "Sidecar"
    plural: "sidecars"
    group: "networking.istio.io"
    version: "v1"
    versionAliases:
      - "v1alpha3"
      - "v1beta1"
    proto: "istio.networking.v1alpha3.Sidecar"
    protoPackage: "istio.io/api/networking/v1alpha3"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "ProxyConfig"
    plural: "proxyconfigs"
    group: "networking.istio.io"
    version: "v1beta1"
    proto: "istio.networking.v1beta1.ProxyConfig"
    protoPackage: "istio.io/api/networking/v1beta1"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "MeshConfig"
    plural: "meshconfigs"
    group: ""
    version: "v1alpha1"
    proto: "istio.mesh.v1alpha1.MeshConfig"
    protoPackage: "istio.io/api/mesh/v1alpha1"
    synthetic: true

  - kind: "MeshNetworks"
    plural: "meshnetworks"
    group: ""
    version: "v1alpha1"
    proto: "istio.mesh.v1alpha1.MeshNetworks"
    protoPackage: "istio.io/api/mesh/v1alpha1"
    synthetic: true

  - kind: AuthorizationPolicy
    plural: "authorizationpolicies"
    group: "security.istio.io"
    version: "v1"
    versionAliases:
      - "v1beta1"
    proto: "istio.security.v1beta1.AuthorizationPolicy"
    protoPackage: "istio.io/api/security/v1beta1"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: RequestAuthentication
    plural: "requestauthentications"
    group: "security.istio.io"
    version: "v1"
    versionAliases:
      - "v1beta1"
    proto: "istio.security.v1beta1.RequestAuthentication"
    protoPackage: "istio.io/api/security/v1beta1"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: PeerAuthentication
    plural: "peerauthentications"
    group: "security.istio.io"
    version: "v1"
    versionAliases:
    - "v1beta1"
    proto: "istio.security.v1beta1.PeerAuthentication"
    protoPackage: "istio.io/api/security/v1beta1"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "Telemetry"
    plural: "telemetries"
    group: "telemetry.istio.io"
    version: "v1"
    versionAliases:
    - "v1alpha1"
    proto: "istio.telemetry.v1alpha1.Telemetry"
    protoPackage: "istio.io/api/telemetry/v1alpha1"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"

  - kind: "WasmPlugin"
    plural: "wasmplugins"
    group: "extensions.istio.io"
    version: "v1alpha1"
    proto: "istio.extensions.v1alpha1.WasmPlugin"
    protoPackage: "istio.io/api/extensions/v1alpha1"
    statusProto: "istio.meta.v1alpha1.IstioStatus"
    statusProtoPackage: "istio.io/api/meta/v1alpha1"
