{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "affinity": {
      "additionalProperties": true,
      "description": "For more information checkout: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity",
      "required": [],
      "title": "affinity",
      "type": "object"
    },
    "artifactRoot": {
      "additionalProperties": false,
      "properties": {
        "defaultArtifactRoot": {
          "default": "./mlruns",
          "description": "Specifies the default artifact root.",
          "required": [],
          "title": "defaultArtifactRoot",
          "type": "string"
        },
        "defaultArtifactsDestination": {
          "default": "./mlartifacts",
          "description": "Specifies the default artifacts destination",
          "required": [],
          "title": "defaultArtifactsDestination",
          "type": "string"
        },
        "azureBlob": {
          "additionalProperties": false,
          "properties": {
            "accessKey": {
              "default": "",
              "description": "Azure Cloud Storage Account Access Key for the container",
              "required": [],
              "title": "accessKey",
              "type": "string"
            },
            "connectionString": {
              "default": "",
              "description": "Azure Cloud Connection String for the container. Only connectionString or accessKey required",
              "required": [],
              "title": "connectionString",
              "type": "string"
            },
            "container": {
              "default": "",
              "description": "Azure blob container name",
              "required": [],
              "title": "container",
              "type": "string"
            },
            "enabled": {
              "default": false,
              "description": "Specifies if you want to use Azure Blob Storage Mlflow Artifact Root",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "path": {
              "default": "",
              "description": "Azure blob container folder. If you want to use root level, please don't set anything.",
              "required": [],
              "title": "path",
              "type": "string"
            },
            "storageAccount": {
              "default": "",
              "description": "Azure storage account name",
              "required": [],
              "title": "storageAccount",
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "container",
            "storageAccount",
            "path",
            "connectionString",
            "accessKey"
          ],
          "title": "azureBlob",
          "type": "object"
        },
        "gcs": {
          "additionalProperties": false,
          "properties": {
            "bucket": {
              "default": "",
              "description": "Google Cloud Storage bucket name",
              "required": [],
              "title": "bucket",
              "type": "string"
            },
            "enabled": {
              "default": false,
              "description": "Specifies if you want to use Google Cloud Storage Mlflow Artifact Root",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "path": {
              "default": "",
              "description": "Google Cloud Storage bucket folder. If you want to use root level, please don't set anything.",
              "required": [],
              "title": "path",
              "type": "string"
            }
          },
          "required": ["enabled", "bucket", "path"],
          "title": "gcs",
          "type": "object"
        },
        "proxiedArtifactStorage": {
          "default": false,
          "description": "Specifies if you want to enable proxied artifact storage access",
          "required": [],
          "title": "proxiedArtifactStorage",
          "type": "boolean"
        },
        "s3": {
          "additionalProperties": false,
          "properties": {
            "awsAccessKeyId": {
              "default": "",
              "description": "AWS IAM user AWS_ACCESS_KEY_ID which has attached policy for access to the S3 bucket",
              "required": [],
              "title": "awsAccessKeyId",
              "type": "string"
            },
            "awsSecretAccessKey": {
              "default": "",
              "description": "AWS IAM user AWS_SECRET_ACCESS_KEY which has attached policy for access to the S3 bucket",
              "required": [],
              "title": "awsSecretAccessKey",
              "type": "string"
            },
            "existingSecret": {
              "additionalProperties": false,
              "type": "object",
              "description": "Existing secret for AWS IAM user AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY secrets.",
              "properties": {
                "name": {
                  "default": "",
                  "description": "This is for setting up the AWS IAM user secrets existing secret name.",
                  "required": [],
                  "title": "name",
                  "type": "string"
                },
                "keyOfAccessKeyId": {
                  "default": "",
                  "description": "This is for setting up the key for AWS_ACCESS_KEY_ID secret. If it's set, awsAccessKeyId will be ignored.",
                  "required": [],
                  "title": "keyOfAccessKeyId",
                  "type": "string"
                },
                "keyOfSecretAccessKey": {
                  "default": "",
                  "description": "This is for setting up the key for AWS_SECRET_ACCESS_KEY secret. If it's set, awsSecretAccessKey will be ignored.",
                  "required": [],
                  "title": "keyOfSecretAccessKey",
                  "type": "string"
                }
              },
              "required": [
                "name",
                "keyOfAccessKeyId",
                "keyOfSecretAccessKey"
              ]
            },
            "bucket": {
              "default": "",
              "description": "S3 bucket name",
              "required": [],
              "title": "bucket",
              "type": "string"
            },
            "enabled": {
              "default": false,
              "description": "Specifies if you want to use AWS S3 Mlflow Artifact Root",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "path": {
              "default": "",
              "description": "S3 bucket folder. If you want to use root level, please don't set anything.",
              "required": [],
              "title": "path",
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "bucket",
            "path",
            "awsAccessKeyId",
            "awsSecretAccessKey",
            "existingSecret"
          ],
          "title": "s3",
          "type": "object"
        }
      },
      "required": ["proxiedArtifactStorage", "defaultArtifactRoot", "defaultArtifactsDestination", "azureBlob", "s3", "gcs"],
      "title": "artifactRoot",
      "type": "object"
    },
    "backendStore": {
      "additionalProperties": false,
      "properties": {
        "defaultSqlitePath": {
          "default": ":memory:",
          "description": "Specifies the default sqlite path",
          "required": [],
          "title": "defaultSqlitePath",
          "type": "string"
        },
        "databaseConnectionCheck": {
          "default": false,
          "description": "Add an additional init container, which checks for database availability",
          "required": [],
          "title": "databaseConnectionCheck",
          "type": "boolean"
        },
        "databaseMigration": {
          "default": false,
          "description": "Specifies if you want to run database migration",
          "required": [],
          "title": "databaseMigration",
          "type": "boolean"
        },
        "mysql": {
          "additionalProperties": false,
          "properties": {
            "database": {
              "default": "",
              "description": "mlflow database name created before in the mysql instance",
              "required": [],
              "title": "database",
              "type": "string"
            },
            "driver": {
              "default": "pymysql",
              "description": "mysql database connection driver. e.g.: \"pymysql\"",
              "required": [],
              "title": "driver",
              "type": "string"
            },
            "enabled": {
              "default": false,
              "description": "Specifies if you want to use mysql backend storage",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "host": {
              "default": "",
              "description": "MySQL host address. e.g. your Amazon RDS for MySQL",
              "required": [],
              "title": "host",
              "type": "string"
            },
            "password": {
              "default": "",
              "description": "mysql database user password which can access to mlflow database",
              "required": [],
              "title": "password",
              "type": "string"
            },
            "port": {
              "default": 3306,
              "description": "MySQL service port",
              "required": [],
              "title": "port",
              "type": "integer"
            },
            "user": {
              "default": "",
              "description": "mysql database user name which can access to mlflow database",
              "required": [],
              "title": "user",
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "host",
            "port",
            "database",
            "user",
            "password",
            "driver"
          ],
          "title": "mysql",
          "type": "object"
        },
        "postgres": {
          "additionalProperties": false,
          "properties": {
            "database": {
              "default": "",
              "description": "mlflow database name created before in the postgres instance",
              "required": [],
              "title": "database",
              "type": "string"
            },
            "driver": {
              "default": "",
              "description": "postgres database connection driver. e.g.: \"psycopg2\"",
              "required": [],
              "title": "driver",
              "type": "string"
            },
            "enabled": {
              "default": false,
              "description": "Specifies if you want to use postgres backend storage",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "host": {
              "default": "",
              "description": "Postgres host address. e.g. your RDS or Azure Postgres Service endpoint",
              "required": [],
              "title": "host",
              "type": "string"
            },
            "password": {
              "default": "",
              "description": "postgres database user password which can access to mlflow database",
              "required": [],
              "title": "password",
              "type": "string"
            },
            "port": {
              "default": 5432,
              "description": "Postgres service port",
              "required": [],
              "title": "port",
              "type": "integer"
            },
            "user": {
              "default": "",
              "description": "postgres database user name which can access to mlflow database",
              "required": [],
              "title": "user",
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "host",
            "port",
            "database",
            "user",
            "password",
            "driver"
          ],
          "title": "postgres",
          "type": "object"
        },
        "mssql": {
          "additionalProperties": false,
          "properties": {
            "database": {
              "default": "",
              "description": "mlflow database name created before in the mssql instance",
              "required": [],
              "title": "database",
              "type": "string"
            },
            "driver": {
              "default": "pymssql",
              "description": "mssql database connection driver. e.g.: \"pymssql\"",
              "required": [],
              "title": "driver",
              "type": "string"
            },
            "enabled": {
              "default": false,
              "description": "Specifies if you want to use mssql backend storage",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "host": {
              "default": "",
              "description": "mssql host address",
              "required": [],
              "title": "host",
              "type": "string"
            },
            "password": {
              "default": "",
              "description": "mssql database user password which can access to mlflow database",
              "required": [],
              "title": "password",
              "type": "string"
            },
            "port": {
              "default": 1433,
              "description": "mssql service port",
              "required": [],
              "title": "port",
              "type": "integer"
            },
            "user": {
              "default": "",
              "description": "mssql database user name which can access to mlflow database",
              "required": [],
              "title": "user",
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "host",
            "port",
            "database",
            "user",
            "password",
            "driver"
          ],
          "title": "mssql",
          "type": "object"
        },
        "existingDatabaseSecret": {
          "additionalProperties": false,
          "type": "object",
          "description": "Specifies if you want to use an existing database secret.",
          "properties": {
            "name": {
              "default": "",
              "description": "The name of the existing database secret.",
              "required": [],
              "title": "name",
              "type": "string"
            },
            "usernameKey": {
              "default": "username",
              "description": "The key of the username in the existing database secret.",
              "required": [],
              "title": "usernameKey",
              "type": "string"
            },
            "passwordKey": {
              "default": "password",
              "description": "The key of the password in the existing database secret.",
              "required": [],
              "title": "passwordKey",
              "type": "string"
            }
          },
          "required": ["name", "usernameKey", "passwordKey"],
          "title": "existingDatabaseSecret"
        }
      },
      "required": [
        "databaseMigration",
        "databaseConnectionCheck",
        "defaultSqlitePath",
        "postgres",
        "mysql",
        "existingDatabaseSecret"
      ],
      "title": "backendStore",
      "type": "object"
    },
    "postgresql": {
      "additionalProperties": true,
      "description": "Bitnami PostgreSQL configuration",
      "properties": {
        "architecture": {
          "default": "standalone",
          "required": [],
          "title": "architecture",
          "type": "string"
        },
        "auth": {
          "additionalProperties": true,
          "properties": {
            "database": {
              "default": "mlflow",
              "description": "The name of the PostgreSQL database.",
              "required": [],
              "title": "database",
              "type": "string"
            },
            "password": {
              "default": "",
              "required": [],
              "title": "password",
              "type": "string"
            },
            "username": {
              "default": "",
              "required": [],
              "title": "username",
              "type": "string"
            }
          },
          "required": ["username", "password", "database"],
          "title": "auth",
          "type": "object"
        },
        "enabled": {
          "default": false,
          "description": "Enable postgresql",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "primary": {
          "additionalProperties": true,
          "properties": {
            "persistence": {
              "additionalProperties": true,
              "properties": {
                "enabled": {
                  "default": true,
                  "required": [],
                  "title": "enabled",
                  "type": "boolean"
                },
                "existingClaim": {
                  "default": "",
                  "required": [],
                  "title": "existingClaim",
                  "type": "string"
                }
              },
              "required": ["enabled", "existingClaim"],
              "title": "persistence",
              "type": "object"
            },
            "service": {
              "additionalProperties": true,
              "properties": {
                "ports": {
                  "additionalProperties": true,
                  "properties": {
                    "postgresql": {
                      "default": 5432,
                      "required": [],
                      "title": "postgresql",
                      "type": "integer"
                    }
                  },
                  "required": ["postgresql"],
                  "title": "ports",
                  "type": "object"
                }
              },
              "required": ["ports"],
              "title": "service",
              "type": "object"
            }
          },
          "required": ["service", "persistence"],
          "title": "primary",
          "type": "object"
        }
      },
      "required": ["enabled", "architecture", "primary", "auth"],
      "title": "postgresql",
      "type": "object"
    },
    "mysql": {
      "additionalProperties": true,
      "description": "Bitnami MySQL configuration",
      "properties": {
        "architecture": {
          "default": "standalone",
          "required": [],
          "title": "architecture",
          "type": "string"
        },
        "auth": {
          "additionalProperties": true,
          "properties": {
            "database": {
              "default": "mlflow",
              "description": "The name of the MySQL database.",
              "required": [],
              "title": "database",
              "type": "string"
            },
            "password": {
              "default": "",
              "required": [],
              "title": "password",
              "type": "string"
            },
            "username": {
              "default": "",
              "required": [],
              "title": "username",
              "type": "string"
            }
          },
          "required": ["username", "password", "database"],
          "title": "auth",
          "type": "object"
        },
        "enabled": {
          "default": false,
          "description": "Enable mysql",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "primary": {
          "additionalProperties": true,
          "properties": {
            "persistence": {
              "additionalProperties": true,
              "properties": {
                "enabled": {
                  "default": true,
                  "required": [],
                  "title": "enabled",
                  "type": "boolean"
                },
                "existingClaim": {
                  "default": "",
                  "required": [],
                  "title": "existingClaim",
                  "type": "string"
                }
              },
              "required": ["enabled", "existingClaim"],
              "title": "persistence",
              "type": "object"
            },
            "service": {
              "additionalProperties": true,
              "properties": {
                "ports": {
                  "additionalProperties": true,
                  "properties": {
                    "mysql": {
                      "default": 3306,
                      "required": [],
                      "title": "mysql",
                      "type": "integer"
                    }
                  },
                  "required": ["mysql"],
                  "title": "ports",
                  "type": "object"
                }
              },
              "required": ["ports"],
              "title": "service",
              "type": "object"
            }
          },
          "required": ["service", "persistence"],
          "title": "primary",
          "type": "object"
        }
      },
      "required": ["enabled", "architecture", "primary", "auth"],
      "title": "mysql",
      "type": "object"
    },
    "extraArgs": {
      "additionalProperties": true,
      "description": "A map of arguments and values to pass to the `mlflow server` command. Keys must be camelcase. Helm will turn them to kebabcase style.",
      "properties": {
        "workers": {
          "default": "4",
          "required": [],
          "title": "workers",
          "type": "string"
        },
        "staticPrefix": {
          "default": "/mlflow",
          "required": [],
          "title": "staticPrefix",
          "type": "string"
        },
        "gunicornOpts": {
          "default": "",
          "required": [],
          "title": "gunicornOpts",
          "type": "string"
        },
        "waitressOpts": {
          "default": "",
          "required": [],
          "title": "waitressOpts",
          "type": "string"
        }
      },
      "required": [],
      "title": "extraArgs",
      "type": "object"
    },
    "extraContainers": {
      "description": "Extra containers for the mlflow pod",
      "items": {
        "required": []
      },
      "required": [],
      "title": "extraContainers",
      "type": "array"
    },
    "extraEnvVars": {
      "additionalProperties": true,
      "description": "Extra environment variables",
      "properties": {
        "MLFLOW_S3_IGNORE_TLS": {
          "default": "true",
          "required": [],
          "title": "MLFLOW_S3_IGNORE_TLS",
          "type": ["boolean", "string"]
        },
        "MLFLOW_S3_UPLOAD_EXTRA_ARGS": {
          "default": "{\"ServerSideEncryption\": \"aws:kms\", \"SSEKMSKeyId\": \"1234\"}",
          "required": [],
          "title": "MLFLOW_S3_UPLOAD_EXTRA_ARGS",
          "type": ["object", "string"]
        },
        "AWS_DEFAULT_REGION": {
          "default": "us-east-1",
          "required": [],
          "title": "AWS_DEFAULT_REGION",
          "type": "string"
        },
        "MLFLOW_S3_ENDPOINT_URL": {
          "default": "http://1.2.3.4:9000",
          "required": [],
          "title": "MLFLOW_S3_ENDPOINT_URL",
          "type": "string"
        },
        "AWS_CA_BUNDLE": {
          "default": "/some/ca/bundle.pem",
          "required": [],
          "title": "AWS_CA_BUNDLE",
          "type": "string"
        },
        "MLFLOW_GCS_DEFAULT_TIMEOUT": {
          "default": "60",
          "description": "Sets the standard timeout for transfer operations in seconds (Default: 60). Use -1 for indefinite timeout.",
          "required": [],
          "title": "MLFLOW_GCS_DEFAULT_TIMEOUT",
          "type": "string"
        },
        "MLFLOW_GCS_UPLOAD_CHUNK_SIZE": {
          "default": "104857600",
          "description": "Sets the standard upload chunk size for bigger files in bytes (Default: 104857600 ≙ 100MiB), must be multiple of 256 KB.",
          "required": [],
          "title": "MLFLOW_GCS_UPLOAD_CHUNK_SIZE",
          "type": "string"
        },
        "MLFLOW_GCS_DOWNLOAD_CHUNK_SIZE": {
          "default": "104857600",
          "description": "Sets the standard download chunk size for bigger files in bytes (Default: 104857600 ≙ 100MiB), must be multiple of 256 K",
          "required": [],
          "title": "MLFLOW_GCS_DOWNLOAD_CHUNK_SIZE",
          "type": "string"
        }
      },
      "required": [],
      "title": "extraEnvVars",
      "type": "object"
    },
    "extraFlags": {
      "description": "A list of flags to pass to `mlflow server` command\nItems must be camelcase. Helm will turn them to kebabcase style.",
      "items": {
        "required": []
      },
      "required": [],
      "title": "extraFlags",
      "type": "array"
    },
    "extraSecretNamesForEnvFrom": {
      "description": "Extra secrets for environment variables",
      "items": {
        "required": []
      },
      "required": [],
      "title": "extraSecretNamesForEnvFrom",
      "type": "array"
    },
    "extraVolumeMounts": {
      "description": "Extra Volume Mounts for the mlflow container",
      "items": {
        "required": []
      },
      "required": [],
      "title": "extraVolumeMounts",
      "type": "array"
    },
    "extraVolumes": {
      "description": "Extra Volumes for the pod",
      "items": {
        "required": []
      },
      "required": [],
      "title": "extraVolumes",
      "type": "array"
    },
    "fullnameOverride": {
      "default": "",
      "description": "String to override the default generated fullname",
      "required": [],
      "title": "fullnameOverride",
      "type": "string"
    },
    "global": {
      "additionalProperties": true,
      "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.",
      "required": [],
      "title": "global",
      "type": "object"
    },
    "image": {
      "additionalProperties": false,
      "description": "Image of mlflow",
      "properties": {
        "pullPolicy": {
          "default": "IfNotPresent",
          "description": "The docker image pull policy",
          "required": [],
          "title": "pullPolicy",
          "type": "string",
          "enum": ["IfNotPresent", "Never", "Always"]
        },
        "repository": {
          "default": "burakince/mlflow",
          "description": "The docker image repository to use",
          "required": [],
          "title": "repository",
          "type": "string"
        },
        "tag": {
          "default": "",
          "description": "The docker image tag to use. Default app version",
          "required": [],
          "title": "tag",
          "type": "string"
        }
      },
      "required": ["repository", "pullPolicy", "tag"],
      "title": "image",
      "type": "object"
    },
    "initImages": {
      "additionalProperties": false,
      "description": "mlflow init images",
      "properties": {
        "dbchecker": {
          "additionalProperties": false,
          "description": "dbchecker init container image configuration",
          "properties": {
            "repository": {
              "default": "busybox",
              "description": "dbchecker init container image repository to use",
              "required": [],
              "title": "repository",
              "type": "string"
            },
            "pullPolicy": {
              "default": "IfNotPresent",
              "description": "dbchecker init container image pull policy",
              "required": [],
              "title": "pullPolicy",
              "type": "string",
              "enum": ["IfNotPresent", "Never", "Always"]
            },
            "tag": {
              "default": "1.32",
              "description": "dbchecker init container image tag to use",
              "required": [],
              "title": "tag",
              "type": "string"
            }
          },
          "required": ["repository", "pullPolicy", "tag"],
          "title": "dbchecker",
          "type": "object"
        },
        "mlflowDbMigration": {
          "additionalProperties": false,
          "description": "mlflow-db-migration init container image configuration",
          "properties": {
            "repository": {
              "default": "burakince/mlflow",
              "description": "mlflow-db-migration init container image repository to use",
              "required": [],
              "title": "repository",
              "type": "string"
            },
            "pullPolicy": {
              "default": "IfNotPresent",
              "description": "mlflow-db-migration init container image pull policy",
              "required": [],
              "title": "pullPolicy",
              "type": "string",
              "enum": ["IfNotPresent", "Never", "Always"]
            },
            "tag": {
              "default": "",
              "description": "mlflow-db-migration init container image tag to use. Default app version",
              "required": [],
              "title": "tag",
              "type": "string"
            }
          },
          "required": ["repository", "pullPolicy", "tag"],
          "title": "mlflowDbMigration",
          "type": "object"
        },
        "iniFileInitializer": {
          "additionalProperties": false,
          "description": "ini-file-initializer init container image configuration",
          "properties": {
            "repository": {
              "default": "busybox",
              "description": "ini-file-initializer init container image repository to use",
              "required": [],
              "title": "repository",
              "type": "string"
            },
            "pullPolicy": {
              "default": "IfNotPresent",
              "description": "ini-file-initializer init container image pull policy",
              "required": [],
              "title": "pullPolicy",
              "type": "string",
              "enum": ["IfNotPresent", "Never", "Always"]
            },
            "tag": {
              "default": "1.32",
              "description": "ini-file-initializer init container image tag to use",
              "required": [],
              "title": "tag",
              "type": "string"
            }
          },
          "required": ["repository", "pullPolicy", "tag"],
          "title": "iniFileInitializer",
          "type": "object"
        }
      },
      "required": ["dbchecker", "mlflowDbMigration", "iniFileInitializer"],
      "title": "initImages",
      "type": "object"
    },
    "imagePullSecrets": {
      "description": "Image pull secrets for private docker registry usages",
      "items": {
        "required": []
      },
      "required": [],
      "title": "imagePullSecrets",
      "type": "array"
    },
    "ingress": {
      "additionalProperties": false,
      "properties": {
        "annotations": {
          "additionalProperties": true,
          "description": "Additional ingress annotations",
          "required": [],
          "title": "annotations",
          "type": "object"
        },
        "className": {
          "default": "",
          "description": "New style ingress class name. Only possible if you use K8s 1.18.0 or later version",
          "required": [],
          "title": "className",
          "type": "string"
        },
        "enabled": {
          "default": false,
          "description": "Specifies if you want to create an ingress access",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "hosts": {
          "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"",
          "items": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "host": {
                    "default": "chart-example.local",
                    "required": [],
                    "title": "host",
                    "type": "string"
                  },
                  "paths": {
                    "items": {
                      "anyOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "path": {
                              "default": "/",
                              "required": [],
                              "title": "path",
                              "type": "string"
                            },
                            "pathType": {
                              "default": "ImplementationSpecific",
                              "description": "Ingress path type",
                              "required": [],
                              "title": "pathType",
                              "type": "string"
                            }
                          },
                          "required": ["path", "pathType"],
                          "type": "object"
                        }
                      ],
                      "required": []
                    },
                    "required": [],
                    "title": "paths",
                    "type": "array"
                  }
                },
                "required": ["host", "paths"],
                "type": "object"
              }
            ],
            "required": []
          },
          "required": [],
          "title": "hosts",
          "type": "array"
        },
        "tls": {
          "description": "Ingress tls configuration for https access",
          "items": {
            "required": []
          },
          "required": [],
          "title": "tls",
          "type": "array"
        }
      },
      "required": ["enabled", "className", "annotations", "hosts", "tls"],
      "title": "ingress",
      "type": "object"
    },
    "initContainers": {
      "description": "Init Containers for Mlflow Pod",
      "items": {
        "required": []
      },
      "required": [],
      "title": "initContainers",
      "type": "array"
    },
    "livenessProbe": {
      "additionalProperties": true,
      "description": "Liveness probe configurations. Please look to [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes).",
      "properties": {
        "failureThreshold": {
          "default": 5,
          "required": [],
          "title": "failureThreshold",
          "type": "integer"
        },
        "initialDelaySeconds": {
          "default": 10,
          "required": [],
          "title": "initialDelaySeconds",
          "type": "integer"
        },
        "periodSeconds": {
          "default": 30,
          "required": [],
          "title": "periodSeconds",
          "type": "integer"
        },
        "timeoutSeconds": {
          "default": 3,
          "required": [],
          "title": "timeoutSeconds",
          "type": "integer"
        }
      },
      "required": [],
      "title": "livenessProbe",
      "type": "object"
    },
    "nameOverride": {
      "default": "",
      "description": "String to override the default generated name",
      "required": [],
      "title": "nameOverride",
      "type": "string"
    },
    "nodeSelector": {
      "additionalProperties": true,
      "description": "Set the node selector for the pod.",
      "required": [],
      "title": "nodeSelector",
      "type": "object"
    },
    "podAnnotations": {
      "additionalProperties": true,
      "description": "Annotations for the pod",
      "required": [],
      "title": "podAnnotations",
      "type": "object"
    },
    "extraPodLabels": {
      "additionalProperties": true,
      "description": "Extra labels for the pod",
      "required": [],
      "title": "extraPodLabels",
      "type": "object"
    },
    "podSecurityContext": {
      "additionalProperties": true,
      "description": "Security context for all pod",
      "properties": {
        "runAsUser": {
          "default": 1000,
          "required": [],
          "title": "runAsUser",
          "type": "integer"
        },
        "runAsGroup": {
          "default": 3000,
          "required": [],
          "title": "runAsGroup",
          "type": "integer"
        },
        "fsGroup": {
          "default": 2000,
          "required": [],
          "title": "fsGroup",
          "type": "integer"
        },
        "supplementalGroups": {
          "items": {
            "required": []
          },
          "required": [],
          "title": "runAsUser",
          "type": "array"
        },
        "fsGroupChangePolicy": {
          "default": "OnRootMismatch",
          "required": [],
          "title": "fsGroupChangePolicy",
          "type": "string",
          "enum": ["OnRootMismatch", "Always"]
        }
      },
      "required": [],
      "title": "podSecurityContext",
      "type": "object"
    },
    "readinessProbe": {
      "additionalProperties": true,
      "description": "Readiness probe configurations. Please look to [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes).",
      "properties": {
        "failureThreshold": {
          "default": 5,
          "required": [],
          "title": "failureThreshold",
          "type": "integer"
        },
        "initialDelaySeconds": {
          "default": 10,
          "required": [],
          "title": "initialDelaySeconds",
          "type": "integer"
        },
        "periodSeconds": {
          "default": 30,
          "required": [],
          "title": "periodSeconds",
          "type": "integer"
        },
        "timeoutSeconds": {
          "default": 3,
          "required": [],
          "title": "timeoutSeconds",
          "type": "integer"
        }
      },
      "required": [],
      "title": "readinessProbe",
      "type": "object"
    },
    "replicaCount": {
      "default": 1,
      "description": "Numbers of replicas",
      "required": [],
      "title": "replicaCount",
      "type": "integer"
    },
    "resources": {
      "additionalProperties": true,
      "description": "This block is for setting up the resource management for the pod more information can be found here: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
      "properties": {
        "limits": {
          "additionalProperties": true,
          "properties": {
            "cpu": {
              "default": "500m",
              "required": [],
              "title": "cpu",
              "type": "string"
            },
            "memory": {
              "default": "2Gi",
              "required": [],
              "title": "memory",
              "type": "string"
            }
          },
          "required": [],
          "title": "limits",
          "type": "object"
        },
        "requests": {
          "additionalProperties": true,
          "properties": {
            "cpu": {
              "default": "200m",
              "required": [],
              "title": "cpu",
              "type": "string"
            },
            "memory": {
              "default": "1Gi",
              "required": [],
              "title": "memory",
              "type": "string"
            }
          },
          "required": [],
          "title": "requests",
          "type": "object"
        }
      },
      "required": [],
      "title": "resources",
      "type": "object"
    },
    "securityContext": {
      "additionalProperties": true,
      "description": "Security context for the mlflow container",
      "properties": {
        "allowPrivilegeEscalation": {
          "default": false,
          "required": [],
          "title": "allowPrivilegeEscalation",
          "type": "boolean"
        },
        "readOnlyRootFilesystem": {
          "default": true,
          "required": [],
          "title": "readOnlyRootFilesystem",
          "type": "boolean"
        },
        "runAsNonRoot": {
          "default": true,
          "required": [],
          "title": "runAsNonRoot",
          "type": "boolean"
        },
        "runAsUser": {
          "default": 1000,
          "required": [],
          "title": "runAsUser",
          "type": "integer"
        },
        "capabilities": {
          "additionalProperties": true,
          "properties": {
            "drop": {
              "items": {
                "required": []
              },
              "required": [],
              "title": "drop",
              "type": "array"
            },
            "add": {
              "items": {
                "required": []
              },
              "required": [],
              "title": "add",
              "type": "array"
            }
          },
          "required": [],
          "title": "capabilities",
          "type": "object"
        }
      },
      "required": [],
      "title": "securityContext",
      "type": "object"
    },
    "service": {
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "default": true,
          "description": "Specifies if you want to create a service",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "annotations": {
          "additionalProperties": true,
          "description": "Additional service annotations",
          "required": [],
          "title": "annotations",
          "type": "object"
        },
        "name": {
          "default": "http",
          "description": "Default Service name",
          "required": [],
          "title": "name",
          "type": "string"
        },
        "port": {
          "default": 5000,
          "description": "Default Service port",
          "required": [],
          "title": "port",
          "type": "integer"
        },
        "containerPort": {
          "default": 5000,
          "description": "Default container port",
          "required": [],
          "title": "containerPort",
          "type": "integer"
        },
        "containerPortName": {
          "default": "mlflow",
          "description": "Default container port name",
          "required": [],
          "title": "containerPortName",
          "type": "string"
        },
        "type": {
          "default": "ClusterIP",
          "description": "Specifies what type of Service should be created",
          "required": [],
          "title": "type",
          "type": "string"
        }
      },
      "required": ["enabled", "type", "port", "containerPort", "name", "containerPortName", "annotations"],
      "title": "service",
      "type": "object"
    },
    "log": {
      "additionalProperties": true,
      "description": "Mlflow logging settings",
      "properties": {
        "enabled": {
          "default": true,
          "description": "Specifies if you want to enable mlflow logging",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "level": {
          "default": "info",
          "description": "Mlflow logging level",
          "required": [],
          "title": "level",
          "enum": ["debug", "info", "warning", "error", "critical"],
          "type": "string"
        }
      },
      "required": ["enabled", "level"],
      "title": "log",
      "type": "object"
    },
    "telemetry": {
      "additionalProperties": false,
      "type": "object",
      "description": "Mlflow Usage Tracking settings. More information can be found here: https://mlflow.org/docs/latest/community/usage-tracking/",
      "properties": {
        "enabled": {
          "default": false,
          "description": "Specifies if you want to enable collecting anonymized usage data about how core features of the platform are used.",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        }
      },
      "required": ["enabled"],
      "title": "telemetry"
    },
    "serviceAccount": {
      "additionalProperties": false,
      "properties": {
        "annotations": {
          "additionalProperties": true,
          "description": "Annotations to add to the service account. AWS EKS users can assign role arn from here.\nPlease find more information from here:\nhttps://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html",
          "required": [],
          "title": "annotations",
          "type": "object"
        },
        "automount": {
          "default": true,
          "description": "Automatically mount a ServiceAccount's API credentials?",
          "required": [],
          "title": "automount",
          "type": "boolean"
        },
        "create": {
          "default": true,
          "description": "Specifies whether a ServiceAccount should be created",
          "required": [],
          "title": "create",
          "type": "boolean"
        },
        "name": {
          "default": "",
          "description": "The name of the ServiceAccount to use.\nIf not set and create is true, a name is generated using the fullname template",
          "required": [],
          "title": "name",
          "type": "string"
        }
      },
      "required": ["create", "automount", "annotations", "name"],
      "title": "serviceAccount",
      "type": "object"
    },
    "serviceMonitor": {
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "default": false,
          "description": "When set true then use a ServiceMonitor to configure scraping",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "interval": {
          "default": "30s",
          "description": "Set how frequently Prometheus should scrape",
          "required": [],
          "title": "interval",
          "type": "string"
        },
        "labels": {
          "additionalProperties": true,
          "description": "Set labels for the ServiceMonitor, use this to define your scrape label for Prometheus Operator",
          "properties": {
            "release": {
              "default": "prometheus",
              "required": [],
              "title": "release",
              "type": "string"
            }
          },
          "required": [],
          "title": "labels",
          "type": "object"
        },
        "metricRelabelings": {
          "description": "Set of rules to relabel your exist metric labels",
          "items": {
            "required": []
          },
          "required": [],
          "title": "metricRelabelings",
          "type": "array"
        },
        "namespace": {
          "default": "monitoring",
          "description": "Set the namespace the ServiceMonitor should be deployed",
          "required": [],
          "title": "namespace",
          "type": "string"
        },
        "targetLabels": {
          "description": "Set of labels to transfer on the Kubernetes Service onto the target.",
          "items": {
            "required": []
          },
          "required": [],
          "title": "targetLabels",
          "type": "array"
        },
        "telemetryPath": {
          "default": "/metrics",
          "description": "Set path to mlflow telemetry-path",
          "required": [],
          "title": "telemetryPath",
          "type": "string"
        },
        "timeout": {
          "default": "10s",
          "description": "Set timeout for scrape",
          "required": [],
          "title": "timeout",
          "type": "string"
        },
        "useServicePort": {
          "default": false,
          "description": "When set true then use a service port. On default use a pod port.",
          "required": [],
          "title": "useServicePort",
          "type": "boolean"
        }
      },
      "required": [
        "enabled",
        "useServicePort",
        "namespace",
        "interval",
        "telemetryPath",
        "labels",
        "timeout",
        "targetLabels",
        "metricRelabelings"
      ],
      "title": "serviceMonitor",
      "type": "object"
    },
    "strategy": {
      "additionalProperties": true,
      "description": "This will set the deployment strategy more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy",
      "properties": {
        "type": {
          "default": "RollingUpdate",
          "required": [],
          "title": "type",
          "type": "string",
          "enum": ["RollingUpdate", "Recreate"]
        }
      },
      "required": ["type"],
      "title": "strategy",
      "type": "object"
    },
    "tolerations": {
      "description": "Set the tolerations for the pod.",
      "items": {
        "required": []
      },
      "required": [],
      "title": "tolerations",
      "type": "array"
    },
    "flaskServerSecretKey": {
      "default": "",
      "description": "Mlflow flask server secret key",
      "required": [],
      "title": "flaskServerSecretKey",
      "type": "string"
    },
    "auth": {
      "additionalProperties": false,
      "description": "Mlflow authentication settings",
      "properties": {
        "enabled": {
          "default": "false",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "adminUsername": {
          "default": "",
          "required": [],
          "title": "adminUsername",
          "type": "string"
        },
        "adminPassword": {
          "default": "",
          "required": [],
          "title": "adminPassword",
          "type": "string"
        },
        "existingAdminSecret": {
          "additionalProperties": false,
          "type": "object",
          "description": "Specifies if you want to use an existing admin credentials secret for auth. If it's set, adminUsername and adminPassword will be ignored.",
          "properties": {
            "name": {
              "default": "",
              "description": "The name of the existing admin credentials secret.",
              "required": [],
              "title": "name",
              "type": "string"
            },
            "usernameKey": {
              "default": "username",
              "description": "The key of the admin username in the existing admin credentials secret.",
              "required": [],
              "title": "usernameKey",
              "type": "string"
            },
            "passwordKey": {
              "default": "password",
              "description": "The key of the admin password in the existing admin credentials secret.",
              "required": [],
              "title": "passwordKey",
              "type": "string"
            }
          },
          "required": ["name", "usernameKey", "passwordKey"],
          "title": "existingAdminSecret"
        },
        "defaultPermission": {
          "default": "READ",
          "required": [],
          "title": "defaultPermission",
          "type": "string",
          "enum": ["READ", "EDIT", "MANAGE", "NO_PERMISSIONS"]
        },
        "appName": {
          "default": "basic-auth",
          "required": [],
          "title": "appName",
          "type": "string"
        },
        "authorizationFunction": {
          "default": "mlflow.server.auth:authenticate_request_basic_auth",
          "required": [],
          "title": "authorizationFunction",
          "type": "string"
        },
        "sqliteFile": {
          "default": "basic_auth.db",
          "required": [],
          "title": "sqliteFile",
          "type": "string"
        },
        "sqliteFullPath": {
          "default": "",
          "required": [],
          "title": "sqliteFullPath",
          "type": "string"
        },
        "configPath": {
          "default": "/etc/mlflow/",
          "required": [],
          "title": "configPath",
          "type": "string"
        },
        "configFile": {
          "default": "basic_auth.ini",
          "required": [],
          "title": "configFile",
          "type": "string"
        },
        "postgres": {
          "additionalProperties": false,
          "description": "PostgreSQL based centrilised authentication database",
          "properties": {
            "enabled": {
              "default": "false",
              "required": [],
              "title": "enabled",
              "type": "boolean"
            },
            "host": {
              "default": "",
              "required": [],
              "title": "host",
              "type": "string"
            },
            "port": {
              "default": 5432,
              "required": [],
              "title": "port",
              "type": "integer"
            },
            "database": {
              "default": "",
              "required": [],
              "title": "database",
              "type": "string"
            },
            "user": {
              "default": "",
              "required": [],
              "title": "user",
              "type": "string"
            },
            "password": {
              "default": "",
              "required": [],
              "title": "password",
              "type": "string"
            },
            "driver": {
              "default": "",
              "required": [],
              "title": "driver",
              "type": "string"
            },
            "existingSecret": {
              "additionalProperties": false,
              "type": "object",
              "description": "Specifies if you want to use an existing database secret for auth. If it's set, user and password will be ignored.",
              "properties": {
                "name": {
                  "default": "",
                  "description": "The name of the existing database secret.",
                  "required": [],
                  "title": "name",
                  "type": "string"
                },
                "usernameKey": {
                  "default": "username",
                  "description": "The key of the username in the existing database secret.",
                  "required": [],
                  "title": "usernameKey",
                  "type": "string"
                },
                "passwordKey": {
                  "default": "password",
                  "description": "The key of the password in the existing database secret.",
                  "required": [],
                  "title": "passwordKey",
                  "type": "string"
                }
              },
              "required": ["name", "usernameKey", "passwordKey"],
              "title": "existingSecret"
            }
          },
          "required": [
            "enabled",
            "host",
            "port",
            "database",
            "user",
            "password",
            "driver",
            "existingSecret"
          ],
          "title": "postgres",
          "type": "object"
        }
      },
      "required": [
        "enabled",
        "adminUsername",
        "adminPassword",
        "existingAdminSecret",
        "defaultPermission",
        "appName",
        "authorizationFunction",
        "sqliteFile",
        "sqliteFullPath",
        "configPath",
        "configFile",
        "postgres"
      ],
      "title": "auth",
      "type": "object"
    },
    "ldapAuth": {
      "additionalProperties": false,
      "description": "Mlflow Basic Authentication with LDAP backend settings",
      "properties": {
        "enabled": {
          "default": "false",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "uri": {
          "default": "",
          "description": "LDAP URI. e.g.: ldap://lldap:3890/dc=mlflow,dc=test",
          "required": [],
          "title": "uri",
          "type": "string"
        },
        "tlsVerification": {
          "default": "required",
          "description": "TLS verification mode. Options: required, optional, none",
          "required": [],
          "title": "tlsVerification",
          "type": "string",
          "enum": ["required", "optional", "none"]
        },
        "lookupBind": {
          "default": "",
          "description": "LDAP Loopup Bind. e.g.: uid=%s,ou=people,dc=mlflow,dc=test",
          "required": [],
          "title": "lookupBind",
          "type": "string"
        },
        "groupAttribute": {
          "default": "dn",
          "description": "LDAP group attribute",
          "required": [],
          "title": "groupAttribute",
          "type": "string"
        },
        "groupAttributeKey": {
          "default": "",
          "description": "Optional group attribute key for Active Directory users. e.g.: attributes",
          "required": [],
          "title": "groupAttributeKey",
          "type": "string"
        },
        "searchBaseDistinguishedName": {
          "default": "",
          "description": "LDAP base DN for the search. e.g.: ou=groups,dc=mlflow,dc=test",
          "required": [],
          "title": "searchBaseDistinguishedName",
          "type": "string"
        },
        "searchFilter": {
          "default": "(&(objectclass=groupOfUniqueNames)(uniquemember=%s))",
          "description": "LDAP query filter for search",
          "required": [],
          "title": "searchFilter",
          "type": "string"
        },
        "adminGroupDistinguishedName": {
          "default": "",
          "description": "LDAP DN for the admin group. e.g.: cn=test-admin,ou=groups,dc=mlflow,dc=test",
          "required": [],
          "title": "adminGroupDistinguishedName",
          "type": "string"
        },
        "userGroupDistinguishedName": {
          "default": "",
          "description": "LDAP DN for the user group. e.g.: cn=test-user,ou=groups,dc=mlflow,dc=test",
          "required": [],
          "title": "userGroupDistinguishedName",
          "type": "string"
        },
        "encodedTrustedCACertificate": {
          "default": "",
          "description": "Base64 encoded trusted CA certificate for LDAP server connection.",
          "required": [],
          "title": "encodedTrustedCACertificate",
          "type": "string"
        },
        "externalSecretForTrustedCACertificate": {
          "default": "",
          "description": "External secret name for trusted CA certificate for LDAP server connection.",
          "required": [],
          "title": "externalSecretForTrustedCACertificate",
          "type": "string"
        }
      },
      "required": [
        "enabled",
        "uri",
        "tlsVerification",
        "lookupBind",
        "groupAttribute",
        "groupAttributeKey",
        "searchBaseDistinguishedName",
        "searchFilter",
        "adminGroupDistinguishedName",
        "userGroupDistinguishedName"
      ],
      "title": "ldapAuth",
      "type": "object"
    },
    "autoscaling": {
      "additionalProperties": false,
      "description": "Autoscaling settings. Can be enabled only when backendStore is not sqlite and artifactRoot is one of blob storage systems.",
      "properties": {
        "enabled": {
          "default": false,
          "description": "If true, the number of replicas will be automatically scaled based on default metrics. On default, it will scale based on CPU and memory. For more information can be found here: https://kubernetes.io/docs/concepts/workloads/autoscaling/",
          "required": [],
          "title": "enabled",
          "type": "boolean"
        },
        "minReplicas": {
          "default": 1,
          "description": "The minimum number of replicas.",
          "required": [],
          "title": "minReplicas",
          "type": "integer"
        },
        "maxReplicas": {
          "default": 5,
          "description": "The maximum number of replicas.",
          "required": [],
          "title": "maxReplicas",
          "type": "integer"
        },
        "metrics": {
          "type": "array",
          "minItems": 1,
          "description": "The metrics to use for autoscaling.",
          "items": {
            "type": "object",
            "required": ["type"],
            "properties": {
              "type": {
                "type": "string",
                "enum": ["Resource", "Pods", "Object", "External"]
              }
            },
            "oneOf": [
              {
                "properties": {
                  "type": { "const": "Resource" },
                  "resource": {
                    "type": "object",
                    "required": ["name", "target"],
                    "properties": {
                      "name": {
                        "type": "string",
                        "enum": ["cpu", "memory"]
                      },
                      "target": {
                        "type": "object",
                        "required": ["type"],
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": ["Utilization", "AverageValue", "Value"]
                          },
                          "averageUtilization": { "type": "integer", "minimum": 0 },
                          "averageValue": { "type": "string" },
                          "value": { "type": "string" }
                        },
                        "if": { "properties": { "type": { "const": "Utilization" } } },
                        "then": { "required": ["averageUtilization"] },
                        "else": {
                          "if": { "properties": { "type": { "const": "AverageValue" } } },
                          "then": { "required": ["averageValue"] },
                          "else": { "required": ["value"] }
                        }
                      }
                    }
                  }
                },
                "required": ["resource"]
              },
              {
                "properties": {
                  "type": { "const": "Pods" },
                  "pods": {
                    "type": "object",
                    "required": ["metric", "target"],
                    "properties": {
                      "metric": {
                        "type": "object",
                        "required": ["name"],
                        "properties": {
                          "name": { "type": "string" },
                          "selector": {
                            "type": "object",
                            "properties": {
                              "matchLabels": { "type": "object" },
                              "matchExpressions": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": ["key", "operator"],
                                  "properties": {
                                    "key": { "type": "string" },
                                    "operator": { "type": "string" },
                                    "values": { "type": "array", "items": { "type": "string" } }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "target": {
                        "type": "object",
                        "required": ["type"],
                        "properties": {
                          "type": { "type": "string", "enum": ["AverageValue", "Value"] },
                          "averageValue": { "type": "string" },
                          "value": { "type": "string" }
                        },
                        "if": { "properties": { "type": { "const": "AverageValue" } } },
                        "then": { "required": ["averageValue"] },
                        "else": { "required": ["value"] }
                      }
                    }
                  }
                },
                "required": ["pods"]
              },
              {
                "properties": {
                  "type": { "const": "Object" },
                  "object": {
                    "type": "object",
                    "required": ["metric", "describedObject", "target"],
                    "properties": {
                      "metric": {
                        "type": "object",
                        "required": ["name"],
                        "properties": {
                          "name": { "type": "string" },
                          "selector": {
                            "type": "object",
                            "properties": {
                              "matchLabels": { "type": "object" },
                              "matchExpressions": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": ["key", "operator"],
                                  "properties": {
                                    "key": { "type": "string" },
                                    "operator": { "type": "string" },
                                    "values": { "type": "array", "items": { "type": "string" } }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "describedObject": {
                        "type": "object",
                        "required": ["apiVersion", "kind", "name"],
                        "properties": {
                          "apiVersion": { "type": "string" },
                          "kind": { "type": "string" },
                          "name": { "type": "string" }
                        }
                      },
                      "target": {
                        "type": "object",
                        "required": ["type"],
                        "properties": {
                          "type": { "type": "string", "enum": ["Value", "AverageValue"] },
                          "value": { "type": "string" },
                          "averageValue": { "type": "string" }
                        },
                        "if": { "properties": { "type": { "const": "Value" } } },
                        "then": { "required": ["value"] },
                        "else": { "required": ["averageValue"] }
                      }
                    }
                  }
                },
                "required": ["object"]
              },
              {
                "properties": {
                  "type": { "const": "External" },
                  "external": {
                    "type": "object",
                    "required": ["metric", "target"],
                    "properties": {
                      "metric": {
                        "type": "object",
                        "required": ["name"],
                        "properties": {
                          "name": { "type": "string" },
                          "selector": {
                            "type": "object",
                            "properties": {
                              "matchLabels": { "type": "object" },
                              "matchExpressions": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": ["key", "operator"],
                                  "properties": {
                                    "key": { "type": "string" },
                                    "operator": { "type": "string" },
                                    "values": { "type": "array", "items": { "type": "string" } }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "target": {
                        "type": "object",
                        "required": ["type"],
                        "properties": {
                          "type": { "type": "string", "enum": ["Value", "AverageValue"] },
                          "value": { "type": "string" },
                          "averageValue": { "type": "string" }
                        },
                        "if": { "properties": { "type": { "const": "Value" } } },
                        "then": { "required": ["value"] },
                        "else": { "required": ["averageValue"] }
                      }
                    }
                  }
                },
                "required": ["external"]
              }
            ]
          }
        },
        "behavior": {
          "type": "object",
          "description": "The behavior of the autoscaler. Only supported on K8s 1.18.0 or later.",
          "properties": {
            "scaleUp": {
              "type": "object",
              "description": "The behavior of the autoscaler when scaling up.",
              "properties": {
                "stabilizationWindowSeconds": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Time in seconds to wait before scaling up again (default: 0)"
                },
                "policies": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "minItems": 1,
                    "required": ["type", "value", "periodSeconds"],
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": ["Pods", "Percent"],
                        "description": "Type of scaling policy: Pods (fixed number) or Percent (percentage of current replicas)"
                      },
                      "value": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "The value to scale by (number of pods or percentage)"
                      },
                      "periodSeconds": {
                        "type": "integer",
                        "minimum": 1,
                        "description": "Time in seconds over which the policy is evaluated"
                      }
                    },
                    "additionalProperties": false
                  },
                  "description": "List of scaling policies for scale-up"
                },
                "selectPolicy": {
                  "type": "string",
                  "enum": ["Max", "Min", "Disabled"],
                  "description": "Policy to select among multiple policies: Max (default), Min, or Disabled"
                }
              },
              "additionalProperties": false
            },
            "scaleDown": {
              "type": "object",
              "description": "The behavior of the autoscaler when scaling down.",
              "properties": {
                "stabilizationWindowSeconds": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Time in seconds to wait before scaling down again (default: 300)"
                },
                "policies": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "minItems": 1,
                    "required": ["type", "value", "periodSeconds"],
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": ["Pods", "Percent"],
                        "description": "Type of scaling policy: Pods (fixed number) or Percent (percentage of current replicas)"
                      },
                      "value": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "The value to scale by (number of pods or percentage)"
                      },
                      "periodSeconds": {
                        "type": "integer",
                        "minimum": 1,
                        "description": "Time in seconds over which the policy is evaluated"
                      }
                    },
                    "additionalProperties": false
                  },
                  "description": "List of scaling policies for scale-down"
                },
                "selectPolicy": {
                  "type": "string",
                  "enum": ["Max", "Min", "Disabled"],
                  "description": "Policy to select among multiple policies: Max (default), Min, or Disabled"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        }
      },
      "required": ["enabled", "minReplicas", "maxReplicas", "metrics", "behavior"],
      "title": "autoscaling",
      "type": "object"
    }
  },
  "required": [
    "replicaCount",
    "image",
    "initImages",
    "strategy",
    "imagePullSecrets",
    "nameOverride",
    "fullnameOverride",
    "serviceAccount",
    "podAnnotations",
    "extraPodLabels",
    "podSecurityContext",
    "securityContext",
    "service",
    "log",
    "telemetry",
    "backendStore",
    "postgresql",
    "mysql",
    "artifactRoot",
    "extraArgs",
    "extraFlags",
    "extraEnvVars",
    "extraSecretNamesForEnvFrom",
    "ingress",
    "resources",
    "serviceMonitor",
    "nodeSelector",
    "tolerations",
    "affinity",
    "initContainers",
    "extraContainers",
    "extraVolumes",
    "extraVolumeMounts",
    "livenessProbe",
    "readinessProbe",
    "flaskServerSecretKey",
    "auth",
    "ldapAuth",
    "autoscaling"
  ],
  "allOf": [
    {
      "not": {
        "properties": {
          "auth": {
            "properties": {
              "enabled": {
                "const": true
              }
            }
          },
          "ldapAuth": {
            "properties": {
              "enabled": {
                "const": true
              }
            }
          }
        }
      }
    },
    {
      "description": "Ensures only one of backendStore.postgres.enabled, backendStore.mysql.enabled, postgresql.enabled can be true, or mysql.enabled can be true",
      "if": {
        "properties": {
          "backendStore": {
            "properties": {
              "postgres": {
                "properties": {
                  "enabled": { "const": true }
                }
              }
            }
          }
        },
        "required": ["backendStore"]
      },
      "then": {
        "properties": {
          "backendStore": {
            "properties": {
              "mysql": {
                "properties": {
                  "enabled": { "const": false }
                }
              }
            }
          },
          "postgresql": {
            "properties": {
              "enabled": { "const": false }
            }
          },
          "mysql": {
            "properties": {
              "enabled": { "const": false }
            }
          }
        },
        "required": ["backendStore", "postgresql", "mysql"]
      }
    },
    {
      "if": {
        "properties": {
          "backendStore": {
            "properties": {
              "mysql": {
                "properties": {
                  "enabled": { "const": true }
                }
              }
            }
          }
        },
        "required": ["backendStore"]
      },
      "then": {
        "properties": {
          "backendStore": {
            "properties": {
              "postgres": {
                "properties": {
                  "enabled": { "const": false }
                }
              }
            }
          },
          "postgresql": {
            "properties": {
              "enabled": { "const": false }
            }
          },
          "mysql": {
            "properties": {
              "enabled": { "const": false }
            }
          }
        },
        "required": ["backendStore", "postgresql", "mysql"]
      }
    },
    {
      "if": {
        "properties": {
          "postgresql": {
            "properties": {
              "enabled": { "const": true }
            }
          }
        },
        "required": ["postgresql"]
      },
      "then": {
        "properties": {
          "backendStore": {
            "properties": {
              "postgres": {
                "properties": {
                  "enabled": { "const": false }
                }
              },
              "mysql": {
                "properties": {
                  "enabled": { "const": false }
                }
              }
            }
          },
          "mysql": {
            "properties": {
              "enabled": { "const": false }
            }
          }
        },
        "required": ["backendStore", "mysql"]
      }
    },
    {
      "if": {
        "properties": {
          "mysql": {
            "properties": {
              "enabled": { "const": true }
            }
          }
        },
        "required": ["mysql"]
      },
      "then": {
        "properties": {
          "backendStore": {
            "properties": {
              "postgres": {
                "properties": {
                  "enabled": { "const": false }
                }
              },
              "mysql": {
                "properties": {
                  "enabled": { "const": false }
                }
              }
            }
          },
          "postgresql": {
            "properties": {
              "enabled": { "const": false }
            }
          }
        },
        "required": ["backendStore", "postgresql"]
      }
    }
  ],
  "type": "object"
}
