---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.0
  name: clusterresourceplacements.fleet.azure.com
spec:
  group: fleet.azure.com
  names:
    categories:
    - fleet-workload
    kind: ClusterResourcePlacement
    listKind: ClusterResourcePlacementList
    plural: clusterresourceplacements
    shortNames:
    - crp
    singular: clusterresourceplacement
  scope: Cluster
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.generation
      name: Gen
      type: string
    - jsonPath: .status.conditions[?(@.type=="Scheduled")].status
      name: Scheduled
      type: string
    - jsonPath: .status.conditions[?(@.type=="Scheduled")].observedGeneration
      name: ScheduledGen
      type: string
    - jsonPath: .status.conditions[?(@.type=="Applied")].status
      name: Applied
      type: string
    - jsonPath: .status.conditions[?(@.type=="Applied")].observedGeneration
      name: AppliedGen
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: |-
          ClusterResourcePlacement is used to select cluster scoped resources, including built-in resources and custom resources, and placement them onto selected member clusters in a fleet.
          If a namespace is selected, ALL the resources under the namespace are placed to the target clusters.
          Note that you can't select the following resources:
          - reserved namespaces including: default, kube-* (reserved for Kubernetes system namespaces), fleet-* (reserved for fleet system namespaces).
          - reserved fleet resource types including: MemberCluster, InternalMemberCluster, ClusterResourcePlacement, MultiClusterService, ServiceImport, etc.
        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 ClusterResourcePlacement.
            properties:
              policy:
                description: |-
                  Policy defines how to select member clusters to place the selected resources.
                  If unspecified, all the joined member clusters are selected.
                properties:
                  affinity:
                    description: Affinity contains cluster affinity scheduling rules.
                      Defines which member clusters to place the selected resources.
                    properties:
                      clusterAffinity:
                        description: ClusterAffinity contains cluster affinity scheduling
                          rules for the selected resources.
                        properties:
                          clusterSelectorTerms:
                            description: ClusterSelectorTerms is a list of cluster
                              selector terms. The terms are `ORed`.
                            items:
                              description: ClusterSelectorTerm contains the requirements
                                to select clusters.
                              properties:
                                labelSelector:
                                  description: LabelSelector is a label query over
                                    all the joined member clusters. Clusters matching
                                    the query are selected.
                                  properties:
                                    matchExpressions:
                                      description: matchExpressions is a list of label
                                        selector requirements. The requirements are
                                        ANDed.
                                      items:
                                        description: |-
                                          A label selector requirement is a selector that contains values, a key, and an operator that
                                          relates the key and values.
                                        properties:
                                          key:
                                            description: key is the label key that
                                              the selector applies to.
                                            type: string
                                          operator:
                                            description: |-
                                              operator represents a key's relationship to a set of values.
                                              Valid operators are In, NotIn, Exists and DoesNotExist.
                                            type: string
                                          values:
                                            description: |-
                                              values is an array of string values. If the operator is In or NotIn,
                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                              the values array must be empty. This array is replaced during a strategic
                                              merge patch.
                                            items:
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: atomic
                                        required:
                                        - key
                                        - operator
                                        type: object
                                      type: array
                                      x-kubernetes-list-type: atomic
                                    matchLabels:
                                      additionalProperties:
                                        type: string
                                      description: |-
                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
                                      type: object
                                  type: object
                                  x-kubernetes-map-type: atomic
                              required:
                              - labelSelector
                              type: object
                            maxItems: 10
                            type: array
                        type: object
                    type: object
                  clusterNames:
                    description: |-
                      ClusterNames contains a list of names of MemberCluster to place the selected resources.
                      If the list is not empty, Affinity is ignored.
                    items:
                      type: string
                    maxItems: 100
                    type: array
                type: object
              resourceSelectors:
                description: |-
                  ResourceSelectors is an array of selectors used to select cluster scoped resources. The selectors are `ORed`.
                  You can have 1-100 selectors.
                items:
                  description: |-
                    ClusterResourceSelector is used to select cluster scoped resources as the target resources to be placed.
                    If a namespace is selected, ALL the resources under the namespace are selected automatically.
                    All the fields are `ANDed`. In other words, a resource must match all the fields to be selected.
                  properties:
                    group:
                      description: |-
                        Group name of the cluster-scoped resource.
                        Use an empty string to select resources under the core API group (e.g., namespaces).
                      type: string
                    kind:
                      description: |-
                        Kind of the cluster-scoped resource.
                        Note: When `Kind` is `namespace`, ALL the resources under the selected namespaces are selected.
                      type: string
                    labelSelector:
                      description: |-
                        A label query over all the cluster-scoped resources. Resources matching the query are selected.
                        Note that namespace-scoped resources can't be selected even if they match the query.
                      properties:
                        matchExpressions:
                          description: matchExpressions is a list of label selector
                            requirements. The requirements are ANDed.
                          items:
                            description: |-
                              A label selector requirement is a selector that contains values, a key, and an operator that
                              relates the key and values.
                            properties:
                              key:
                                description: key is the label key that the selector
                                  applies to.
                                type: string
                              operator:
                                description: |-
                                  operator represents a key's relationship to a set of values.
                                  Valid operators are In, NotIn, Exists and DoesNotExist.
                                type: string
                              values:
                                description: |-
                                  values is an array of string values. If the operator is In or NotIn,
                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                  the values array must be empty. This array is replaced during a strategic
                                  merge patch.
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                            required:
                            - key
                            - operator
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                        matchLabels:
                          additionalProperties:
                            type: string
                          description: |-
                            matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                            map is equivalent to an element of matchExpressions, whose key field is "key", the
                            operator is "In", and the values array contains only "value". The requirements are ANDed.
                          type: object
                      type: object
                      x-kubernetes-map-type: atomic
                    name:
                      description: Name of the cluster-scoped resource.
                      type: string
                    version:
                      description: Version of the cluster-scoped resource.
                      type: string
                  required:
                  - group
                  - kind
                  - version
                  type: object
                maxItems: 100
                minItems: 1
                type: array
            required:
            - resourceSelectors
            type: object
          status:
            description: The observed status of ClusterResourcePlacement.
            properties:
              conditions:
                description: Conditions is an array of current observed conditions
                  for ClusterResourcePlacement.
                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
              failedPlacements:
                description: |-
                  FailedResourcePlacements is a list of all the resources failed to be placed to the given clusters.
                  Note that we only include 1000 failed resource placements even if there are more than 1000.
                items:
                  description: FailedResourcePlacement contains the failure details
                    of a failed resource placement.
                  properties:
                    clusterName:
                      description: Name of the member cluster that the resource is
                        placed to.
                      type: string
                    condition:
                      description: The failed condition status.
                      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
                    group:
                      description: Group is the group name of the selected resource.
                      type: string
                    kind:
                      description: Kind represents the Kind of the selected resources.
                      type: string
                    name:
                      description: Name of the target resource.
                      type: string
                    namespace:
                      description: Namespace is the namespace of the resource. Empty
                        if the resource is cluster scoped.
                      type: string
                    version:
                      description: Version is the version of the selected resource.
                      type: string
                  required:
                  - clusterName
                  - condition
                  - kind
                  - name
                  - version
                  type: object
                maxItems: 1000
                type: array
              selectedResources:
                description: SelectedResources contains a list of resources selected
                  by ResourceSelectors.
                items:
                  description: ResourceIdentifier identifies one Kubernetes resource.
                  properties:
                    group:
                      description: Group is the group name of the selected resource.
                      type: string
                    kind:
                      description: Kind represents the Kind of the selected resources.
                      type: string
                    name:
                      description: Name of the target resource.
                      type: string
                    namespace:
                      description: Namespace is the namespace of the resource. Empty
                        if the resource is cluster scoped.
                      type: string
                    version:
                      description: Version is the version of the selected resource.
                      type: string
                  required:
                  - kind
                  - name
                  - version
                  type: object
                type: array
              targetClusters:
                description: |-
                  TargetClusters contains a list of names of member clusters selected by PlacementPolicy.
                  Note that the clusters must be both joined and meeting PlacementPolicy.
                items:
                  type: string
                type: array
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
