---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.14.0
  name: networktopologies.networktopology.diktyo.x-k8s.io
spec:
  group: networktopology.diktyo.x-k8s.io
  names:
    kind: NetworkTopology
    listKind: NetworkTopologyList
    plural: networktopologies
    shortNames:
    - nt
    singular: networktopology
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: NetworkTopology defines network costs in the cluster between
          regions and zones
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: NetworkTopologySpec defines the zones and regions of the
              cluster.
            properties:
              configmapName:
                description: ConfigmapName to be used for cost calculation
                type: string
              weights:
                description: The manual defined weights of the cluster
                items:
                  description: WeightInfo contains information about all network costs
                    for a given algorithm.
                  properties:
                    name:
                      description: Algorithm Name for network cost calculation (e.g.,
                        userDefined)
                      type: string
                    topologyList:
                      description: TopologyList owns Costs between origins
                      items:
                        description: TopologyInfo contains information about network
                          costs for a particular Topology Key.
                        properties:
                          originList:
                            description: OriginList for a particular origin.
                            items:
                              description: OriginInfo contains information about network
                                costs for a particular Origin.
                              properties:
                                costList:
                                  description: Costs for the particular origin.
                                  items:
                                    description: CostInfo contains information about
                                      networkCosts.
                                    properties:
                                      bandwidthAllocated:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: Bandwidth allocated between origin
                                          and destination.
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      bandwidthCapacity:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: Bandwidth capacity between origin
                                          and destination.
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      destination:
                                        description: Name of the destination (e.g.,
                                          Region Name, Zone Name).
                                        type: string
                                      networkCost:
                                        description: Network Cost between origin and
                                          destination (e.g., Dijkstra shortest path,
                                          etc)
                                        format: int64
                                        minimum: 0
                                        type: integer
                                    required:
                                    - destination
                                    - networkCost
                                    type: object
                                  type: array
                                origin:
                                  description: Name of the origin (e.g., Region Name,
                                    Zone Name).
                                  type: string
                              required:
                              - origin
                              type: object
                            type: array
                          topologyKey:
                            description: Topology key (e.g., "topology.kubernetes.io/region",
                              "topology.kubernetes.io/zone").
                            type: string
                        required:
                        - originList
                        - topologyKey
                        type: object
                      type: array
                  required:
                  - name
                  - topologyList
                  type: object
                type: array
            required:
            - configmapName
            - weights
            type: object
          status:
            description: NetworkTopologyStatus defines the observed use.
            properties:
              nodeCount:
                description: The total number of nodes in the cluster
                format: int64
                minimum: 0
                type: integer
              weightCalculationTime:
                description: The calculation time for the weights in the network topology
                  CRD
                format: date-time
                type: string
            type: object
        type: object
    served: true
    storage: true
