---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.18.0
  name: recommendationrules.analysis.crane.io
spec:
  group: analysis.crane.io
  names:
    kind: RecommendationRule
    listKind: RecommendationRuleList
    plural: recommendationrules
    shortNames:
    - rr
    singular: recommendationrule
  scope: Cluster
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.runInterval
      name: RunInterval
      type: string
    - description: CreationTimestamp is a timestamp representing the server time when
        this object was created.
      jsonPath: .metadata.creationTimestamp
      name: AGE
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: RecommendationRule represents the configuration of an RecommendationRule
          object.
        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: RecommendationRuleSpec defines resources and runInterval
              to recommend
            properties:
              namespaceSelector:
                description: NamespaceSelector indicates resource namespaces to select
                  from
                properties:
                  any:
                    description: Select all namespace if true
                    type: boolean
                  matchNames:
                    description: List of namespace names to select from.
                    items:
                      type: string
                    type: array
                type: object
              recommenders:
                description: List of recommender type to run
                items:
                  description: Recommender referring to the Recommender in RecommendationConfiguration
                  properties:
                    config:
                      additionalProperties:
                        type: string
                      description: Override Recommendation configs
                      type: object
                    name:
                      description: Recommender's Name
                      type: string
                  required:
                  - name
                  type: object
                type: array
              resourceSelectors:
                description: ResourceSelector indicates how to select resources(e.g.
                  a set of Deployments) for a Recommendation.
                items:
                  description: ResourceSelector describes how the resources will be
                    selected.
                  properties:
                    apiVersion:
                      description: API version of the resource, e.g. "apps/v1"
                      type: string
                    kind:
                      description: Kind of the resource, e.g. Deployment
                      type: string
                    labelSelector:
                      description: |-
                        A label selector is a label query over a set of resources. The result of matchLabels and
                        matchExpressions are ANDed. An empty label selector matches all objects. A null
                        label selector matches no objects.
                      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 resource.
                      type: string
                  required:
                  - kind
                  type: object
                type: array
              runInterval:
                description: RunInterval between two recommendation
                type: string
            required:
            - namespaceSelector
            - recommenders
            - resourceSelectors
            type: object
          status:
            description: RecommendationRuleStatus represents the current state of
              an RecommendationRule item.
            properties:
              lastUpdateTime:
                description: LastUpdateTime is the last time the status updated.
                format: date-time
                type: string
              recommendations:
                description: Recommendations is a list of RecommendationMission that
                  run parallel.
                items:
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: |-
                        If referring to a piece of an object instead of an entire object, this string
                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
                        For example, if the object reference is to a container within a pod, this would take on a value like:
                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
                        the event) or if no container name is specified "spec.containers[2]" (container with
                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
                        referencing a part of an object.
                      type: string
                    kind:
                      description: |-
                        Kind of the referent.
                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
                      type: string
                    lastStartTime:
                      description: LastStartTime is last time we start a recommendation
                        mission.
                      format: date-time
                      type: string
                    message:
                      description: Message presents the running message for this mission
                      type: string
                    name:
                      description: |-
                        Name of the referent.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      type: string
                    namespace:
                      description: |-
                        Namespace of the referent.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
                      type: string
                    recommenderRef:
                      description: RecommenderRef presents recommender info for recommendation
                        mission.
                      properties:
                        config:
                          additionalProperties:
                            type: string
                          description: Override Recommendation configs
                          type: object
                        name:
                          description: Recommender's Name
                          type: string
                      required:
                      - name
                      type: object
                    resourceVersion:
                      description: |-
                        Specific resourceVersion to which this reference is made, if any.
                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
                      type: string
                    targetRef:
                      description: ObjectReference contains enough information to
                        let you inspect or modify the referred object.
                      properties:
                        apiVersion:
                          description: API version of the referent.
                          type: string
                        fieldPath:
                          description: |-
                            If referring to a piece of an object instead of an entire object, this string
                            should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
                            For example, if the object reference is to a container within a pod, this would take on a value like:
                            "spec.containers{name}" (where "name" refers to the name of the container that triggered
                            the event) or if no container name is specified "spec.containers[2]" (container with
                            index 2 in this pod). This syntax is chosen only to have some well-defined way of
                            referencing a part of an object.
                          type: string
                        kind:
                          description: |-
                            Kind of the referent.
                            More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
                          type: string
                        name:
                          description: |-
                            Name of the referent.
                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                          type: string
                        namespace:
                          description: |-
                            Namespace of the referent.
                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
                          type: string
                        resourceVersion:
                          description: |-
                            Specific resourceVersion to which this reference is made, if any.
                            More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
                          type: string
                        uid:
                          description: |-
                            UID of the referent.
                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
                          type: string
                      type: object
                      x-kubernetes-map-type: atomic
                    uid:
                      description: |-
                        UID of the referent.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                type: array
                x-kubernetes-list-type: atomic
              runNumber:
                description: RunNumber is the numbers of runs
                format: int32
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources: {}
