apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: deployersets.core.hybridapp.io
spec:
  group: core.hybridapp.io
  names:
    kind: DeployerSet
    listKind: DeployerSetList
    plural: deployersets
    singular: deployerset
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: DeployerSet is the Schema for the deployersets API
        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: DeployerSetSpec defines the desired state of DeployerSet
            properties:
              defaultDeployer:
                description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
                  Important: Run "operator-sdk generate k8s" to regenerate code after
                  modifying this file Add custom validation using kubebuilder tags:
                  https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
                type: string
              deployers:
                items:
                  description: DeployerSpecDescriptor defines the deployer structure
                  properties:
                    key:
                      description: NamespacedName of deployer for key
                      type: string
                    spec:
                      description: DeployerSpec defines the desired state of Deployer
                      properties:
                        capabilities:
                          items:
                            description: PolicyRule holds information that describes
                              a policy rule, but does not contain information about
                              who the rule applies to or which namespace the rule
                              applies to.
                            properties:
                              apiGroups:
                                description: APIGroups is the name of the APIGroup
                                  that contains the resources.  If multiple API groups
                                  are specified, any action requested against one
                                  of the enumerated resources in any API group will
                                  be allowed.
                                items:
                                  type: string
                                type: array
                              nonResourceURLs:
                                description: NonResourceURLs is a set of partial urls
                                  that a user should have access to.  *s are allowed,
                                  but only as the full, final step in the path Since
                                  non-resource URLs are not namespaced, this field
                                  is only applicable for ClusterRoles referenced from
                                  a ClusterRoleBinding. Rules can either apply to
                                  API resources (such as "pods" or "secrets") or non-resource
                                  URL paths (such as "/api"),  but not both.
                                items:
                                  type: string
                                type: array
                              resourceNames:
                                description: ResourceNames is an optional white list
                                  of names that the rule applies to.  An empty set
                                  means that everything is allowed.
                                items:
                                  type: string
                                type: array
                              resources:
                                description: Resources is a list of resources this
                                  rule applies to.  ResourceAll represents all resources.
                                items:
                                  type: string
                                type: array
                              verbs:
                                description: Verbs is a list of Verbs that apply to
                                  ALL the ResourceKinds and AttributeRestrictions
                                  contained in this rule.  VerbAll represents all
                                  kinds.
                                items:
                                  type: string
                                type: array
                            required:
                            - verbs
                            type: object
                          type: array
                        operatorRef:
                          description: 'ObjectReference contains enough information
                            to let you inspect or modify the referred object. ---
                            New uses of this type are discouraged because of difficulty
                            describing its usage when embedded in APIs.  1. Ignored
                            fields.  It includes many fields which are not generally
                            honored.  For instance, ResourceVersion and FieldPath
                            are both very rarely valid in actual usage.  2. Invalid
                            usage help.  It is impossible to add specific help for
                            individual usage.  In most embedded usages, there are
                            particular     restrictions like, "must refer only to
                            types A and B" or "UID not honored" or "name must be restricted".     Those
                            cannot be well described when embedded.  3. Inconsistent
                            validation.  Because the usages are different, the validation
                            rules are different by usage, which makes it hard for
                            users to predict what will happen.  4. The fields are
                            both imprecise and overly precise.  Kind is not a precise
                            mapping to a URL. This can produce ambiguity     during
                            interpretation and require a REST mapping.  In most cases,
                            the dependency is on the group,resource tuple     and
                            the version of the actual struct is irrelevant.  5. We
                            cannot easily change it.  Because this type is embedded
                            in many locations, updates to this type     will affect
                            numerous schemas.  Don''t make new APIs embed an underspecified
                            API type they do not control. Instead of using this type,
                            create a locally provided and used type that is well-focused
                            on your reference. For example, ServiceReferences for
                            admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                            .'
                          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
                          type: object
                        placementTarget:
                          description: GroupVersionResource unambiguously identifies
                            a resource.  It doesn't anonymously include GroupVersion
                            to avoid automatic coersion.  It doesn't use a GroupVersion
                            to avoid custom marshalling
                          properties:
                            group:
                              type: string
                            resource:
                              type: string
                            version:
                              type: string
                          required:
                          - group
                          - resource
                          - version
                          type: object
                        scope:
                          description: ResourceScope is an enum defining the different
                            scopes available to a custom resource
                          type: string
                        type:
                          description: 'Important: Run "operator-sdk generate k8s"
                            to regenerate code after modifying this file Add custom
                            validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
                          type: string
                      required:
                      - type
                      type: object
                  required:
                  - key
                  - spec
                  type: object
                type: array
            type: object
          status:
            description: DeployerSetStatus defines the observed state of DeployerSet
            properties:
              deployers:
                items:
                  description: DeployerStatusDescriptor defines the deployer status
                  properties:
                    key:
                      description: NamespacedName of deployer for key
                      type: string
                    status:
                      description: DeployerStatus defines the observed state of Deployer
                      type: object
                  required:
                  - key
                  - status
                  type: object
                type: array
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
