4.8 KiB · text History df2320f
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: mutantdeployments.neiam.org
spec:
  group: neiam.org
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                deployment:
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                mutations:
                  type: array
                  items:
                    type: object
                    properties:
                      label:
                        type: string
                      env:
                        type: object
                        additionalProperties:
                          type: string
                      instances:
                        type: integer
              required:
                - deployment
                - mutations
  scope: Namespaced
  names:
    plural: mutantdeployments
    singular: mutantdeployment
    kind: MutantDeployment
    shortNames:
      - md
---
# A Mutation: a base Deployment plus variants of it, like a
# MutantDeployment, but configured at runtime through the operator's HTTP
# API rather than declared in git. Schema matches `Mutation` in src/crd.rs.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: mutations.neiam.org
spec:
  group: neiam.org
  scope: Namespaced
  names:
    plural: mutations
    singular: mutation
    kind: Mutation
    shortNames:
      - mut
  versions:
    - name: v1
      served: true
      storage: true
      subresources:
        status: {}
      additionalPrinterColumns:
        - name: Base
          type: string
          jsonPath: .spec.deployment.metadata.name
        - name: Ready
          type: string
          jsonPath: .status.summary
        - name: Secret
          type: string
          jsonPath: .status.secret
        - name: Age
          type: date
          jsonPath: .metadata.creationTimestamp
      schema:
        openAPIV3Schema:
          type: object
          required:
            - spec
          properties:
            spec:
              type: object
              required:
                - deployment
              properties:
                deployment:
                  description: The base Deployment every variant is derived from.
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                variants:
                  type: array
                  default: []
                  items:
                    type: object
                    required:
                      - label
                      - instances
                    properties:
                      label:
                        description: Suffix of the variant's Deployment name; unique within the Mutation.
                        type: string
                        pattern: '^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$'
                      env:
                        type: object
                        default: {}
                        additionalProperties:
                          type: string
                      instances:
                        type: integer
                        format: int32
                        minimum: 0
            status:
              type: object
              properties:
                summary:
                  description: e.g. "2/3 variants ready".
                  type: string
                  nullable: true
                secret:
                  description: The Mutation's generated Secret, holding a random `token`.
                  type: string
                  nullable: true
                message:
                  type: string
                  nullable: true
                variants:
                  type: array
                  items:
                    type: object
                    required:
                      - label
                      - state
                    properties:
                      label:
                        type: string
                      state:
                        type: string
                        enum: [Progressing, Ready, Invalid, Conflict]
                      message:
                        type: string
                        nullable: true
                      deployment:
                        description: The generated Deployment.
                        type: string
                        nullable: true
                      replicas:
                        type: integer
                        format: int32
                        nullable: true
                      readyReplicas:
                        type: integer
                        format: int32
                        nullable: true