Ctrl K
ComunidadGuías…

values-schema.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
$schema: 'http://json-schema.org/draft-07/schema'
version: 3
additionalProperties: true
definitions:
  rawValues:
    description: "May define value overrides for a chart. WARNING: these values currently have no schema and can't be validated as such, and may break deployment. You are on your own here."
    type: object
  alerts:
    additionalProperties: false
    type: object
    properties:
      repeatInterval:
        default: 3h
        description: Waiting time before sending a notification again after it was sent successfully for an alert.
        title: Repeat Interval
        type: string
      groupInterval:
        default: 5m
        description: Waiting time before sending a notification about new alerts that are added to a group of alerts.
        title: Group Interval
        type: string
      receivers:
        description: Select notification channel(s) for receiving alerts. Use 'none' if no channel available.
        title: Notification receivers
        type: array
        items:
          enum:
            - slack
            - msteams
            # - email
            - none
          type: string
        uniqueItems: true
      slack:
        title: Slack
        description: Configure Slack endpoints for alerts.
        additionalProperties: false
        properties:
          channel:
            default: mon-apl
            description: The Slack channel for non-critical notifications.
            title: Non-critical
            type: string
          channelCrit:
            default: mon-apl-crit
            description: The Slack channel for critical notifications.
            title: Critical
            type: string
          url:
            type: string
            description: A Slack webhook URL.
            x-secret: ''
        # TODO: Enable again when form rework is done
        # required:
        #   - url
        type: object
      msteams:
        additionalProperties: false
        description: Configure Microsoft Teams endpoints for alerts.
        properties:
          highPrio:
            title: High prio web hook
            type: string
            x-secret: ''
          lowPrio:
            title: Low prio web hook
            type: string
            x-secret: ''
        # TODO: Enable again when form rework is done
        # required:
        #   - highPrio
        #   - lowPrio
        title: Microsoft Teams
        type: object
      # NOTE: keep this in case email alertReceiver gets re-enabled again
      # email:
      #   title: Email
      #   description: Configure email endpoints for alerts.
      #   additionalProperties: false
      #   properties:
      #     critical:
      #       title: Critical Events
      #       $ref: '#/email'
      #       description: One or more email addresses (comma separated) for critical events.
      #     nonCritical:
      #       title: Non-critical Events
      #       $ref: '#/email'
      #       description: One or more email addresses (comma separated) for non-critical events.
      #   # TODO: Enable again when form rework is done
      #   # required:
      #   #   - critical
      #   #   - nonCritical
      #   type: object
  annotations:
    $ref: '#/definitions/labelsAnnotations'
    description: A set of annotations.
  autoscaling:
    additionalProperties: false
    properties:
      maxReplicas:
        type: integer
        default: 10
      minReplicas:
        type: integer
        default: 1
  autoscalingEnabled:
    additionalProperties: false
    properties:
      enabled:
        default: true
        type: boolean
      maxReplicas:
        type: integer
        default: 10
      minReplicas:
        type: integer
        default: 1
      targetCPUUtilizationPercentage:
        type: integer
        default: 80
      targetMemoryUtilizationPercentage:
        type: integer
        default: 80
  gatewayAutoscallingEnabled:
    additionalProperties: false
    properties:
      enabled:
        default: true
        type: boolean
      maxReplicas:
        type: integer
        default: 10
      minReplicas:
        type: integer
        default: 1
      targetCPUUtilizationPercentage:
        type: integer
        default: 80
  akamai:
    definitions:
      dns:
        properties:
          host:
            title: Akamai API host
            description: Akamai Edgegrid API server
            $ref: '#/definitions/wordCharacterPattern'
          accessToken:
            title: Akamai access token
            description: Akamai Edgegrid API access token
            $ref: '#/definitions/wordCharacterPattern'
            x-secret: ''
          clientToken:
            title: Akamai client token
            description: Akamai Edgegrid API client token
            $ref: '#/definitions/wordCharacterPattern'
            x-secret: ''
          clientSecret:
            title: Akamai client secret
            description: Akamai Edgegrid API client secret
            $ref: '#/definitions/wordCharacterPattern'
            x-secret: ''
        required:
          - host
          - accessToken
          - clientToken
          - clientSecret
  aws:
    definitions:
      accessKey:
        title: AWS access key
        description: An AWS access key ID.
        $ref: '#/definitions/wordCharacterPattern'
        x-secret: ''
      secretKey:
        title: AWS secret key
        description: An AWS secret key.
        type: string
        x-secret: ''
      region:
        title: AWS region
        description: An AWS region.
        $ref: '#/definitions/wordCharacterPattern'
      role:
        description: Role may be set explicitly if no metadata can be accessed.
        example: arn:aws:iam::YYYYYYYYYYYY:role/dns-manager
        $ref: '#/definitions/wordCharacterPattern'
  azure:
    definitions:
      clientId:
        title: Azure client id
        description: An Azure client id.
        $ref: '#/definitions/wordCharacterPattern'
      clientSecret:
        title: Azure client secret
        description: An Azure client secret.
        type: string
        x-secret: ''
      dns:
        properties:
          resourceGroup:
            $ref: '#/definitions/azure/definitions/resourceGroup'
          hostedZoneName:
            title: Hosted zone name
            description: Name of the DNS zone that should be used.
            $ref: '#/definitions/wordCharacterPattern'
          tenantId:
            $ref: '#/definitions/azure/definitions/tenantId'
          subscriptionId:
            $ref: '#/definitions/azure/definitions/subscriptionId'
          aadClientId:
            $ref: '#/definitions/azure/definitions/clientId'
          aadClientSecret:
            $ref: '#/definitions/azure/definitions/clientSecret'
            title: Client secret
            type: string
            description: Azure Application Client Secret
            x-secret: ''
        required:
          - tenantId
          - subscriptionId
          - resourceGroup
          - aadClientId
          - aadClientSecret
      environment:
        title: Azure environment
        description: An Azure environment.
        type: string
        default: AzurePublicCloud
        enum:
          - AzurePublicCloud
          - AzureChinaCloud
          - AzureUSGovernment
          - AzureGermanCloud
      tenantId:
        title: Azure tenant id
        description: An Azure tenant id.
        $ref: '#/definitions/wordCharacterPattern'
      subscriptionId:
        title: Azure subscription id
        description: An Azure subscription id.
        $ref: '#/definitions/wordCharacterPattern'
      resourceGroup:
        title: Resource group
        description: An Azure resource group.
        $ref: '#/definitions/wordCharacterPattern'
  catalog:
    additionalProperties: false
    properties:
      name:
        type: string
        description: 'A lowercase name that starts with a letter and may contain dashes.'
        pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])$'
      repositoryUrl:
        type: string
        description: 'Git repository URL for the catalog'
        pattern: '^(https?|git|ssh)://.*'
      branch:
        type: string
        description: 'Git branch or tag to use'
      enabled:
        type: boolean
        description: 'Whether this catalog is active'
      chartsPath:
        type: string
        description: 'Path within the repository where charts are located'
        default: 'charts'
      secretName:
        type: string
        description: 'Kubernetes secret name containing git credentials (for private repos)'
        pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
    required:
      - name
      - repositoryUrl
      - branch
  cluster:
    additionalProperties: false
    properties:
      apiServer:
        description: Used to generate KUBECONFIG for download, for local access to target cluster.
        pattern: '^https:\/\/.*'
      domainSuffix:
        $ref: '#/definitions/domain'
        description: Domain suffix for the cluster. Also added to list of dns zones in the Otomi Console.
      k8sContext:
        $ref: '#/definitions/k8sContext'
        description: Optional. Must be set for development mode and must point to an existing context in KUBECONFIG.
      name:
        $ref: '#/definitions/idName'
        description: Short name that will be used in construction of cluster domain and messaging.
      owner:
        $ref: '#/definitions/idName'
        description: The name of the organization owning the cluster.
        default: otomi
      provider:
        $ref: '#/definitions/provider'
      linode:
        additionalProperties: false
        properties:
          tier:
            type: string
            description: Linode Kubernetes Engine tier (standard LKE or enterprise LKE-E)
            enum:
              - standard
              - enterprise
      defaultStorageClass:
        type: string
        description: Default storage class for platform components. Use '' for relying on the cluster's default storage class.
        default: ''
    required:
      - name
      - provider
  containerSpecNoSec:
    properties:
      image:
        $ref: '#/definitions/image'
      resources:
        $ref: '#/definitions/resources'
      env:
        $ref: '#/definitions/env'
      files:
        $ref: '#/definitions/files'
      nativeSecrets:
        $ref: '#/definitions/nativeSecrets'
        description: Reserved for internal use.
      secrets:
        $ref: '#/definitions/secrets'
      secretMounts:
        $ref: '#/definitions/secretMounts'
      command:
        type: array
        items:
          type: string
      args:
        type: array
        items:
          type: string
    required:
      - image
      - resources
  containerSpec:
    allOf:
      - $ref: '#/definitions/securityContext'
      - $ref: '#/definitions/containerSpecNoSec'
  cpuQuantity:
    description: Amount of cpu cores, or slice of cpu core in millis.
    examples:
      - '1'
      - 200m
    pattern: ^([1-9][0-9]*|([0]|[1-9]+)\\.[0-9]{1,3}|[1-9][0-9]*m)$
    type: string
  domain:
    pattern: ^([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?$
    type: string
  wildcardDomainOrIp:
    pattern: ^((\*\.)?([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?|([a-f0-9:]+:+)+[a-f0-9]+)$
    type: string
  duration:
    description: 'Prometheus duration (See: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file)'
    pattern: '((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)'
    type: string
    default: 1d
  email:
    pattern: '^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
    type: string
  env:
    additionalProperties: false
    examples:
      - FOO: bar
      - bar: foo
    patternProperties:
      '[a-zA-Z_]{1,}[a-zA-Z0-9_]*':
        maxLength: 131072
        type: string
    nullable: true
    type: object
    title: Environment variables
  files:
    additionalProperties: false
    description: Dictionary of absolute path > content pairs.
    patternProperties:
      '^[/].*':
        type: string
  google:
    additionalProperties: false
    definitions:
      accountJson:
        type: string
        x-secret: ''
      project:
        $ref: '#/definitions/wordCharacterPattern'
  hostPort:
    pattern: '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]):()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5])$'
    type: string
  idName:
    description: A lowercase name that starts with a letter and may contain dashes.
    pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])$'
    type: string
  image:
    additionalProperties: false
    properties:
      pullPolicy:
        default: IfNotPresent
        enum:
          - IfNotPresent
          - Always
        type: string
      repository:
        $ref: '#/definitions/repository'
      tag:
        default: latest
        $ref: '#/definitions/wordCharacterPattern'
    title: Container image
  imagePullPolicy:
    default: IfNotPresent
    enum:
      - IfNotPresent
      - Always
    type: string
  imageTag:
    x-default: stable
    pattern: '[\w][\w.-]{0,127}'
    type: string
    x-message: a valid container registry image tag
  imageSimple:
    properties:
      tag:
        $ref: '#/definitions/imageTag'
      pullPolicy:
        $ref: '#/definitions/imagePullPolicy'
    required:
      - tag
    type: object
    title: Container image
  ingressClassParameters:
    type: object
    properties:
      entrypoint:
        description: A public IP address that has a route to a private loadbalancer ip, allowing access to private clusters. (Provider "custom" only.)
        type: string
      network:
        title: Load balancer type
        type: string
        enum:
          - public
        default: public
      loadBalancerIP:
        title: Load balancer IP address
        description: A static IP address assigned to a load balancer
        type: string
      sourceIpAddressFiltering:
        title: Source IP address filtering
        type: string
        description: 'Whitelist source IP address ranges. The value is a comma separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1'
      annotations:
        properties:
          annotations:
            $ref: '#/definitions/annotations'
      gateway:
        type: object
        description: 'Ingress gateway deployment configuration'
        properties:
          replicas:
            type: integer
            minimum: 1
          minAvailable:
            type: integer
            minimum: 1
          resources:
            $ref: '#/definitions/resources'
          autoscaling:
            $ref: '#/definitions/gatewayAutoscallingEnabled'
  ipV4Address:
    type: string
    pattern: ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
  jobs:
    description: You may pass an array of Job objects. The Kubernetes API accepts
      a Job specification, which is meant for run-to-completion apps (e.g. batch
      Jobs).
    items:
      type: object
      allOf:
        - properties:
            id:
              type: string
              readOnly: true
          type: object
        - $ref: '#/definitions/jobSpec'
        - $ref: '#/definitions/podSpec'
    type: array
  jobSpec:
    properties:
      type:
        default: Job
        enum:
          - Job
          - CronJob
        type: string
      name:
        $ref: '#/definitions/idName'
        title: Name
        description: A job name
        example: some-job
      enabled:
        default: true
        type: boolean
      runPolicy:
        default: OnSpecChange
        description: |
          If runPolicy is set to 'Always', the job controller will always be re-deployed after a successful deployment with Helm.
          If runPolicy is set to 'OnSpecChange', the job controller will only be re-deployed if one changes this specification.
        enum:
          - Always
          - OnSpecChange
        type: string
      schedule:
        default: 0 1 * * *
        description: Must give a cron-type expression if the job type is 'Cronjob'.
        type: string
      script:
        $ref: '#/definitions/script'
      shell:
        default: /bin/sh
        description: Full path to a shell binary that exists in the image.
        type: string
      ttlSecondsAfterFinished:
        default: 86400
        description: Time To Live after job is finished in seconds. Will be removed afterwards.
        minimum: 0
        title: TTL after finished
        type: integer
      init:
        type: array
        items:
          $ref: '#/definitions/containerSpec'
        nullable: true
    required:
      - name
      - script
      - type
    type: object
  k8sContext:
    description: The cluster k8s context as found in $KUBECONFIG.
    $ref: '#/definitions/wordCharacterPattern'
  labels:
    $ref: '#/definitions/labelsAnnotations'
    description: A set of labels.
  labelsAnnotations:
    additionalProperties: false
    patternProperties:
      '^((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]){1,253}\/)?([a-z0-9A-Z]+[a-z0-9A-Z-_.]+[a-z0-9A-Z]){1,63}$':
        pattern: '^((.){1,253}\/)?(.){1,63}$'
        type: string
  logLevel:
    type: string
    default: info
    enum:
      - error
      - warn
      - info
      - debug
      - trace
  memoryQuantity:
    description: Amount of memory. Valid units are E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki.
    examples:
      - 1Mi
      - 0.5M
    pattern: '^([0-9]+\.)?[0-9]+(E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki)?$'
    type: string
  nativeSecrets:
    description: List of kubernetes secret names.
    additionalProperties: false
    patternProperties:
      '[a-zA-Z_]{1,}[a-zA-Z0-9_]*':
        maxLength: 131072
        type: string
    nullable: true
    type: object
    title: Kubernetes secrets
  appNetworkPolicyConfig:
    type: object
    properties:
      enabled:
        type: boolean
        default: false
        description: Enable network policies for this application with sensible defaults
  netpol:
    type: object
    properties:
      name:
        $ref: '#/definitions/idName'
        title: Network Policy name
        description: 'A unique name for the network policy'
      ruleType:
        properties:
          type:
            type: string
            enum:
              - ingress
              - egress
          ingress:
            properties:
              toLabelName:
                type: string
                title: Selector label name
                description: 'The name of the Pod selector label'
              toLabelValue:
                type: string
                title: Selector label value
                description: 'The value of the Pod selector label'
              mode:
                default: AllowOnly
                enum:
                  - AllowOnly
                  - AllowAll
              allow:
                title: Add team or team with service
                type: array
                items:
                  type: object
                  properties:
                    fromLabelName:
                      type: string
                      title: Selector label name
                      description: 'The name of the Pod selector label'
                    fromLabelValue:
                      type: string
                      title: Selector label value
                      description: 'The value of the Pod selector label'
                    fromNamespace:
                      $ref: '#/definitions/idName'
                      title: Namespace name
                      description: 'The name of the namespace'
                  required:
                    - fromNamespace
          egress:
            properties:
              domain:
                title: FQDN, Wildcard domain, or IP address
                $ref: '#/definitions/wildcardDomainOrIp'
              ports:
                properties:
                  number:
                    title: Port number
                    type: integer
                    minimum: 1
                    maximum: 65535
                  protocol:
                    title: Protocol
                    type: string
                    enum: [HTTPS, HTTP, TCP]
                    default: HTTPS
                required:
                  - number
                  - protocol
                default:
                  - number: 443
                    protocol: HTTPS
            required:
              - domain
        required:
          - type
    required:
      - name
  path:
    description: An absolute path
    type: string
    pattern: '^[/].*$'
  podSecurityContext:
    allOf:
      - $ref: '#/definitions/securityContext'
      - properties:
          fsGroup:
            description: Supplementary group ID. Volumes that support ownership management are modified to be owned and writable by this ID.
            $ref: '#/definitions/unixOwnerId'
          fsGroupChangePolicy:
            description: |
              'Defines behavior for changing ownership and permission of the volume before being exposed inside a Pod. This field only applies to volume types that support fsGroup controlled ownership and permissions.
              This field has two possible values:
              - OnRootMismatch: Only change permissions and ownership if permission and ownership of root directory does not match with expected permissions of the volume. This could help shorten the time it takes to change ownership and permission of a volume.
              - Always: Always change permission and ownership of the volume when volume is mounted.'
            type: string
            enum:
              - Always
              - OnRootMismatch
    description: Security context for the pod.
    title: Pod security context
  podSpec:
    allOf:
      - properties:
          annotations:
            $ref: '#/definitions/annotations'
            title: Pod annotations
        type: object
      - $ref: '#/definitions/podSecurityContext'
      - $ref: '#/definitions/containerSpec'
    type: object
  portNumber:
    maximum: 32768
    minimum: 80
    type: integer
  provider:
    type: string
    description: Enter the cloud provider of the cluster.
    enum:
      - custom
      - linode
    default: linode
  registry:
    pattern: '^[a-z0-9]+(?:[._-][a-z0-9]+)*$'
    type: string
  repoUrl:
    description: Path to a remote git repo with or without protocol prefix of either https:// or file:// (https:// used if omitted)
    pattern: '^(https://|file://)?(.+@)*([\w\d\.]+)(:[\d]+){0,1}/*(.*)$'
    type: string
  repository:
    description: A container image repository.
    pattern: '^[a-z0-9]+(?:[/._-]{1,2}[a-z0-9]+)*$'
    type: string
  resource:
    additionalProperties: false
    properties:
      cpu:
        $ref: '#/definitions/cpuQuantity'
      memory:
        $ref: '#/definitions/memoryQuantity'
    required:
      - cpu
      - memory
  resources:
    additionalProperties: false
    description: Compute resources for containers.
    properties:
      limits:
        $ref: '#/definitions/resource'
        description: Requested resources (best effort).
      requests:
        $ref: '#/definitions/resource'
        description: Requested resources (guaranteed).
    required:
      - limits
      - requests
    title: Pod resources
  unixOwnerIdRange:
    type: object
    additionalProperties: false
    required: [min, max]
    properties:
      min:
        type: integer
        minimum: 0
        maximum: 65535
      max:
        type: integer
        minimum: 0
        maximum: 65535
  unixOwnerId:
    description: The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
    type: integer
    minimum: 0
    maximum: 65535
    default: 1001
  script:
    description: May specify a non-empty string containing an executable script.
    type: string
    properties:
      id:
        readOnly: true
        type: string
      name:
        $ref: '#/definitions/idName'
    required:
      - name
      - type
  backupSchedule:
    default: 0 0 * * *
    description: Cron-type expression to schedule the backup. Defaults to once a day at 00:00.
    type: string
  secret:
    type: object
    properties:
      id:
        readOnly: true
        type: string
      clusterWide:
        description: Will create the secret in all namespaces.
        type: boolean
        default: false
      teamWide:
        description: Will create the secret in all team-* namespaces.
        type: boolean
        default: false
      name:
        $ref: '#/definitions/idName'
      namespace:
        $ref: '#/definitions/idName'
        description: A kubernetes namespace.
    required:
      - name
    oneOf:
      - title: Generic
        properties:
          type:
            default: generic
            enum:
              - generic
          entries:
            type: array
            items:
              description: A property name at vaultPath
              minItems: 1
              # a valid secret key must consist of alphanumeric characters, '-', '_' or '.' (e.g. 'key.name',  or 'KEY_NAME',  or 'key-name' )
              pattern: '^[-._a-zA-Z0-9]+$'
              type: string
            uniqueItems: true
        required:
          - type
          - entries
      - title: Docker registry
        properties:
          type:
            default: docker-registry
            enum:
              - docker-registry
            type: string
        required:
          - type
      - title: TLS
        properties:
          type:
            default: tls
            enum:
              - tls
            type: string
          crt:
            type: string
            default: 'tls.crt'
          key:
            type: string
            default: 'tls.key'
          ca:
            type: string
            default: 'ca.crt'
        required:
          - type
          - crt
          - key
  secrets:
    description: List of secret names that will have their props injected as env vars into the container.
    items:
      type: string
      pattern: '[a-zA-Z_]{1,}[a-zA-Z0-9_]*'
    nullable: true
    title: Secrets
    type: array
  secretMounts:
    description: Dictionary of absolute folder path > secret name. Will mount the contents of the secret in the container at the specified folder path.
    examples:
      - /foo: bar
    nullable: true
    patternProperties:
      '^[/].*$':
        type: string
    title: Secret mounts
    type: object
  secretTemplates:
    definitions:
      otomiAdminUsername:
        x-secret: 'otomi-admin'
  securityContext:
    additionalProperties:
      uniqueItems: true
    properties:
      runAsUser:
        $ref: '#/definitions/unixOwnerId'
      runAsNonRoot:
        description: Enforces that the container must run as non root. This implies that the UID must also be set with runAsUser.
        type: boolean
        default: true
      runAsGroup:
        description: The GID to run the entrypoint of the container process. Defaults to group specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
        $ref: '#/definitions/unixOwnerId'
  service:
    additionalProperties: false
    properties:
      trafficControl:
        title: Traffic Control
        description: Split traffic between multiple services (blue/green, canary)
        properties:
          enabled:
            type: boolean
            default: false
          weightV1:
            type: integer
            default: 90
          weightV2:
            type: integer
            default: 10
      headers:
        properties:
          response:
            properties:
              set:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    value:
                      type: string
                  required:
                    - name
                    - value
          request:
            properties:
              set:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    value:
                      type: string
                  required:
                    - name
                    - value
      ksvc:
        type: object
        properties:
          predeployed:
            description: Set this flag it the service is managed by knative service
            type: boolean
            default: false
      name:
        $ref: '#/definitions/idName'
        description: Short name. Will be used for generation of knative service name, as well as service URL.
      namespace:
        $ref: '#/definitions/idName'
        description: A kubernetes namespace. Only used by core services, so should be disallowed for non-admins.
      paths:
        items:
          description: |
            Path mapping to only route certain paths to the service. This allows micro services to operate on the same domain and port.
            When left empty all paths will go to this service.
          $ref: '#/definitions/wordCharacterPattern'
        # nullable: true
        type: array
      port:
        $ref: '#/definitions/portNumber'
        description: Points to the backing k8s service (only used when 'svc' is set).
      ingressClassName:
        description: Ingress class name
        $ref: '#/definitions/idName'
        default: platform
      svc:
        $ref: '#/definitions/idName'
        description: When given a backing k8s service is expected to be deployed with this name, which will be exposed through this team service.
      useCname:
        description: Will configure additional host(CNAME) for the service.
        type: boolean
        default: false
      cname:
        properties:
          domain:
            description: CNAME of the service.
            type: string
          tlsSecretName:
            description: Kubernetes secret name of type TLS.
            $ref: '#/definitions/idName'
      removeRequestHeaders:
        description: >-
          Strip selected headers from HTTP request.
        type: array
        items:
          type: string
    required:
      - name
  size:
    description: Disk size. Valid units are E|P|T|G|Ti|Gi.
    examples:
      - 1Gi
      - 0.5Ti
    pattern: '^([0-9]+\.)?[0-9]+(E|P|T|G||Ti|Gi)?$'
    type: string
  subdomainType:
    type: string
    # A lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com')
    pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$'
  team:
    additionalProperties: false
    properties:
      settings:
        properties:
          id:
            $ref: '#/definitions/idName'
            description: Must be the same as the name.
          networkPolicy:
            ingressPrivate:
              title: Enable filtering of ingress traffic inside the cluster
              description: When set a user can define ingress from other services for a particular team service
              type: boolean
              default: true
            egressPublic:
              title: Enable filtering of egress traffic outside the cluster
              description: When set a user can define egress towards FQDNs and public IPs for a team service
              type: boolean
              default: true
          managedMonitoring:
            title: Managed monitoring
            description: Activate managed Grafana, Prometheus or Alertmanager instances
            properties:
              grafana:
                type: boolean
              alertmanager:
                type: boolean
          limitRange:
            description: 'Kubernetes limit range. As is.'
            properties:
              default:
                $ref: '#/definitions/resource'
              defaultRequest:
                $ref: '#/definitions/resource'
          oidc:
            additionalProperties: false
            properties:
              groupMapping:
                description: IDP group id to map onto this team.
                $ref: '#/definitions/wordCharacterPattern'
          resourceQuota:
            description: 'List of kubernetes resource quota. Should adhere to the "spec.hard" format as described here: https://kubernetes.io/docs/concepts/policy/resource-quotas/. Not validated as there is no schema published. Change at your own risk.'
            type: array
            items:
              type: object
              properties:
                name:
                  type: string
                value:
                  type: string
              required:
                - name
                - value
          selfService:
            $ref: '#/definitions/teamSelfService'
          alerts:
            $ref: '#/definitions/alerts'
      apps:
        additionalProperties: true
        alertmanager:
          additionalProperties: false
          properties:
            resources:
              $ref: '#/definitions/resources'
        grafana:
          additionalProperties: false
          properties:
            additionalProperties: false
            properties:
              grafana:
                $ref: '#/definitions/resources'
              sidecar:
                $ref: '#/definitions/resources'
        tekton:
          additionalProperties: false
          properties:
            resources:
              additionalProperties: false
              properties:
                dashboard:
                  $ref: '#/definitions/resources'
                buildpacksTask:
                  $ref: '#/definitions/resources'
                gitCloneTask:
                  $ref: '#/definitions/resources'
                grypeTask:
                  $ref: '#/definitions/resources'
                kanikoTask:
                  $ref: '#/definitions/resources'
      services:
        items:
          $ref: '#/definitions/service'
        type: array
      netpols:
        items:
          $ref: '#/definitions/netpol'
        type: array
      workloads:
        type: array
        items:
          $ref: '#/definitions/workload'
      policies:
        type: object
      builds:
        type: array
        items:
          $ref: '#/definitions/build'
      codeRepos:
        type: array
        items:
          $ref: '#/definitions/codeRepo'
  teamSelfService:
    title: Team Permissions
    description: Grant team permissions to modify certain configuration parameters.
    type: object
    properties:
      teamMembers:
        title: Team Members Permissions
        type: object
        properties:
          createServices:
            title: Create Services
            type: boolean
            default: false
            description: Permission to create services.
          editSecurityPolicies:
            title: Edit Security Policies
            type: boolean
            default: false
            description: Permission to edit security policies.
          useCloudShell:
            title: Use Cloud Shell
            type: boolean
            default: false
            description: Permission to use the cloud shell.
          downloadKubeconfig:
            title: Download Kubeconfig
            type: boolean
            default: false
            description: Permission to download the kubeconfig.
          downloadDockerLogin:
            title: Download Docker Login
            type: boolean
            default: false
            description: Permission to download the docker login configuration.
        required:
          - createServices
          - editSecurityPolicies
          - useCloudShell
          - downloadKubeconfig
          - downloadDockerLogin
  x-acl:
    platformAdmin: [read-any, update-any]
    teamAdmin: [read]
    teamMember: [read]
  backupRetentionPolicy:
    default: 7d
    description: Delete backups according to retention policy. In DAYS|WEEKS|MONTHS
    title: Retention policy
    type: string
  url:
    pattern: '^https?:\/\/[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)'
    type: string
  volumes:
    items:
      additionalProperties: false
      properties:
        name:
          description: Name must match mount name.
          $ref: '#/definitions/idName'
        configMap:
          properties:
            name:
              $ref: '#/definitions/idName'
    type: array
  wordCharacterPattern:
    type: string
    # At least one non whitespace character
    pattern: ^[^\s]+$
  policies:
    type: object
  build:
    type: object
    description: Define location of code to build
    properties:
      name:
        description: Name of the build
        $ref: '#/definitions/idName'
      imageName:
        description: Name of the image
        $ref: '#/definitions/idName'
      tag:
        description: Image tag
        $ref: '#/definitions/imageTag'
      trigger:
        type: boolean
        default: false
      externalRepo:
        type: boolean
        description: Select when using an external private Git repository.
        default: false
      scanSource:
        type: boolean
        default: true
        description: Select to scan source
      secretName:
        description: The name of the secret with the credentials of the external private Git repository
        $ref: '#/definitions/idName'
      mode:
        properties:
          docker:
            properties:
              repoUrl:
                description: URL of the Git repository holding the application code.
                $ref: '#/definitions/url'
              revision:
                description: This may be a commit sha, branch name, or tag. If omitted, will equal to HEAD.
                $ref: '#/definitions/wordCharacterPattern'
                default: HEAD
              path:
                description: A relative directory path within the Git repository.
                type: string
                default: ./Dockerfile
              envVars:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    value:
                      type: string
                  required:
                    - name
                    - value
          buildpacks:
            properties:
              repoUrl:
                description: URL of the Git repository holding the application code.
                $ref: '#/definitions/url'
              revision:
                description: This may be a commit sha, branch name, or tag. If omitted, will equal to HEAD.
                $ref: '#/definitions/wordCharacterPattern'
                default: HEAD
              path:
                description: A relative directory path within the Git repository.
                type: string
              envVars:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    value:
                      type: string
                  required:
                    - name
                    - value
    required:
      - name
  sealedsecret:
    type: object
    description: Define location of code to build
    properties:
      name:
        $ref: '#/definitions/idName'
      namespace:
        $ref: '#/definitions/idName'
      immutable:
        description: 'Immutable, if set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified).'
        type: boolean
      type:
        description: Used to facilitate programmatic handling of secret data.
        type: string
        default: kubernetes.io/opaque
        enum:
          [
            'kubernetes.io/opaque',
            'kubernetes.io/service-account-token',
            'kubernetes.io/dockercfg',
            'kubernetes.io/dockerconfigjson',
            'kubernetes.io/basic-auth',
            'kubernetes.io/ssh-auth',
            'kubernetes.io/tls',
          ]
      encryptedData:
        type: object
      metadata:
        type: object
    required:
      - type
      - encryptedData
      - name
  workload:
    type: object
    description: Define location of the application's manifests or chart
    properties:
      name:
        $ref: '#/definitions/idName'
      url:
        description: URL to either Helm or Git repository
        $ref: '#/definitions/url'
      chartProvider:
        type: string
        title: Chart provider
        enum: ['helm', 'git']
        default: git
      path:
        description: A relative directory path within the Git repository. Absolute paths cause errors. (only valid for applications sourced from Git)
        $ref: '#/definitions/wordCharacterPattern'
      chart:
        description: Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo.
        $ref: '#/definitions/wordCharacterPattern'
      revision:
        description: In case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD. In case of Helm, this is a semver tag for the Chart's version.
        $ref: '#/definitions/wordCharacterPattern'
        default: HEAD
      chartMetadata:
        title: ''
        properties:
          helmChartVersion:
            type: string
            title: Helm chart version
            default: ''
          helmChartDescription:
            type: string
            title: Helm chart description
            default: ''
      namespace:
        description: Workload namespace. Applicable only for team-admin. Default value is 'team-<team_id>'
        $ref: '#/definitions/idName'
      createNamespace:
        type: boolean
        default: false
      sidecarInject:
        type: boolean
        default: false
      imageUpdateStrategy:
        description: Automatically update the image. Only supported wit Helm charts in local Gitea repository and images stored in Harbor.
        title: Auto Image Updater
        additionalProperties: false
        properties:
          digest:
            additionalProperties: false
            properties:
              imageRepository:
                type: string
                description: The container image repository name
                $ref: '#/definitions/wordCharacterPattern'
              tag:
                $ref: '#/definitions/wordCharacterPattern'
              imageParameter:
                type: string
                default: image.name
                description: The parameter for specifying the image name
              tagParameter:
                type: string
                default: image.tag
                description: The parameter for specifying the image tag
            required:
              - tag
          semver:
            additionalProperties: false
            properties:
              imageRepository:
                type: string
                description: The container image repository name
                $ref: '#/definitions/wordCharacterPattern'
              versionConstraint:
                $ref: '#/definitions/wordCharacterPattern'
              imageParameter:
                type: string
                default: image.name
                description: The parameter for specifying the image name
              tagParameter:
                type: string
                default: image.tag
                description: The parameter for specifying the image tag
            required:
              - versionConstraint
          type:
            type: string
            enum:
              - semver
              - digest
              - disabled
            default: disabled
        required:
          - type
    required:
      - name
      - url
  codeRepo:
    type: object
    description: Define location of code repository to build
    properties:
      name:
        $ref: '#/definitions/idName'
      gitService:
        description: Git service provider
        type: string
        default: gitea
        enum:
          - gitea
          - github
          - gitlab
      repositoryUrl:
        description: URL of the Git repository holding the application code.
        $ref: '#/definitions/repoUrl'
      private:
        type: boolean
        default: false
      secret:
        description: The name of the secret with the credentials of the external private Git repository
        type: string
    required:
      - name
      - gitService
      - repositoryUrl

properties:
  alerts:
    $ref: '#/definitions/alerts'
  installation:
    type: object
    description: Top-level installation settings.
    required:
      - mode
    additionalProperties: true
    properties:
      mode:
        type: string
        description: |
          Installation execution mode.
          - `standard`: runs the normal installation workflow and follows the configuration bootstrap process.
          - `recovery`: runs recovery behavior intended to restore configuration that is stored in external git repository. It neither bootstraps nor initializes the configuration. For this mode `git` and `kms` objects are required so the operator knows how access and decrypt the data.
        enum:
          - recovery
          - standard
        default: standard
      recovery:
        type: object
        description: Recovery settings for disaster recovery scenarios. Only used when mode=recovery.
        properties:
          manifests:
            type: object
            description: >
              K8s resource List containing recovery manifests (e.g., sealed-secrets TLS key pairs)
              to apply during installation. Not stored in the values repository.
              Export from old cluster:
              kubectl get secret -n sealed-secrets -l sealedsecrets.bitnami.com/sealed-secrets-key=active -o yaml
            properties:
              apiVersion:
                type: string
              kind:
                type: string
              items:
                type: array
                items:
                  type: object
                  additionalProperties: true
              metadata:
                type: object
                additionalProperties: true
            additionalProperties: true
  azure:
    description: Azure specific configuration.
    properties:
      storageType:
        properties:
          fast:
            type: string
          standard:
            type: string
      appgw:
        properties:
          isManaged:
            default: false
            description: Indicates Azure Application Gateway Ingress Controller add-on is installed by AKS.
            type: boolean
  apps:
    additionalProperties: true
    properties:
      alertmanager:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          image:
            $ref: '#/definitions/imageSimple'
          resources:
            properties:
              alertmanger:
                $ref: '#/definitions/resources'
      argocd:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          controllerStatusProcessors:
            default: 20
            type: integer
          controllerOperationProcessors:
            default: 10
            type: integer
          applicationSet:
            replicas:
              default: 1
              type: integer
          controller:
            replicas:
              default: 1
              type: integer
          autoscaling:
            repoServer:
              $ref: '#/definitions/autoscalingEnabled'
            server:
              $ref: '#/definitions/autoscalingEnabled'
          resources:
            additionalProperties: false
            properties:
              server:
                $ref: '#/definitions/resources'
              controller:
                $ref: '#/definitions/resources'
              repo:
                $ref: '#/definitions/resources'
              redis:
                $ref: '#/definitions/resources'
              applicationSet:
                $ref: '#/definitions/resources'
              notifications:
                $ref: '#/definitions/resources'
              imageUpdater:
                $ref: '#/definitions/resources'
      cert-manager:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          networkPolicies:
            $ref: '#/definitions/appNetworkPolicyConfig'
          resources:
            certManager:
              $ref: '#/definitions/resources'
            startupapicheck:
              $ref: '#/definitions/resources'
            cainjector:
              $ref: '#/definitions/resources'
            webhook:
              $ref: '#/definitions/resources'
          byoWildcardCert:
            description: 'Bring your own trusted wildcard certificate. Only applicable for byo-wildcard-cert issuer'
            type: string
          byoWildcardCertKey:
            description: 'A certificate key corresponding to the byoWildcardCert.'
            type: string
            x-secret: ''
          externallyManagedTlsSecretName:
            description: |
              The name of a custom secret in the istio-system namespace that contains a trusted certificate and private key.
              To be used with issuer externally-managed-tls-secret.
            $ref: '#/definitions/idName'
          customRootCA:
            type: string
            description: CA that is used to create and verify self-signed certificates. Leave it empty to generate one automatically.
          customRootCAKey:
            x-secret: ''
            type: string
            description: CA private key that is used to issue certificates. Leave it empty to generate one automatically.
          email:
            $ref: '#/definitions/email'
          issuer:
            description: |
              Indicates the origin of the wildcard certificate.
              The custom-ca - cert-manager uses the customRootCA to generate wildcard certificate.
              The letsencrypt - cert-manager requests certificate from letsencrypt endpoint.
              The byo-wildcard-cert allows users to bring their own trusted wildcard certificate (cert-manager not involved)
              through the values byoWildcardCert and byoWildcardCertKey.
              The externally-managed-tls-secret is similar to byo-wildcard-cert, but assumes the certificate is already stored
              in a secret (referenced by externallyManagedTlsSecretName) and not provided through the values.
            type: string
            enum:
              - custom-ca
              - letsencrypt
              - byo-wildcard-cert
              - externally-managed-tls-secret
            default: custom-ca
          stage:
            type: string
            enum:
              - production
              - staging
            default: production
      cnpg:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            $ref: '#/definitions/resources'
          barmanPluginResources:
            $ref: '#/definitions/resources'
          useBackupPlugin:
            type: boolean
            default: false
            description: Use CNPG plugin for platform database backups
      dex:
        additionalProperties: false
        description: Dex is an OIDC identity broker, installed by default. otomi.oidc.authenticationLayer decides whether it is actually used.
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          idp:
            additionalProperties: false
            properties:
              clientID:
                $ref: '#/definitions/wordCharacterPattern'
                default: otomi
                description: The OAuth2 client identifier platform applications will use against Dex.
          replicas:
            type: integer
            default: 2
            description: Number of Dex replicas. More than one requires all replicas to share the same storage backend.
          resources:
            $ref: '#/definitions/resources'
          networkPolicies:
            $ref: '#/definitions/appNetworkPolicyConfig'
      external-dns:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          logLevel:
            type: string
            default: 'info'
          resources:
            $ref: '#/definitions/resources'
      external-secrets:
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            properties:
              operator:
                $ref: '#/definitions/resources'
      gitea:
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
          adminUsername:
            type: string
            default: otomi-admin
          databaseMaxConnections:
            type: number
            description: Maximum amount of total connections of the application to the database server
          databaseMaxIdleConnections:
            type: number
            description: Maximum amount of idle connections of the application to the database server
          resources:
            additionalProperties: false
            properties:
              gitea:
                $ref: '#/definitions/resources'
              init:
                $ref: '#/definitions/resources'
          networkPolicies:
            $ref: '#/definitions/appNetworkPolicyConfig'
      grafana:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          image:
            $ref: '#/definitions/imageSimple'
          resources:
            grafana:
              $ref: '#/definitions/resources'
            sidecar:
              $ref: '#/definitions/resources'
      harbor:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: true
          privateLibrary:
            type: boolean
            default: true
            description: Will mark the main project named "library" as private.
          oidcAutoOnboard:
            type: boolean
          oidcUserClaim:
            type: string
          databaseMaxConnections:
            type: number
            description: Maximum amount of total connections of the application to the database server
          databaseMaxIdleConnections:
            type: number
            description: Maximum amount of idle connections of the application to the database server
          resources:
            additionalProperties: false
            properties:
              core:
                $ref: '#/definitions/resources'
              jobservice:
                $ref: '#/definitions/resources'
              portal:
                $ref: '#/definitions/resources'
              redis:
                $ref: '#/definitions/resources'
              registry:
                $ref: '#/definitions/resources'
              registryController:
                $ref: '#/definitions/resources'
              trivy:
                $ref: '#/definitions/resources'
              nginx:
                $ref: '#/definitions/resources'
      istio:
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          autoscaling:
            properties:
              egressgateway:
                $ref: '#/definitions/autoscaling'
              ingressgateway:
                $ref: '#/definitions/autoscaling'
              pilot:
                $ref: '#/definitions/autoscaling'
          egressGateway:
            properties:
              enabled:
                default: false
                type: boolean
          global:
            additionalProperties: false
            properties:
              logging:
                properties:
                  level:
                    type: string
          extensionProviders:
            description: 'See: https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig'
            type: array
            items:
              type: object
          image:
            $ref: '#/definitions/imageSimple'
          ambient:
            description: Enable Istio ambient mesh
            type: boolean
          resources:
            properties:
              egressgateway:
                $ref: '#/definitions/resources'
              ingressgateway:
                $ref: '#/definitions/resources'
              ingressgateway-private:
                $ref: '#/definitions/resources'
              pilot:
                $ref: '#/definitions/resources'
              proxy:
                $ref: '#/definitions/resources'
              operator:
                $ref: '#/definitions/resources'
      keycloak:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: true
            description: Whether Keycloak is deployed. Independent of otomi.oidc.authenticationLayer — enabling Keycloak does not select it as the issuer.
          idp:
            additionalProperties: false
            properties:
              alias:
                type: string
                default: otomi-idp
              clientID:
                $ref: '#/definitions/wordCharacterPattern'
                default: otomi
          adminUsername:
            type: string
            default: otomi-admin
          theme:
            type: string
            default: otomi
          image:
            properties:
              keycloak:
                $ref: '#/definitions/imageSimple'
              postgresql:
                $ref: '#/definitions/imageSimple'
          databaseMaxConnections:
            type: number
            description: Maximum amount of total connections of the application to the database server
          databaseMinConnections:
            type: number
            description: Minimum amount of connections of the application to the database server
          databaseInitialConnections:
            type: number
            description: Initial amount of connections of the application to the database server on startup
          resources:
            additionalProperties: false
            properties:
              keycloak:
                $ref: '#/definitions/resources'
              operator:
                $ref: '#/definitions/resources'
      kserve:
        additionalProperties: false
        properties:
          enabled:
            type: boolean
            default: false
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            additionalProperties: false
            properties:
              controller:
                $ref: '#/definitions/resources'
              rbacProxy:
                $ref: '#/definitions/resources'
              inferenceService:
                $ref: '#/definitions/resources'
      kyverno:
        additionalProperties: false
        properties:
          enabled:
            type: boolean
            default: false
          _rawValues:
            $ref: '#/definitions/rawValues'
          mode:
            type: string
            enum: ['DevTest', 'Prod']
            default: DevTest
          resources:
            additionalProperties: false
            properties:
              admissionController:
                $ref: '#/definitions/resources'
              cleanupController:
                $ref: '#/definitions/resources'
              backgroundController:
                $ref: '#/definitions/resources'
              reportsController:
                $ref: '#/definitions/resources'
      policy-reporter:
        additionalProperties: false
        properties:
          enabled:
            type: boolean
            default: false
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            $ref: '#/definitions/resources'
      knative:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: true
          resources:
            queueSidecar:
              $ref: '#/definitions/resources'
            controller:
              $ref: '#/definitions/resources'
            activator:
              $ref: '#/definitions/resources'
            webhook:
              $ref: '#/definitions/resources'
            autoscaler:
              $ref: '#/definitions/resources'
            autoscalerHpa:
              $ref: '#/definitions/resources'
            operator:
              $ref: '#/definitions/resources'
            operatorWebhook:
              $ref: '#/definitions/resources'
          serving:
            type: object
            properties:
              replicas:
                default: 1
                type: integer
                minimum: 1
              gateway:
                type: object
                description: 'Knative local gateway deployment configuration'
                properties:
                  replicas:
                    type: integer
                    minimum: 1
                  minAvailable:
                    type: integer
                    minimum: 1
                  resources:
                    $ref: '#/definitions/resources'
                  autoscaling:
                    $ref: '#/definitions/gatewayAutoscallingEnabled'
      kubeflow-pipelines:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            default: false
            type: boolean
          persistence:
            properties:
              mysql:
                properties:
                  size:
                    default: 20Gi
                    $ref: '#/definitions/size'
          resources:
            additionalProperties: false
            properties:
              cacheDeployer:
                $ref: '#/definitions/resources'
              cacheServer:
                $ref: '#/definitions/resources'
              metadataEnvoy:
                $ref: '#/definitions/resources'
              metadataGrpc:
                $ref: '#/definitions/resources'
              metadataWriter:
                $ref: '#/definitions/resources'
              mlPipeline:
                $ref: '#/definitions/resources'
              mlPipelinePersistenceagent:
                $ref: '#/definitions/resources'
              mlPipelineScheduledworkflow:
                $ref: '#/definitions/resources'
              mlPipelineUi:
                $ref: '#/definitions/resources'
              mlPipelineViewer:
                $ref: '#/definitions/resources'
              mlPipelineVisualizationserver:
                $ref: '#/definitions/resources'
              mysql:
                $ref: '#/definitions/resources'
              workflowController:
                $ref: '#/definitions/resources'
      linode-cfw:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
      sealed-secrets:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            properties:
              operator:
                $ref: '#/definitions/resources'
      tekton:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          resources:
            additionalProperties: false
            properties:
              dashboard:
                $ref: '#/definitions/resources'
              pipelinesController:
                $ref: '#/definitions/resources'
              pipelinesRemoteresolver:
                $ref: '#/definitions/resources'
              pipelinesEvents:
                $ref: '#/definitions/resources'
              pipelinesWebhook:
                $ref: '#/definitions/resources'
              triggersInterceptors:
                $ref: '#/definitions/resources'
              triggersController:
                $ref: '#/definitions/resources'
              triggersWebhook:
                $ref: '#/definitions/resources'
      loki:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          resources:
            additionalProperties: false
            properties:
              compactor:
                $ref: '#/definitions/resources'
              ingester:
                $ref: '#/definitions/resources'
              gateway:
                $ref: '#/definitions/resources'
              querier:
                $ref: '#/definitions/resources'
              distributor:
                $ref: '#/definitions/resources'
              queryFrontend:
                $ref: '#/definitions/resources'
              reverseProxy:
                $ref: '#/definitions/resources'
              queryScheduler:
                $ref: '#/definitions/resources'
              indexGateway:
                $ref: '#/definitions/resources'
              singleBinary:
                $ref: '#/definitions/resources'
          autoscaling:
            properties:
              ingester:
                $ref: '#/definitions/autoscalingEnabled'
              gateway:
                $ref: '#/definitions/autoscalingEnabled'
              querier:
                $ref: '#/definitions/autoscalingEnabled'
              distributor:
                $ref: '#/definitions/autoscalingEnabled'
              queryFrontend:
                $ref: '#/definitions/autoscalingEnabled'
              queryScheduler:
                $ref: '#/definitions/autoscalingEnabled'
          persistentVolumeSize:
            $ref: '#/definitions/size'
          v13SchemaStartDate:
            description: Automatically set to a date in the future in case of an upgrade
            title: Schema v13 start date
            type: string
          networkPolicies:
            $ref: '#/definitions/appNetworkPolicyConfig'
      metrics-server:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: true
          apiServer:
            additionalProperties: false
            properties:
              create:
                type: boolean
                default: true
          extraArgs:
            type: array
          resources:
            $ref: '#/definitions/resources'
      oauth2-proxy:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            $ref: '#/definitions/resources'
      oauth2-proxy-redis:
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            additionalProperties: false
            properties:
              master:
                $ref: '#/definitions/resources'
              sentinel:
                $ref: '#/definitions/resources'
          replicas:
            type: integer
          persistentVolumeSize:
            $ref: '#/definitions/size'
        type: object
      otomi-api:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          editorInactivityTimeout:
            type: integer
            default: 10
          kubeconfigExpirationSeconds:
            type: integer
          resources:
            additionalProperties: false
            properties:
              api:
                $ref: '#/definitions/resources'
              tools:
                $ref: '#/definitions/resources'
          networkPolicies:
            $ref: '#/definitions/appNetworkPolicyConfig'
      otomi-console:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            $ref: '#/definitions/resources'
        allOf:
          - anyOf:
              - not:
                  properties:
                    enabled:
                      const: true
                  required:
                    - enabled
              - properties:
                  registry:
                    required:
                      - username
                      - password
        type: object
      apl-harbor-operator:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            additionalProperties: false
            properties:
              operator:
                $ref: '#/definitions/resources'
      apl-gitea-operator:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            additionalProperties: false
            properties:
              operator:
                $ref: '#/definitions/resources'
      apl-keycloak-operator:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            additionalProperties: false
            properties:
              operator:
                $ref: '#/definitions/resources'
      apl-operator:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            additionalProperties: false
            properties:
              operator:
                $ref: '#/definitions/resources'
      git-server:
        additionalProperties: false
        properties:
          enabled:
            type: boolean
          htpasswd:
            type: string
            x-secret: ''
          _rawValues:
            $ref: '#/definitions/rawValues'
          resources:
            $ref: '#/definitions/resources'
          createHttpRoute:
            type: boolean
      prometheus:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          disabledRules:
            type: array
            items:
              type: string
          remoteWrite:
            properties:
              enabled:
                type: boolean
                default: false
              insecureSkipVerify:
                type: boolean
                default: false
              rwConfig:
                properties:
                  target:
                    type: string
                  basicAuth:
                    properties:
                      enabled:
                        type: boolean
                        default: false
                      username:
                        type: string
                      password:
                        $ref: '#/definitions/wordCharacterPattern'
                        x-secret: ''
                  customConfig:
                    description: Custom remote write config. Will be appended to the remoteWrite list.
                    type: string
          replicas:
            type: integer
            default: 1
          scrapeInterval:
            type: string
            default: 60s
          retention:
            $ref: '#/definitions/duration'
          retentionSize:
            description: 'The maximum number of bytes of storage blocks to retain. The oldest data will be removed first. Defaults to 0 or disabled. Units supported: B, KB, MB, GB, TB, PB, EB'
            default: 4GB
            pattern: '^([0-9]+\.)?[0-9]+(B|KB|MB|GB|TB|PB|EB)?$'
          storageSize:
            $ref: '#/definitions/size'
            default: 5Gi
          image:
            properties:
              prometheus:
                $ref: '#/definitions/imageSimple'
              kube-state-metrics:
                $ref: '#/definitions/imageSimple'
              node-exporter:
                $ref: '#/definitions/imageSimple'
          resources:
            properties:
              prometheusOperator:
                $ref: '#/definitions/resources'
              prometheus:
                $ref: '#/definitions/resources'
              kube-state-metrics:
                $ref: '#/definitions/resources'
              node-exporter:
                $ref: '#/definitions/resources'
              prometheusConfigReloader:
                $ref: '#/definitions/resources'
      promtail:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          resources:
            $ref: '#/definitions/resources'
      rabbitmq:
        additionalProperties: false
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          resources:
            properties:
              clusterOperator:
                description: Controller which is used to create RabbitMQ-clusters
                $ref: '#/definitions/resources'
              msgTopologyOperator:
                description: Controller which is used to create RabbitMQ queues and policies
                $ref: '#/definitions/resources'
      trivy:
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          operator:
            properties:
              replicaCount:
                description: Number of Operator replicas.
                type: integer
                default: 1
          resources:
            additionalProperties: false
            properties:
              operator:
                $ref: '#/definitions/resources'
              trivy:
                $ref: '#/definitions/resources'
      otel:
        properties:
          _rawValues:
            $ref: '#/definitions/rawValues'
          enabled:
            type: boolean
            default: false
          operator:
            properties:
              replicaCount:
                description: Number of replicas.
                type: integer
                default: 1
          resources:
            additionalProperties: false
            properties:
              logsCollector:
                $ref: '#/definitions/resources'
              manager:
                $ref: '#/definitions/resources'
  catalogs:
    type: object
    additionalProperties:
      $ref: '#/definitions/catalog'
  cluster:
    $ref: '#/definitions/cluster'
  dns:
    additionalProperties: false
    properties:
      zones:
        description: Extra dns zones that the cluster can administer. Team services can use this to publish their URLs on.
        items:
          $ref: '#/definitions/domain'
        type: array
      domainFilters:
        description: Limit possible target zones by domain suffixes.
        items:
          type: string
        type: array
      zoneIdFilters:
        description: Limit possible target zones by zone id.
        items:
          type: string
        type: array
      policy:
        description: Modify how DNS records are synchronized between sources and providers.
        type: string
        enum:
          - upsert-only
          - sync
      provider:
        description: The DNS provider managing the domains.
        oneOf:
          - title: Akamai EdgeDNS
            additionalProperties: false
            properties:
              akamai:
                $ref: '#/definitions/akamai/definitions/dns'
            required:
              - akamai
          - title: AWS
            description: Uses credentials when either a pair of id+key or a secret name is provided. Assumes node role otherwise.
            additionalProperties: false
            properties:
              aws:
                properties:
                  credentials:
                    properties:
                      secretKey:
                        $ref: '#/definitions/aws/definitions/secretKey'
                      accessKey:
                        $ref: '#/definitions/aws/definitions/accessKey'
                    required: [secretKey, accessKey]
                  region:
                    $ref: '#/definitions/aws/definitions/region'
                  role:
                    $ref: '#/definitions/aws/definitions/role'
                required: [region]
                oneOf:
                  - required: [credentials]
                  - required: [role]
                  - not:
                      anyOf:
                        - required: [credentials]
                        - required: [role]
            required:
              - aws
          - title: Azure
            additionalProperties: false
            properties:
              azure:
                $ref: '#/definitions/azure/definitions/dns'
            required:
              - azure
          - title: Azure Private
            additionalProperties: false
            properties:
              azure-private-dns:
                $ref: '#/definitions/azure/definitions/dns'
            required:
              - azure-private-dns
          - title: Google
            additionalProperties: false
            properties:
              google:
                properties:
                  serviceAccountKey:
                    $ref: '#/definitions/google/definitions/accountJson'
                    description: A service account key in json format for managing a DNS zone.
                  project:
                    $ref: '#/definitions/google/definitions/project'
                required: [project, serviceAccountKey]
            required:
              - google
          - title: Digital Ocean
            additionalProperties: false
            properties:
              digitalocean:
                properties:
                  apiToken:
                    type: string
                    x-secret: ''
                required:
                  - apiToken
            required:
              - digitalocean
          - title: Linode
            additionalProperties: false
            properties:
              linode:
                properties:
                  apiToken:
                    type: string
                    x-secret: ''
                required:
                  - apiToken
            required:
              - linode
          - title: CloudFlare
            additionalProperties: false
            properties:
              cloudflare:
                properties:
                  apiToken:
                    type: string
                    x-secret: ''
                  apiSecret:
                    type: string
                    x-secret: ''
                    description: Required when Email is set.
                  email:
                    $ref: '#/definitions/email'
                    description: Required when Email is set.
                  proxied:
                    type: boolean
                    x-default: true
                oneOf:
                  - required: [apiToken]
                  - required: [apiSecret, email]
                  - not:
                      anyOf:
                        - required: [apiToken]
                        - required: [apiSecret]
                        - required: [email]
            required:
              - cloudflare
          - title: Other
            additionalProperties: false
            properties:
              other:
                description: This option requires configuration for both external-dns as well as cert-manager. No schema validation is available so provide correct data.
                type: object
                properties:
                  name:
                    type: string
                    description: Name of the provider.
                  external-dns:
                    title: YAML for external-dns.
                    type: object
                    description: 'The provider config as provided here: https://github.com/linode/apl-core/blob/main/charts/external-dns/values.yaml'
                  cert-manager:
                    title: YAML for cert-manager.
                    type: object
                    description: 'The dns01 config as provided here: https://cert-manager.io/docs/configuration/acme/dns01/'
                required:
                  - name
                  - external-dns
                  - cert-manager
            required:
              - other
      entrypoint:
        $ref: '#/definitions/ipV4Address'
        description: Optional. A public IP address that will override (loadbalancer) ip used for registering hosts. This allows for access to private clusters.
  files:
    type: object
    description: 'Custom values for the workload chart.'
    patternProperties:
      '^/|(/[\w-]+)+$':
        type: string
        pattern: ^[^\s]+$
  oidc:
    additionalProperties: false
    description: 'Holds many parts used in different locations. Please see keycloak, grafana, istio and oauth-proxy as those are all consuming (parts of) these settings.'
    properties:
      issuer:
        $ref: '#/definitions/url'
      clientID:
        $ref: '#/definitions/wordCharacterPattern'
        x-secret: ''
      clientSecret:
        type: string
        x-secret: ''
      platformAdminGroupID:
        $ref: '#/definitions/wordCharacterPattern'
      allTeamsAdminGroupID:
        $ref: '#/definitions/wordCharacterPattern'
      teamAdminGroupID:
        $ref: '#/definitions/wordCharacterPattern'
      usernameClaimMapper:
        $ref: '#/definitions/wordCharacterPattern'
        description: Claim name from identity provider used by Keycloak to create the username. Best to not change this from the default.
        default: '${CLAIM.upn}'
      subClaimMapper:
        type: string
        description: Claim name passed by Keycloak as a unique user identifier. Best to not change this from the default.
        default: sub
    required:
      - clientID
      - issuer
  otomi:
    additionalProperties: false
    properties:
      isPreInstalled:
        type: boolean
        description: Defines if APL is installed and managed by Linode
        default: false
      oidc:
        additionalProperties: false
        properties:
          authenticationLayer:
            type: string
            enum:
              - dex
              - keycloak
            default: keycloak
            description: Which app every consumer authenticates against.
      aiEnabled:
        type: boolean
        description: Defines if APL enables AI/ML components
        default: false
      globalPullSecret:
        title: Global pullsecret
        description: Will be connected to each "default" service account in all otomi app namespaces.
          Handy for authenticating with DockerHub to avoid rate limiting.
          Also useful when pulling all otomi images from a private repo. (One would need to override all the images in the config first.)
        additionalProperties: false
        properties:
          username:
            $ref: '#/definitions/wordCharacterPattern'
          password:
            type: string
            x-secret: ''
          email:
            $ref: '#/definitions/email'
            default: not@us.ed
          server:
            $ref: '#/definitions/wordCharacterPattern'
            default: docker.io
        required:
          - username
          - password
      git:
        type: object
        title: Git Configuration
        description: |
          Git configuration for APL values repository.
        additionalProperties: true
        properties:
          repoUrl:
            type: string
            description: |
              The base URL of the Git repository (without credentials). Auto-derived for internal Gitea.
            pattern: '^https?://.+'
            x-secret: ''
          username:
            type: string
            description: |
              Username for authenticating with the Git repository.
              Defaults to 'otomi-admin' for internal Gitea.
            x-secret: ''
          password:
            type: string
            description: Password or token for authenticating with the Git repository
            x-secret: ''
          email:
            type: string
            description: |
              Email address to use for Git commits.
              Defaults to 'pipeline@cluster.local' for internal Gitea.
            x-secret: ''
          branch:
            type: string
            description: The branch to use in the Git repository
            x-secret: ''
      hasExternalDNS:
        description: Set this to true when an external dns zone is available to manage dns records. (Expects required `dns:` fields to be set.)
        default: false
        type: boolean
      hasExternalIDP:
        default: false
        description: Set this to true when bringing your own external IDP such as Azure AD. (Expects required `oidc:` fields to be set.)
        type: boolean
      isMultitenant:
        default: true
        description: Whether to separate team metrics and logs. Disabling this lets everybody be admin and see everything.
        type: boolean
      nodeSelector:
        $ref: '#/definitions/labelsAnnotations'
        description: 'One or more "label: value" pairs that must exist on one or more nodes, which will force all otomi platform workloads to be scheduled there.'
      version:
        default: latest
        description: 'Best pin this to a valid release version found in the repo.'
        pattern: '(v[0-9]+.[0-9]+.[0-9]+|[a-zA-Z]+[a-zA-Z0-9-])'
      useORCS:
        type: boolean
        description: Defines if the OCI Registry Cache Service (ORCS) is used to cache images from the public registry.
  ingress:
    properties:
      platformClass:
        type: object
        allOf:
          - properties:
              className:
                type: string
                enum: [platform]
          - $ref: '#/definitions/ingressClassParameters'
      classes:
        type: array
        items:
          allOf:
            - type: object
              properties:
                className:
                  type: string
            - $ref: '#/definitions/ingressClassParameters'
          required:
            - className
  smtp:
    additionalProperties: false
    properties:
      auth_identity:
        type: string
      auth_password:
        type: string
        x-secret: ''
      auth_secret:
        type: string
        x-secret: ''
      auth_username:
        type: string
      from:
        $ref: '#/definitions/email'
        description: The "from" address. Defaults to alerts@$clusterDomain.
      hello:
        type: string
      smarthost:
        $ref: '#/definitions/hostPort'
        description: 'The smtp host:port combination.'
    required:
      - smarthost
  platformBackups:
    type: object
    properties:
      database:
        type: object
        title: Database backups
        properties:
          harbor:
            title: Harbor
            properties:
              enabled:
                type: boolean
                default: false
              retentionPolicy:
                $ref: '#/definitions/backupRetentionPolicy'
              schedule:
                $ref: '#/definitions/backupSchedule'
              pathSuffix:
                type: string
                pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])$'
                default: harbor
          gitea:
            title: Gitea
            properties:
              enabled:
                type: boolean
                default: false
              retentionPolicy:
                $ref: '#/definitions/backupRetentionPolicy'
              schedule:
                $ref: '#/definitions/backupSchedule'
              pathSuffix:
                type: string
                pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])$'
                default: gitea
          keycloak:
            title: Keycloak
            properties:
              enabled:
                type: boolean
                default: false
              retentionPolicy:
                $ref: '#/definitions/backupRetentionPolicy'
              schedule:
                $ref: '#/definitions/backupSchedule'
              pathSuffix:
                type: string
                pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])$'
                default: keycloak
      gitea:
        type: object
        title: Gitea
        description: Enable application-level backup of Gitea repositories and database
        additionalProperties: false
        properties:
          enabled:
            type: boolean
            default: false
          resources:
            $ref: '#/definitions/resources'
          retentionPolicy:
            $ref: '#/definitions/backupRetentionPolicy'
          schedule:
            $ref: '#/definitions/backupSchedule'
  obj:
    properties:
      showWizard:
        type: boolean
        default: true
        description: Show the Object Storage wizard.
      provider:
        properties:
          linode:
            properties:
              region:
                description: The region of the bucket
                $ref: '#/definitions/wordCharacterPattern'
              accessKeyId:
                type: string
                description: The ID of the access key
                $ref: '#/definitions/wordCharacterPattern'
              secretAccessKey:
                type: string
                description: The secret of the access key
                $ref: '#/definitions/wordCharacterPattern'
                x-secret: ''
              buckets:
                properties:
                  loki:
                    type: string
                    $ref: '#/definitions/wordCharacterPattern'
                    default: loki
                  cnpg:
                    type: string
                    $ref: '#/definitions/wordCharacterPattern'
                    default: cnpg
                  harbor:
                    type: string
                    $ref: '#/definitions/wordCharacterPattern'
                    default: harbor
                  gitea:
                    type: string
                    $ref: '#/definitions/wordCharacterPattern'
                    default: gitea
                  kubeflow-pipelines:
                    type: string
                    $ref: '#/definitions/wordCharacterPattern'
                    default: kubeflow-pipelines
            required:
              - region
              - accessKeyId
              - secretAccessKey
          type:
            type: string
            enum:
              - linode
              - disabled
            default: disabled
  databases:
    properties:
      keycloak:
        title: Keycloak
        properties:
          size:
            type: string
          storageClass:
            type: string
          walStorageSize:
            type: string
          resources:
            $ref: '#/definitions/resources'
          backupSidecarResources:
            $ref: '#/definitions/resources'
          postgresqlParameters:
            type: object
            additionalProperties:
              type: string
            default: {}
          replicas:
            type: integer
            default: 2
          recovery:
            type: object
            additionalProperties: true
            default: {}
          externalClusters:
            type: array
            items:
              type: object
              additionalProperties: true
            default: []
      harbor:
        title: Harbor
        properties:
          size:
            type: string
          storageClass:
            type: string
          walStorageSize:
            type: string
          resources:
            $ref: '#/definitions/resources'
          backupSidecarResources:
            $ref: '#/definitions/resources'
          postgresqlParameters:
            type: object
            additionalProperties:
              type: string
            default: {}
          replicas:
            type: integer
            default: 2
          recovery:
            type: object
            additionalProperties: true
            default: {}
          externalClusters:
            type: array
            items:
              type: object
              additionalProperties: true
            default: []
      gitea:
        title: gitea
        properties:
          size:
            type: string
          storageClass:
            type: string
          walStorageSize:
            type: string
          resources:
            $ref: '#/definitions/resources'
          backupSidecarResources:
            $ref: '#/definitions/resources'
          postgresqlParameters:
            type: object
            additionalProperties:
              type: string
            default: {}
          replicas:
            type: integer
            default: 2
          recovery:
            type: object
            additionalProperties: true
            default: {}
          externalClusters:
            type: array
            items:
              type: object
              additionalProperties: true
            default: []
  teamConfig:
    additionalProperties: false
    patternProperties:
      '^[a-z0-9]([-a-z0-9]*[a-z0-9])+$':
        $ref: '#/definitions/team'
  versions:
    properties:
      specVersion:
        type: integer
        description: DO NOT CHANGE! Holds the values-schema version. For more details, see `otomi migrate`.
  license:
    type: string
    describe: License in form of JWT
    x-secret: ''
  status:
    type: object
    properties:
      otomi:
        properties:
          deployingTag:
            type: string
          deployingVersion:
            type: string
          status:
            type: string
            enum: [deploying, deployed]
          version:
            type: string
      helm:
        type: object
required:
  - cluster