---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.0
  name: memberclusters.cluster.kubernetes-fleet.io
spec:
  group: cluster.kubernetes-fleet.io
  names:
    categories:
    - fleet
    - fleet-cluster
    kind: MemberCluster
    listKind: MemberClusterList
    plural: memberclusters
    shortNames:
    - cluster
    singular: membercluster
  scope: Cluster
  versions:
  - additionalPrinterColumns:
    - jsonPath: .status.conditions[?(@.type=="Joined")].status
      name: Joined
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - jsonPath: .status.agentStatus[?(@.type=="MemberAgent")].lastReceivedHeartbeat
      name: Member-Agent-Last-Seen
      type: date
    - jsonPath: .status.properties.kubernetes-fleet\.io/node-count.value
      name: Node-Count
      type: string
    - jsonPath: .status.resourceUsage.available.cpu
      name: Available-CPU
      type: string
    - jsonPath: .status.resourceUsage.available.memory
      name: Available-Memory
      type: string
    - jsonPath: .status.resourceUsage.allocatable.cpu
      name: Allocatable-CPU
      priority: 1
      type: string
    - jsonPath: .status.resourceUsage.allocatable.memory
      name: Allocatable-Memory
      priority: 1
      type: string
    name: v1
    schema:
      openAPIV3Schema:
        description: MemberCluster is a resource created in the hub cluster to represent
          a member cluster within a fleet.
        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 MemberCluster.
            properties:
              heartbeatPeriodSeconds:
                default: 60
                description: 'How often (in seconds) for the member cluster to send
                  a heartbeat to the hub cluster. Default: 60 seconds. Min: 1 second.
                  Max: 10 minutes.'
                format: int32
                maximum: 600
                minimum: 1
                type: integer
              identity:
                description: |-
                  The identity used by the member cluster to access the hub cluster.
                  The hub agents deployed on the hub cluster will automatically grant the minimal required permissions to this identity for the member agents deployed on the member cluster to access the hub cluster.
                properties:
                  apiGroup:
                    description: |-
                      APIGroup holds the API group of the referenced subject.
                      Defaults to "" for ServiceAccount subjects.
                      Defaults to "rbac.authorization.k8s.io" for User and Group subjects.
                    type: string
                  kind:
                    description: |-
                      Kind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount".
                      If the Authorizer does not recognized the kind value, the Authorizer should report an error.
                    type: string
                  name:
                    description: Name of the object being referenced.
                    type: string
                  namespace:
                    description: |-
                      Namespace of the referenced object.  If the object kind is non-namespace, such as "User" or "Group", and this value is not empty
                      the Authorizer should report an error.
                    type: string
                required:
                - kind
                - name
                type: object
                x-kubernetes-map-type: atomic
              taints:
                description: |-
                  If specified, the MemberCluster's taints.

                  This field is beta-level and is for the taints and tolerations feature.
                items:
                  description: |-
                    Taint attached to MemberCluster has the "effect" on
                    any ClusterResourcePlacement that does not tolerate the Taint.
                  properties:
                    effect:
                      description: |-
                        The effect of the taint on ClusterResourcePlacements that do not tolerate the taint.
                        Only NoSchedule is supported.
                      enum:
                      - NoSchedule
                      type: string
                    key:
                      description: The taint key to be applied to a MemberCluster.
                      type: string
                    value:
                      description: The taint value corresponding to the taint key.
                      type: string
                  required:
                  - effect
                  - key
                  type: object
                maxItems: 100
                type: array
            required:
            - identity
            type: object
          status:
            description: The observed status of MemberCluster.
            properties:
              agentStatus:
                description: AgentStatus is an array of current observed status, each
                  corresponding to one member agent running in the member cluster.
                items:
                  description: AgentStatus defines the observed status of the member
                    agent of the given type.
                  properties:
                    conditions:
                      description: Conditions is an array of current observed conditions
                        for the member agent.
                      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
                    lastReceivedHeartbeat:
                      description: Last time we received a heartbeat from the member
                        agent.
                      format: date-time
                      type: string
                    type:
                      description: Type of the member agent.
                      type: string
                  required:
                  - type
                  type: object
                type: array
              conditions:
                description: Conditions is an array of current observed conditions
                  for the member cluster.
                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
              properties:
                additionalProperties:
                  description: PropertyValue is the value of a cluster property.
                  properties:
                    observationTime:
                      description: ObservationTime is when the cluster property is
                        observed.
                      format: date-time
                      type: string
                    value:
                      description: |-
                        Value is the value of the cluster property.

                        Currently, it should be a valid Kubernetes quantity.
                        For more information, see
                        https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.
                      type: string
                  required:
                  - observationTime
                  - value
                  type: object
                description: |-
                  Properties is an array of properties observed for the member cluster.

                  This field is beta-level; it is for the property-based scheduling feature and is only
                  populated when a property provider is enabled in the deployment.
                type: object
              resourceUsage:
                description: The current observed resource usage of the member cluster.
                  It is copied from the corresponding InternalMemberCluster object.
                properties:
                  allocatable:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: |-
                      Allocatable represents the total allocatable resources of all the nodes on a member cluster.

                      A node's allocatable capacity is the amount of resource that can actually be used
                      for user workloads, i.e.,
                      allocatable capacity = total capacity - capacities reserved for the OS, kubelet, etc.

                      For more information, see
                      https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/.
                    type: object
                  available:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: |-
                      Available represents the total available resources of all the nodes on a member cluster.

                      A node's available capacity is the amount of resource that has not been used yet, i.e.,
                      available capacity = allocatable capacity - capacity that has been requested by workloads.

                      This field is beta-level; it is for the property-based scheduling feature and is only
                      populated when a property provider is enabled in the deployment.
                    type: object
                  capacity:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: |-
                      Capacity represents the total resource capacity of all the nodes on a member cluster.

                      A node's total capacity is the amount of resource installed on the node.
                    type: object
                  observationTime:
                    description: When the resource usage is observed.
                    format: date-time
                    type: string
                type: object
            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.conditions[?(@.type=="Joined")].status
      name: Joined
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - jsonPath: .status.agentStatus[?(@.type=="MemberAgent")].lastReceivedHeartbeat
      name: Member-Agent-Last-Seen
      type: date
    - jsonPath: .status.properties.kubernetes-fleet\.io/node-count.value
      name: Node-Count
      type: string
    - jsonPath: .status.resourceUsage.available.cpu
      name: Available-CPU
      type: string
    - jsonPath: .status.resourceUsage.available.memory
      name: Available-Memory
      type: string
    - jsonPath: .status.resourceUsage.allocatable.cpu
      name: Allocatable-CPU
      priority: 1
      type: string
    - jsonPath: .status.resourceUsage.allocatable.memory
      name: Allocatable-Memory
      priority: 1
      type: string
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: MemberCluster is a resource created in the hub cluster to represent
          a member cluster within a fleet.
        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 MemberCluster.
            properties:
              heartbeatPeriodSeconds:
                default: 60
                description: 'How often (in seconds) for the member cluster to send
                  a heartbeat to the hub cluster. Default: 60 seconds. Min: 1 second.
                  Max: 10 minutes.'
                format: int32
                maximum: 600
                minimum: 1
                type: integer
              identity:
                description: |-
                  The identity used by the member cluster to access the hub cluster.
                  The hub agents deployed on the hub cluster will automatically grant the minimal required permissions to this identity for the member agents deployed on the member cluster to access the hub cluster.
                properties:
                  apiGroup:
                    description: |-
                      APIGroup holds the API group of the referenced subject.
                      Defaults to "" for ServiceAccount subjects.
                      Defaults to "rbac.authorization.k8s.io" for User and Group subjects.
                    type: string
                  kind:
                    description: |-
                      Kind of object being referenced. Values defined by this API group are "User", "Group", and "ServiceAccount".
                      If the Authorizer does not recognized the kind value, the Authorizer should report an error.
                    type: string
                  name:
                    description: Name of the object being referenced.
                    type: string
                  namespace:
                    description: |-
                      Namespace of the referenced object.  If the object kind is non-namespace, such as "User" or "Group", and this value is not empty
                      the Authorizer should report an error.
                    type: string
                required:
                - kind
                - name
                type: object
                x-kubernetes-map-type: atomic
              taints:
                description: |-
                  If specified, the MemberCluster's taints.

                  This field is beta-level and is for the taints and tolerations feature.
                items:
                  description: |-
                    Taint attached to MemberCluster has the "effect" on
                    any ClusterResourcePlacement that does not tolerate the Taint.
                  properties:
                    effect:
                      description: |-
                        The effect of the taint on ClusterResourcePlacements that do not tolerate the taint.
                        Only NoSchedule is supported.
                      enum:
                      - NoSchedule
                      type: string
                    key:
                      description: The taint key to be applied to a MemberCluster.
                      type: string
                    value:
                      description: The taint value corresponding to the taint key.
                      type: string
                  required:
                  - effect
                  - key
                  type: object
                maxItems: 100
                type: array
            required:
            - identity
            type: object
          status:
            description: The observed status of MemberCluster.
            properties:
              agentStatus:
                description: AgentStatus is an array of current observed status, each
                  corresponding to one member agent running in the member cluster.
                items:
                  description: AgentStatus defines the observed status of the member
                    agent of the given type.
                  properties:
                    conditions:
                      description: Conditions is an array of current observed conditions
                        for the member agent.
                      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
                    lastReceivedHeartbeat:
                      description: Last time we received a heartbeat from the member
                        agent.
                      format: date-time
                      type: string
                    type:
                      description: Type of the member agent.
                      type: string
                  required:
                  - type
                  type: object
                type: array
              conditions:
                description: Conditions is an array of current observed conditions
                  for the member cluster.
                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
              properties:
                additionalProperties:
                  description: PropertyValue is the value of a cluster property.
                  properties:
                    observationTime:
                      description: ObservationTime is when the cluster property is
                        observed.
                      format: date-time
                      type: string
                    value:
                      description: |-
                        Value is the value of the cluster property.

                        Currently, it should be a valid Kubernetes quantity.
                        For more information, see
                        https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.
                      type: string
                  required:
                  - observationTime
                  - value
                  type: object
                description: |-
                  Properties is an array of properties observed for the member cluster.

                  This field is beta-level; it is for the property-based scheduling feature and is only
                  populated when a property provider is enabled in the deployment.
                type: object
              resourceUsage:
                description: The current observed resource usage of the member cluster.
                  It is copied from the corresponding InternalMemberCluster object.
                properties:
                  allocatable:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: |-
                      Allocatable represents the total allocatable resources of all the nodes on a member cluster.

                      A node's allocatable capacity is the amount of resource that can actually be used
                      for user workloads, i.e.,
                      allocatable capacity = total capacity - capacities reserved for the OS, kubelet, etc.

                      For more information, see
                      https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/.
                    type: object
                  available:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: |-
                      Available represents the total available resources of all the nodes on a member cluster.

                      A node's available capacity is the amount of resource that has not been used yet, i.e.,
                      available capacity = allocatable capacity - capacity that has been requested by workloads.

                      This field is beta-level; it is for the property-based scheduling feature and is only
                      populated when a property provider is enabled in the deployment.
                    type: object
                  capacity:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: |-
                      Capacity represents the total resource capacity of all the nodes on a member cluster.

                      A node's total capacity is the amount of resource installed on the node.
                    type: object
                  observationTime:
                    description: When the resource usage is observed.
                    format: date-time
                    type: string
                type: object
            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: {}
