---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.0
  name: clusterschedulingpolicysnapshots.placement.kubernetes-fleet.io
spec:
  group: placement.kubernetes-fleet.io
  names:
    categories:
    - fleet
    - fleet-placement
    kind: ClusterSchedulingPolicySnapshot
    listKind: ClusterSchedulingPolicySnapshotList
    plural: clusterschedulingpolicysnapshots
    shortNames:
    - pss
    singular: clusterschedulingpolicysnapshot
  scope: Cluster
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.generation
      name: Gen
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1
    schema:
      openAPIV3Schema:
        description: |-
          ClusterSchedulingPolicySnapshot is used to store a snapshot of cluster placement policy.
          Its spec is immutable.
          The naming convention of a ClusterSchedulingPolicySnapshot is {CRPName}-{PolicySnapshotIndex}.
          PolicySnapshotIndex will begin with 0.
          Each snapshot must have the following labels:
            - `CRPTrackingLabel` which points to its owner CRP.
            - `PolicyIndexLabel` which is the index of the policy snapshot.
            - `IsLatestSnapshotLabel` which indicates whether the snapshot is the latest one.
        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 SchedulingPolicySnapshot.
            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.
                      Only valid if the placement type is "PickAll" or "PickN".
                    properties:
                      clusterAffinity:
                        description: ClusterAffinity contains cluster affinity scheduling
                          rules for the selected resources.
                        properties:
                          preferredDuringSchedulingIgnoredDuringExecution:
                            description: |-
                              The scheduler computes a score for each cluster at schedule time by iterating
                              through the elements of this field and adding "weight" to the sum if the cluster
                              matches the corresponding matchExpression. The scheduler then chooses the first
                              `N` clusters with the highest sum to satisfy the placement.
                              This field is ignored if the placement type is "PickAll".
                              If the cluster score changes at some point after the placement (e.g. due to an update),
                              the system may or may not try to eventually move the resource from a cluster with a lower score
                              to a cluster with higher score.
                            items:
                              properties:
                                preference:
                                  description: A cluster selector term, associated
                                    with the corresponding weight.
                                  properties:
                                    labelSelector:
                                      description: |-
                                        LabelSelector is a label query over all the joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.
                                      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
                                    propertySelector:
                                      description: |-
                                        PropertySelector is a property query over all joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.

                                        At this moment, PropertySelector can only be used with
                                        `RequiredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        matchExpressions:
                                          description: MatchExpressions is an array
                                            of PropertySelectorRequirements. The requirements
                                            are AND'd.
                                          items:
                                            description: |-
                                              PropertySelectorRequirement is a specific property requirement when picking clusters for
                                              resource placement.
                                            properties:
                                              name:
                                                description: Name is the name of the
                                                  property; it should be a Kubernetes
                                                  label name.
                                                type: string
                                              operator:
                                                description: |-
                                                  Operator specifies the relationship between a cluster's observed value of the specified
                                                  property and the values given in the requirement.
                                                type: string
                                              values:
                                                description: |-
                                                  Values are a list of values of the specified property which Fleet will compare against
                                                  the observed values of individual member clusters in accordance with the given
                                                  operator.

                                                  At this moment, each value should be a Kubernetes quantity. For more information, see
                                                  https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.

                                                  If the operator is Gt (greater than), Ge (greater than or equal to), Lt (less than),
                                                  or `Le` (less than or equal to), Eq (equal to), or Ne (ne), exactly one value must be
                                                  specified in the list.
                                                items:
                                                  type: string
                                                maxItems: 1
                                                type: array
                                            required:
                                            - name
                                            - operator
                                            - values
                                            type: object
                                          type: array
                                      required:
                                      - matchExpressions
                                      type: object
                                    propertySorter:
                                      description: |-
                                        PropertySorter sorts all matching clusters by a specific property and assigns different weights
                                        to each cluster based on their observed property values.

                                        At this moment, PropertySorter can only be used with
                                        `PreferredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        name:
                                          description: Name is the name of the property
                                            which Fleet sorts clusters by.
                                          type: string
                                        sortOrder:
                                          description: |-
                                            SortOrder explains how Fleet should perform the sort; specifically, whether Fleet should
                                            sort in ascending or descending order.
                                          type: string
                                      required:
                                      - name
                                      - sortOrder
                                      type: object
                                  type: object
                                weight:
                                  description: Weight associated with matching the
                                    corresponding clusterSelectorTerm, in the range
                                    [-100, 100].
                                  format: int32
                                  maximum: 100
                                  minimum: -100
                                  type: integer
                              required:
                              - preference
                              - weight
                              type: object
                            type: array
                          requiredDuringSchedulingIgnoredDuringExecution:
                            description: |-
                              If the affinity requirements specified by this field are not met at
                              scheduling time, the resource will not be scheduled onto the cluster.
                              If the affinity requirements specified by this field cease to be met
                              at some point after the placement (e.g. due to an update), the system
                              may or may not try to eventually remove the resource from the cluster.
                            properties:
                              clusterSelectorTerms:
                                description: ClusterSelectorTerms is a list of cluster
                                  selector terms. The terms are `ORed`.
                                items:
                                  properties:
                                    labelSelector:
                                      description: |-
                                        LabelSelector is a label query over all the joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.
                                      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
                                    propertySelector:
                                      description: |-
                                        PropertySelector is a property query over all joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.

                                        At this moment, PropertySelector can only be used with
                                        `RequiredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        matchExpressions:
                                          description: MatchExpressions is an array
                                            of PropertySelectorRequirements. The requirements
                                            are AND'd.
                                          items:
                                            description: |-
                                              PropertySelectorRequirement is a specific property requirement when picking clusters for
                                              resource placement.
                                            properties:
                                              name:
                                                description: Name is the name of the
                                                  property; it should be a Kubernetes
                                                  label name.
                                                type: string
                                              operator:
                                                description: |-
                                                  Operator specifies the relationship between a cluster's observed value of the specified
                                                  property and the values given in the requirement.
                                                type: string
                                              values:
                                                description: |-
                                                  Values are a list of values of the specified property which Fleet will compare against
                                                  the observed values of individual member clusters in accordance with the given
                                                  operator.

                                                  At this moment, each value should be a Kubernetes quantity. For more information, see
                                                  https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.

                                                  If the operator is Gt (greater than), Ge (greater than or equal to), Lt (less than),
                                                  or `Le` (less than or equal to), Eq (equal to), or Ne (ne), exactly one value must be
                                                  specified in the list.
                                                items:
                                                  type: string
                                                maxItems: 1
                                                type: array
                                            required:
                                            - name
                                            - operator
                                            - values
                                            type: object
                                          type: array
                                      required:
                                      - matchExpressions
                                      type: object
                                    propertySorter:
                                      description: |-
                                        PropertySorter sorts all matching clusters by a specific property and assigns different weights
                                        to each cluster based on their observed property values.

                                        At this moment, PropertySorter can only be used with
                                        `PreferredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        name:
                                          description: Name is the name of the property
                                            which Fleet sorts clusters by.
                                          type: string
                                        sortOrder:
                                          description: |-
                                            SortOrder explains how Fleet should perform the sort; specifically, whether Fleet should
                                            sort in ascending or descending order.
                                          type: string
                                      required:
                                      - name
                                      - sortOrder
                                      type: object
                                  type: object
                                maxItems: 10
                                type: array
                            required:
                            - clusterSelectorTerms
                            type: object
                        type: object
                    type: object
                  clusterNames:
                    description: |-
                      ClusterNames contains a list of names of MemberCluster to place the selected resources.
                      Only valid if the placement type is "PickFixed"
                    items:
                      type: string
                    maxItems: 100
                    type: array
                  numberOfClusters:
                    description: NumberOfClusters of placement. Only valid if the
                      placement type is "PickN".
                    format: int32
                    minimum: 0
                    type: integer
                  placementType:
                    default: PickAll
                    description: Type of placement. Can be "PickAll", "PickN" or "PickFixed".
                      Default is PickAll.
                    enum:
                    - PickAll
                    - PickN
                    - PickFixed
                    type: string
                  tolerations:
                    description: |-
                      If specified, the ClusterResourcePlacement's Tolerations.
                      Tolerations cannot be updated or deleted.

                      This field is beta-level and is for the taints and tolerations feature.
                    items:
                      description: |-
                        Toleration allows ClusterResourcePlacement to tolerate any taint that matches
                        the triple <key,value,effect> using the matching operator <operator>.
                      properties:
                        effect:
                          description: |-
                            Effect indicates the taint effect to match. Empty means match all taint effects.
                            When specified, only allowed value is NoSchedule.
                          enum:
                          - NoSchedule
                          type: string
                        key:
                          description: |-
                            Key is the taint key that the toleration applies to. Empty means match all taint keys.
                            If the key is empty, operator must be Exists; this combination means to match all values and all keys.
                          type: string
                        operator:
                          default: Equal
                          description: |-
                            Operator represents a key's relationship to the value.
                            Valid operators are Exists and Equal. Defaults to Equal.
                            Exists is equivalent to wildcard for value, so that a
                            ClusterResourcePlacement can tolerate all taints of a particular category.
                          enum:
                          - Equal
                          - Exists
                          type: string
                        value:
                          description: |-
                            Value is the taint value the toleration matches to.
                            If the operator is Exists, the value should be empty, otherwise just a regular string.
                          type: string
                      type: object
                    maxItems: 100
                    type: array
                  topologySpreadConstraints:
                    description: |-
                      TopologySpreadConstraints describes how a group of resources ought to spread across multiple topology
                      domains. Scheduler will schedule resources in a way which abides by the constraints.
                      All topologySpreadConstraints are ANDed.
                      Only valid if the placement type is "PickN".
                    items:
                      description: TopologySpreadConstraint specifies how to spread
                        resources among the given cluster topology.
                      properties:
                        maxSkew:
                          default: 1
                          description: |-
                            MaxSkew describes the degree to which resources may be unevenly distributed.
                            When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
                            between the number of resource copies in the target topology and the global minimum.
                            The global minimum is the minimum number of resource copies in a domain.
                            When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
                            to topologies that satisfy it.
                            It's an optional field. Default value is 1 and 0 is not allowed.
                          format: int32
                          minimum: 1
                          type: integer
                        topologyKey:
                          description: |-
                            TopologyKey is the key of cluster labels. Clusters that have a label with this key
                            and identical values are considered to be in the same topology.
                            We consider each <key, value> as a "bucket", and try to put balanced number
                            of replicas of the resource into each bucket honor the `MaxSkew` value.
                            It's a required field.
                          type: string
                        whenUnsatisfiable:
                          description: |-
                            WhenUnsatisfiable indicates how to deal with the resource if it doesn't satisfy
                            the spread constraint.
                            - DoNotSchedule (default) tells the scheduler not to schedule it.
                            - ScheduleAnyway tells the scheduler to schedule the resource in any cluster,
                              but giving higher precedence to topologies that would help reduce the skew.
                            It's an optional field.
                          type: string
                      required:
                      - topologyKey
                      type: object
                    type: array
                type: object
              policyHash:
                description: PolicyHash is the sha-256 hash value of the Policy field.
                format: byte
                type: string
            required:
            - policyHash
            type: object
          status:
            description: The observed status of SchedulingPolicySnapshot.
            properties:
              conditions:
                description: Conditions is an array of current observed conditions
                  for SchedulingPolicySnapshot.
                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
              observedCRPGeneration:
                description: |-
                  ObservedCRPGeneration is the generation of the CRP which the scheduler uses to perform
                  the scheduling cycle and prepare the scheduling status.
                format: int64
                type: integer
              targetClusters:
                description: |-
                  ClusterDecisions contains a list of names of member clusters considered by the scheduler.
                  Note that all the selected clusters must present in the list while not all the
                  member clusters are guaranteed to be listed due to the size limit. We will try to
                  add the clusters that can provide the most insight to the list first.
                items:
                  description: |-
                    ClusterDecision represents a decision from a placement
                    An empty ClusterDecision indicates it is not scheduled yet.
                  properties:
                    clusterName:
                      description: |-
                        ClusterName is the name of the ManagedCluster. If it is not empty, its value should be unique cross all
                        placement decisions for the Placement.
                      type: string
                    clusterScore:
                      description: ClusterScore represents the score of the cluster
                        calculated by the scheduler.
                      properties:
                        affinityScore:
                          description: |-
                            AffinityScore represents the affinity score of the cluster calculated by the last
                            scheduling decision based on the preferred affinity selector.
                            An affinity score may not present if the cluster does not meet the required affinity.
                          format: int32
                          type: integer
                        priorityScore:
                          description: |-
                            TopologySpreadScore represents the priority score of the cluster calculated by the last
                            scheduling decision based on the topology spread applied to the cluster.
                            A priority score may not present if the cluster does not meet the topology spread.
                          format: int32
                          type: integer
                      type: object
                    reason:
                      description: Reason represents the reason why the cluster is
                        selected or not.
                      type: string
                    selected:
                      description: Selected indicates if this cluster is selected
                        by the scheduler.
                      type: boolean
                  required:
                  - clusterName
                  - reason
                  - selected
                  type: object
                maxItems: 1000
                type: array
            required:
            - observedCRPGeneration
            type: object
        required:
        - spec
        type: object
    served: true
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - jsonPath: .metadata.generation
      name: Gen
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: |-
          ClusterSchedulingPolicySnapshot is used to store a snapshot of cluster placement policy.
          Its spec is immutable.
          The naming convention of a ClusterSchedulingPolicySnapshot is {CRPName}-{PolicySnapshotIndex}.
          PolicySnapshotIndex will begin with 0.
          Each snapshot must have the following labels:
            - `CRPTrackingLabel` which points to its owner CRP.
            - `PolicyIndexLabel` which is the index of the policy snapshot.
            - `IsLatestSnapshotLabel` which indicates whether the snapshot is the latest one.
        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 SchedulingPolicySnapshot.
            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.
                      Only valid if the placement type is "PickAll" or "PickN".
                    properties:
                      clusterAffinity:
                        description: ClusterAffinity contains cluster affinity scheduling
                          rules for the selected resources.
                        properties:
                          preferredDuringSchedulingIgnoredDuringExecution:
                            description: |-
                              The scheduler computes a score for each cluster at schedule time by iterating
                              through the elements of this field and adding "weight" to the sum if the cluster
                              matches the corresponding matchExpression. The scheduler then chooses the first
                              `N` clusters with the highest sum to satisfy the placement.
                              This field is ignored if the placement type is "PickAll".
                              If the cluster score changes at some point after the placement (e.g. due to an update),
                              the system may or may not try to eventually move the resource from a cluster with a lower score
                              to a cluster with higher score.
                            items:
                              properties:
                                preference:
                                  description: A cluster selector term, associated
                                    with the corresponding weight.
                                  properties:
                                    labelSelector:
                                      description: |-
                                        LabelSelector is a label query over all the joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.
                                      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
                                    propertySelector:
                                      description: |-
                                        PropertySelector is a property query over all joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.

                                        At this moment, PropertySelector can only be used with
                                        `RequiredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        matchExpressions:
                                          description: MatchExpressions is an array
                                            of PropertySelectorRequirements. The requirements
                                            are AND'd.
                                          items:
                                            description: |-
                                              PropertySelectorRequirement is a specific property requirement when picking clusters for
                                              resource placement.
                                            properties:
                                              name:
                                                description: Name is the name of the
                                                  property; it should be a Kubernetes
                                                  label name.
                                                type: string
                                              operator:
                                                description: |-
                                                  Operator specifies the relationship between a cluster's observed value of the specified
                                                  property and the values given in the requirement.
                                                type: string
                                              values:
                                                description: |-
                                                  Values are a list of values of the specified property which Fleet will compare against
                                                  the observed values of individual member clusters in accordance with the given
                                                  operator.

                                                  At this moment, each value should be a Kubernetes quantity. For more information, see
                                                  https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.

                                                  If the operator is Gt (greater than), Ge (greater than or equal to), Lt (less than),
                                                  or `Le` (less than or equal to), Eq (equal to), or Ne (ne), exactly one value must be
                                                  specified in the list.
                                                items:
                                                  type: string
                                                maxItems: 1
                                                type: array
                                            required:
                                            - name
                                            - operator
                                            - values
                                            type: object
                                          type: array
                                      required:
                                      - matchExpressions
                                      type: object
                                    propertySorter:
                                      description: |-
                                        PropertySorter sorts all matching clusters by a specific property and assigns different weights
                                        to each cluster based on their observed property values.

                                        At this moment, PropertySorter can only be used with
                                        `PreferredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        name:
                                          description: Name is the name of the property
                                            which Fleet sorts clusters by.
                                          type: string
                                        sortOrder:
                                          description: |-
                                            SortOrder explains how Fleet should perform the sort; specifically, whether Fleet should
                                            sort in ascending or descending order.
                                          type: string
                                      required:
                                      - name
                                      - sortOrder
                                      type: object
                                  type: object
                                weight:
                                  description: Weight associated with matching the
                                    corresponding clusterSelectorTerm, in the range
                                    [-100, 100].
                                  format: int32
                                  maximum: 100
                                  minimum: -100
                                  type: integer
                              required:
                              - preference
                              - weight
                              type: object
                            type: array
                          requiredDuringSchedulingIgnoredDuringExecution:
                            description: |-
                              If the affinity requirements specified by this field are not met at
                              scheduling time, the resource will not be scheduled onto the cluster.
                              If the affinity requirements specified by this field cease to be met
                              at some point after the placement (e.g. due to an update), the system
                              may or may not try to eventually remove the resource from the cluster.
                            properties:
                              clusterSelectorTerms:
                                description: ClusterSelectorTerms is a list of cluster
                                  selector terms. The terms are `ORed`.
                                items:
                                  properties:
                                    labelSelector:
                                      description: |-
                                        LabelSelector is a label query over all the joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.
                                      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
                                    propertySelector:
                                      description: |-
                                        PropertySelector is a property query over all joined member clusters. Clusters matching
                                        the query are selected.

                                        If you specify both label and property selectors in the same term, the results are AND'd.

                                        At this moment, PropertySelector can only be used with
                                        `RequiredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        matchExpressions:
                                          description: MatchExpressions is an array
                                            of PropertySelectorRequirements. The requirements
                                            are AND'd.
                                          items:
                                            description: |-
                                              PropertySelectorRequirement is a specific property requirement when picking clusters for
                                              resource placement.
                                            properties:
                                              name:
                                                description: Name is the name of the
                                                  property; it should be a Kubernetes
                                                  label name.
                                                type: string
                                              operator:
                                                description: |-
                                                  Operator specifies the relationship between a cluster's observed value of the specified
                                                  property and the values given in the requirement.
                                                type: string
                                              values:
                                                description: |-
                                                  Values are a list of values of the specified property which Fleet will compare against
                                                  the observed values of individual member clusters in accordance with the given
                                                  operator.

                                                  At this moment, each value should be a Kubernetes quantity. For more information, see
                                                  https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.

                                                  If the operator is Gt (greater than), Ge (greater than or equal to), Lt (less than),
                                                  or `Le` (less than or equal to), Eq (equal to), or Ne (ne), exactly one value must be
                                                  specified in the list.
                                                items:
                                                  type: string
                                                maxItems: 1
                                                type: array
                                            required:
                                            - name
                                            - operator
                                            - values
                                            type: object
                                          type: array
                                      required:
                                      - matchExpressions
                                      type: object
                                    propertySorter:
                                      description: |-
                                        PropertySorter sorts all matching clusters by a specific property and assigns different weights
                                        to each cluster based on their observed property values.

                                        At this moment, PropertySorter can only be used with
                                        `PreferredDuringSchedulingIgnoredDuringExecution` affinity terms.

                                        This field is beta-level; it is for the property-based scheduling feature and is only
                                        functional when a property provider is enabled in the deployment.
                                      properties:
                                        name:
                                          description: Name is the name of the property
                                            which Fleet sorts clusters by.
                                          type: string
                                        sortOrder:
                                          description: |-
                                            SortOrder explains how Fleet should perform the sort; specifically, whether Fleet should
                                            sort in ascending or descending order.
                                          type: string
                                      required:
                                      - name
                                      - sortOrder
                                      type: object
                                  type: object
                                maxItems: 10
                                type: array
                            required:
                            - clusterSelectorTerms
                            type: object
                        type: object
                    type: object
                  clusterNames:
                    description: |-
                      ClusterNames contains a list of names of MemberCluster to place the selected resources.
                      Only valid if the placement type is "PickFixed"
                    items:
                      type: string
                    maxItems: 100
                    type: array
                  numberOfClusters:
                    description: NumberOfClusters of placement. Only valid if the
                      placement type is "PickN".
                    format: int32
                    minimum: 0
                    type: integer
                  placementType:
                    default: PickAll
                    description: Type of placement. Can be "PickAll", "PickN" or "PickFixed".
                      Default is PickAll.
                    enum:
                    - PickAll
                    - PickN
                    - PickFixed
                    type: string
                  tolerations:
                    description: |-
                      If specified, the ClusterResourcePlacement's Tolerations.
                      Tolerations cannot be updated or deleted.

                      This field is beta-level and is for the taints and tolerations feature.
                    items:
                      description: |-
                        Toleration allows ClusterResourcePlacement to tolerate any taint that matches
                        the triple <key,value,effect> using the matching operator <operator>.
                      properties:
                        effect:
                          description: |-
                            Effect indicates the taint effect to match. Empty means match all taint effects.
                            When specified, only allowed value is NoSchedule.
                          enum:
                          - NoSchedule
                          type: string
                        key:
                          description: |-
                            Key is the taint key that the toleration applies to. Empty means match all taint keys.
                            If the key is empty, operator must be Exists; this combination means to match all values and all keys.
                          type: string
                        operator:
                          default: Equal
                          description: |-
                            Operator represents a key's relationship to the value.
                            Valid operators are Exists and Equal. Defaults to Equal.
                            Exists is equivalent to wildcard for value, so that a
                            ClusterResourcePlacement can tolerate all taints of a particular category.
                          enum:
                          - Equal
                          - Exists
                          type: string
                        value:
                          description: |-
                            Value is the taint value the toleration matches to.
                            If the operator is Exists, the value should be empty, otherwise just a regular string.
                          type: string
                      type: object
                    maxItems: 100
                    type: array
                  topologySpreadConstraints:
                    description: |-
                      TopologySpreadConstraints describes how a group of resources ought to spread across multiple topology
                      domains. Scheduler will schedule resources in a way which abides by the constraints.
                      All topologySpreadConstraints are ANDed.
                      Only valid if the placement type is "PickN".
                    items:
                      description: TopologySpreadConstraint specifies how to spread
                        resources among the given cluster topology.
                      properties:
                        maxSkew:
                          default: 1
                          description: |-
                            MaxSkew describes the degree to which resources may be unevenly distributed.
                            When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
                            between the number of resource copies in the target topology and the global minimum.
                            The global minimum is the minimum number of resource copies in a domain.
                            When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
                            to topologies that satisfy it.
                            It's an optional field. Default value is 1 and 0 is not allowed.
                          format: int32
                          minimum: 1
                          type: integer
                        topologyKey:
                          description: |-
                            TopologyKey is the key of cluster labels. Clusters that have a label with this key
                            and identical values are considered to be in the same topology.
                            We consider each <key, value> as a "bucket", and try to put balanced number
                            of replicas of the resource into each bucket honor the `MaxSkew` value.
                            It's a required field.
                          type: string
                        whenUnsatisfiable:
                          description: |-
                            WhenUnsatisfiable indicates how to deal with the resource if it doesn't satisfy
                            the spread constraint.
                            - DoNotSchedule (default) tells the scheduler not to schedule it.
                            - ScheduleAnyway tells the scheduler to schedule the resource in any cluster,
                              but giving higher precedence to topologies that would help reduce the skew.
                            It's an optional field.
                          type: string
                      required:
                      - topologyKey
                      type: object
                    type: array
                type: object
              policyHash:
                description: PolicyHash is the sha-256 hash value of the Policy field.
                format: byte
                type: string
            required:
            - policyHash
            type: object
          status:
            description: The observed status of SchedulingPolicySnapshot.
            properties:
              conditions:
                description: Conditions is an array of current observed conditions
                  for SchedulingPolicySnapshot.
                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
              observedCRPGeneration:
                description: |-
                  ObservedCRPGeneration is the generation of the CRP which the scheduler uses to perform
                  the scheduling cycle and prepare the scheduling status.
                format: int64
                type: integer
              targetClusters:
                description: |-
                  ClusterDecisions contains a list of names of member clusters considered by the scheduler.
                  Note that all the selected clusters must present in the list while not all the
                  member clusters are guaranteed to be listed due to the size limit. We will try to
                  add the clusters that can provide the most insight to the list first.
                items:
                  description: |-
                    ClusterDecision represents a decision from a placement
                    An empty ClusterDecision indicates it is not scheduled yet.
                  properties:
                    clusterName:
                      description: |-
                        ClusterName is the name of the ManagedCluster. If it is not empty, its value should be unique cross all
                        placement decisions for the Placement.
                      type: string
                    clusterScore:
                      description: ClusterScore represents the score of the cluster
                        calculated by the scheduler.
                      properties:
                        affinityScore:
                          description: |-
                            AffinityScore represents the affinity score of the cluster calculated by the last
                            scheduling decision based on the preferred affinity selector.
                            An affinity score may not present if the cluster does not meet the required affinity.
                          format: int32
                          type: integer
                        priorityScore:
                          description: |-
                            TopologySpreadScore represents the priority score of the cluster calculated by the last
                            scheduling decision based on the topology spread applied to the cluster.
                            A priority score may not present if the cluster does not meet the topology spread.
                          format: int32
                          type: integer
                      type: object
                    reason:
                      description: Reason represents the reason why the cluster is
                        selected or not.
                      type: string
                    selected:
                      description: Selected indicates if this cluster is selected
                        by the scheduler.
                      type: boolean
                  required:
                  - clusterName
                  - reason
                  - selected
                  type: object
                maxItems: 1000
                type: array
            required:
            - observedCRPGeneration
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
