---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.0
  name: trafficmanagerprofiles.networking.fleet.azure.com
spec:
  group: networking.fleet.azure.com
  names:
    categories:
    - fleet-networking
    kind: TrafficManagerProfile
    listKind: TrafficManagerProfileList
    plural: trafficmanagerprofiles
    shortNames:
    - tmp
    singular: trafficmanagerprofile
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .status.dnsName
      name: DNS-Name
      type: string
    - jsonPath: .status.conditions[?(@.type=='Programmed')].status
      name: Is-Programmed
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: |-
          TrafficManagerProfile is used to manage a simple Azure Traffic Manager Profile using cloud native way.
          https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview
        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: The desired state of TrafficManagerProfile.
            properties:
              monitorConfig:
                description: The endpoint monitoring settings of the Traffic Manager
                  profile.
                properties:
                  intervalInSeconds:
                    default: 30
                    description: |-
                      The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health
                      of each endpoint in this profile.
                      You can specify two values here: 30 seconds (normal probing) and 10 seconds (fast probing).
                    enum:
                    - 10
                    - 30
                    format: int64
                    type: integer
                  path:
                    default: /
                    description: The path relative to the endpoint domain name used
                      to probe for endpoint health.
                    type: string
                  port:
                    default: 80
                    description: The TCP port used to probe for endpoint health.
                    format: int64
                    type: integer
                  protocol:
                    default: HTTP
                    description: The protocol (HTTP, HTTPS or TCP) used to probe for
                      endpoint health.
                    enum:
                    - HTTP
                    - HTTPS
                    - TCP
                    type: string
                  timeoutInSeconds:
                    description: |-
                      The monitor timeout for endpoints in this profile. This is the time that Traffic Manager allows endpoints in this profile
                      to response to the health check.
                      * If the IntervalInSeconds is set to 30 seconds, then you can set the Timeout value between 5 and 10 seconds.
                        If no value is specified, it uses a default value of 10 seconds.
                      * If the IntervalInSeconds is set to 10 seconds, then you can set the Timeout value between 5 and 9 seconds.
                        If no Timeout value is specified, it uses a default value of 9 seconds.
                    format: int64
                    maximum: 10
                    minimum: 5
                    type: integer
                  toleratedNumberOfFailures:
                    default: 3
                    description: |-
                      The number of consecutive failed health check that Traffic Manager tolerates before declaring an endpoint in this profile
                      Degraded after the next failed health check.
                    format: int64
                    maximum: 9
                    minimum: 0
                    type: integer
                type: object
              resourceGroup:
                description: |-
                  The name of the resource group to contain the Azure Traffic Manager resource corresponding to this profile.
                  When this profile is created, updated, or deleted, the corresponding traffic manager with the same name will be created, updated, or deleted
                  in the specified resource group.
                  Reference link: https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules#microsoftresources
                maxLength: 90
                minLength: 1
                type: string
                x-kubernetes-validations:
                - message: resourceGroup is immutable
                  rule: self == oldSelf
            required:
            - resourceGroup
            type: object
          status:
            description: The observed status of TrafficManagerProfile.
            properties:
              conditions:
                description: Current profile status.
                items:
                  description: Condition contains details for one aspect of the current
                    state of this API Resource.
                  properties:
                    lastTransitionTime:
                      description: |-
                        lastTransitionTime is the last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        message is a human readable message indicating details about the transition.
                        This may be an empty string.
                      maxLength: 32768
                      type: string
                    observedGeneration:
                      description: |-
                        observedGeneration represents the .metadata.generation that the condition was set based upon.
                        For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
                        with respect to the current state of the instance.
                      format: int64
                      minimum: 0
                      type: integer
                    reason:
                      description: |-
                        reason contains a programmatic identifier indicating the reason for the condition's last transition.
                        Producers of specific condition types may define expected values and meanings for this field,
                        and whether the values are considered a guaranteed API.
                        The value should be a CamelCase string.
                        This field may not be empty.
                      maxLength: 1024
                      minLength: 1
                      pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      enum:
                      - "True"
                      - "False"
                      - Unknown
                      type: string
                    type:
                      description: type of condition in CamelCase or in foo.example.com/CamelCase.
                      maxLength: 316
                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                      type: string
                  required:
                  - lastTransitionTime
                  - message
                  - reason
                  - status
                  - type
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - type
                x-kubernetes-list-type: map
              dnsName:
                description: |-
                  DNSName is the fully-qualified domain name (FQDN) of the Traffic Manager profile.
                  It consists of profile name and the DNS domain name used by Azure Traffic Manager to form the fully-qualified
                  domain name (FQDN) of the profile.
                  For example, "<TrafficManagerProfileNamespace>-<TrafficManagerProfileName>.trafficmanager.net"
                type: string
              resourceID:
                description: |-
                  ResourceID is the fully qualified Azure resource Id for the resource.
                  Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{resourceName}
                type: string
            type: object
        required:
        - spec
        type: object
        x-kubernetes-validations:
        - message: metadata.name max length is 63
          rule: size(self.metadata.name) < 64
    served: true
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - jsonPath: .status.dnsName
      name: DNS-Name
      type: string
    - jsonPath: .status.conditions[?(@.type=='Programmed')].status
      name: Is-Programmed
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: |-
          TrafficManagerProfile is used to manage a simple Azure Traffic Manager Profile using cloud native way.
          https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview
        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: The desired state of TrafficManagerProfile.
            properties:
              monitorConfig:
                description: The endpoint monitoring settings of the Traffic Manager
                  profile.
                properties:
                  intervalInSeconds:
                    default: 30
                    description: |-
                      The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health
                      of each endpoint in this profile.
                      You can specify two values here: 30 seconds (normal probing) and 10 seconds (fast probing).
                    enum:
                    - 10
                    - 30
                    format: int64
                    type: integer
                  path:
                    default: /
                    description: The path relative to the endpoint domain name used
                      to probe for endpoint health.
                    type: string
                  port:
                    default: 80
                    description: The TCP port used to probe for endpoint health.
                    format: int64
                    type: integer
                  protocol:
                    default: HTTP
                    description: The protocol (HTTP, HTTPS or TCP) used to probe for
                      endpoint health.
                    enum:
                    - HTTP
                    - HTTPS
                    - TCP
                    type: string
                  timeoutInSeconds:
                    description: |-
                      The monitor timeout for endpoints in this profile. This is the time that Traffic Manager allows endpoints in this profile
                      to response to the health check.
                      * If the IntervalInSeconds is set to 30 seconds, then you can set the Timeout value between 5 and 10 seconds.
                        If no value is specified, it uses a default value of 10 seconds.
                      * If the IntervalInSeconds is set to 10 seconds, then you can set the Timeout value between 5 and 9 seconds.
                        If no Timeout value is specified, it uses a default value of 9 seconds.
                    format: int64
                    maximum: 10
                    minimum: 5
                    type: integer
                  toleratedNumberOfFailures:
                    default: 3
                    description: |-
                      The number of consecutive failed health check that Traffic Manager tolerates before declaring an endpoint in this profile
                      Degraded after the next failed health check.
                    format: int64
                    maximum: 9
                    minimum: 0
                    type: integer
                type: object
                x-kubernetes-validations:
                - message: timeoutInSeconds must be between 5 and 10 when intervalInSeconds
                    is 30
                  rule: 'has(self.intervalInSeconds) && self.intervalInSeconds ==
                    30 ? (!has(self.timeoutInSeconds) || (self.timeoutInSeconds >=
                    5 && self.timeoutInSeconds <= 10)) : true'
                - message: timeoutInSeconds must be between 5 and 9 when intervalInSeconds
                    is 10
                  rule: 'has(self.intervalInSeconds) && self.intervalInSeconds ==
                    10 ? (!has(self.timeoutInSeconds) || (self.timeoutInSeconds >=
                    5 && self.timeoutInSeconds <= 9)) : true'
              resourceGroup:
                description: |-
                  The name of the resource group to contain the Azure Traffic Manager resource corresponding to this profile.
                  When this profile is created, updated, or deleted, the corresponding traffic manager with the same name will be created, updated, or deleted
                  in the specified resource group.
                  Reference link: https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules#microsoftresources
                maxLength: 90
                minLength: 1
                type: string
                x-kubernetes-validations:
                - message: resourceGroup is immutable
                  rule: self == oldSelf
            required:
            - resourceGroup
            type: object
          status:
            description: The observed status of TrafficManagerProfile.
            properties:
              conditions:
                description: Current profile status.
                items:
                  description: Condition contains details for one aspect of the current
                    state of this API Resource.
                  properties:
                    lastTransitionTime:
                      description: |-
                        lastTransitionTime is the last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        message is a human readable message indicating details about the transition.
                        This may be an empty string.
                      maxLength: 32768
                      type: string
                    observedGeneration:
                      description: |-
                        observedGeneration represents the .metadata.generation that the condition was set based upon.
                        For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
                        with respect to the current state of the instance.
                      format: int64
                      minimum: 0
                      type: integer
                    reason:
                      description: |-
                        reason contains a programmatic identifier indicating the reason for the condition's last transition.
                        Producers of specific condition types may define expected values and meanings for this field,
                        and whether the values are considered a guaranteed API.
                        The value should be a CamelCase string.
                        This field may not be empty.
                      maxLength: 1024
                      minLength: 1
                      pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      enum:
                      - "True"
                      - "False"
                      - Unknown
                      type: string
                    type:
                      description: type of condition in CamelCase or in foo.example.com/CamelCase.
                      maxLength: 316
                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                      type: string
                  required:
                  - lastTransitionTime
                  - message
                  - reason
                  - status
                  - type
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - type
                x-kubernetes-list-type: map
              dnsName:
                description: |-
                  DNSName is the fully-qualified domain name (FQDN) of the Traffic Manager profile.
                  It consists of profile name and the DNS domain name used by Azure Traffic Manager to form the fully-qualified
                  domain name (FQDN) of the profile.
                  For example, "<TrafficManagerProfileNamespace>-<TrafficManagerProfileName>.trafficmanager.net"
                type: string
              resourceID:
                description: |-
                  ResourceID is the fully qualified Azure resource Id for the resource.
                  Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{resourceName}
                type: string
            type: object
        required:
        - spec
        type: object
        x-kubernetes-validations:
        - message: metadata.name max length is 63
          rule: size(self.metadata.name) < 64
    served: true
    storage: true
    subresources:
      status: {}
