apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.8.0
  name: installplans.operators.coreos.com
spec:
  group: operators.coreos.com
  names:
    categories:
      - olm
    kind: InstallPlan
    listKind: InstallPlanList
    plural: installplans
    shortNames:
      - ip
    singular: installplan
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: The first CSV in the list of clusterServiceVersionNames
          jsonPath: .spec.clusterServiceVersionNames[0]
          name: CSV
          type: string
        - description: The approval mode
          jsonPath: .spec.approval
          name: Approval
          type: string
        - jsonPath: .spec.approved
          name: Approved
          type: boolean
      name: v1alpha1
      schema:
        openAPIV3Schema:
          description: InstallPlan defines the installation of a set of operators.
          type: object
          required:
            - metadata
            - spec
          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: InstallPlanSpec defines a set of Application resources to be installed
              type: object
              required:
                - approval
                - approved
                - clusterServiceVersionNames
              properties:
                approval:
                  description: Approval is the user approval policy for an InstallPlan. It must be one of "Automatic" or "Manual".
                  type: string
                approved:
                  type: boolean
                clusterServiceVersionNames:
                  type: array
                  items:
                    type: string
                generation:
                  type: integer
                source:
                  type: string
                sourceNamespace:
                  type: string
            status:
              description: "InstallPlanStatus represents the information about the status of steps required to complete installation. \n Status may trail the actual state of a system."
              type: object
              required:
                - catalogSources
                - phase
              properties:
                attenuatedServiceAccountRef:
                  description: AttenuatedServiceAccountRef references the service account that is used to do scoped operator install.
                  type: 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. TODO: this design is not final and this field is subject to change in the future.'
                      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
                bundleLookups:
                  description: BundleLookups is the set of in-progress requests to pull and unpackage bundle content to the cluster.
                  type: array
                  items:
                    description: BundleLookup is a request to pull and unpackage the content of a bundle to the cluster.
                    type: object
                    required:
                      - catalogSourceRef
                      - identifier
                      - path
                      - replaces
                    properties:
                      catalogSourceRef:
                        description: CatalogSourceRef is a reference to the CatalogSource the bundle path was resolved from.
                        type: 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. TODO: this design is not final and this field is subject to change in the future.'
                            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
                      conditions:
                        description: Conditions represents the overall state of a BundleLookup.
                        type: array
                        items:
                          type: object
                          required:
                            - status
                            - type
                          properties:
                            lastTransitionTime:
                              description: Last time the condition transitioned from one status to another.
                              type: string
                              format: date-time
                            lastUpdateTime:
                              description: Last time the condition was probed.
                              type: string
                              format: date-time
                            message:
                              description: A human readable message indicating details about the transition.
                              type: string
                            reason:
                              description: The reason for the condition's last transition.
                              type: string
                            status:
                              description: Status of the condition, one of True, False, Unknown.
                              type: string
                            type:
                              description: Type of condition.
                              type: string
                      identifier:
                        description: Identifier is the catalog-unique name of the operator (the name of the CSV for bundles that contain CSVs)
                        type: string
                      path:
                        description: Path refers to the location of a bundle to pull. It's typically an image reference.
                        type: string
                      properties:
                        description: The effective properties of the unpacked bundle.
                        type: string
                      replaces:
                        description: Replaces is the name of the bundle to replace with the one found at Path.
                        type: string
                catalogSources:
                  type: array
                  items:
                    type: string
                conditions:
                  type: array
                  items:
                    description: InstallPlanCondition represents the overall status of the execution of an InstallPlan.
                    type: object
                    properties:
                      lastTransitionTime:
                        type: string
                        format: date-time
                      lastUpdateTime:
                        type: string
                        format: date-time
                      message:
                        type: string
                      reason:
                        description: ConditionReason is a camelcased reason for the state transition.
                        type: string
                      status:
                        type: string
                      type:
                        description: InstallPlanConditionType describes the state of an InstallPlan at a certain point as a whole.
                        type: string
                message:
                  description: Message is a human-readable message containing detailed information that may be important to understanding why the plan has its current status.
                  type: string
                phase:
                  description: InstallPlanPhase is the current status of a InstallPlan as a whole.
                  type: string
                plan:
                  type: array
                  items:
                    description: Step represents the status of an individual step in an InstallPlan.
                    type: object
                    required:
                      - resolving
                      - resource
                      - status
                    properties:
                      optional:
                        type: boolean
                      resolving:
                        type: string
                      resource:
                        description: StepResource represents the status of a resource to be tracked by an InstallPlan.
                        type: object
                        required:
                          - group
                          - kind
                          - name
                          - sourceName
                          - sourceNamespace
                          - version
                        properties:
                          group:
                            type: string
                          kind:
                            type: string
                          manifest:
                            type: string
                          name:
                            type: string
                          sourceName:
                            type: string
                          sourceNamespace:
                            type: string
                          version:
                            type: string
                      status:
                        description: StepStatus is the current status of a particular resource an in InstallPlan
                        type: string
                startTime:
                  description: StartTime is the time when the controller began applying the resources listed in the plan to the cluster.
                  type: string
                  format: date-time
      served: true
      storage: true
      subresources:
        status: {}
