{ "$schema": "http://json-schema.org/schema#", "type": "object", "properties": { "service": { "description": "Service specific configuration", "type": "object", "properties": { "image": { "description": "image docker", "type": "object", "properties": { "pullPolicy": { "type": "string", "description": "option when pulling the docker image", "default": "IfNotPresent", "enum": [ "IfNotPresent", "Always", "Never" ] }, "version": { "description": "supported versions", "type": "string", "enum": [ "inseefrlab/onyxia-jupyter-tensorflow:py3.10.4-gpu", "inseefrlab/onyxia-jupyter-tensorflow:py3.9.13-gpu" ], "pattern": "^[a-z0-9-_./]+(:[a-z0-9-_.]+)?$", "hidden": { "value": true, "path": "service/image/custom/enabled" }, "default": "inseefrlab/onyxia-jupyter-tensorflow:py3.10.4-gpu" }, "custom": { "description": "use a custom jupyter docker image", "type": "object", "properties": { "enabled": { "title": "custom image", "type": "boolean", "description": "use a custom jupyter docker image", "default": false }, "version": { "description": "jupyter unsupported version", "type": "string", "default": "inseefrlab/onyxia-jupyter-tensorflow:py3.10.4-gpu", "pattern": "^[a-z0-9-_./]+(:[a-z0-9-_.]+)?$", "hidden": { "value": false, "path": "service/image/custom/enabled" } } } } } } } }, "discovery": { "description": "configure your service to autodetect some ressources.", "type": "object", "properties": { "hive": { "type": "boolean", "title": "Enable hive metastore discovery", "description": "discover your hive metastore service", "default": true }, "mlflow": { "type": "boolean", "title": "Enable mlflow discovery", "description": "discover your mlflow service", "default": true } } }, "resources": { "description": "Your service will have at least the requested resources and never more than its limits. No limit for a resource and you can consume everything left on the host machine.", "type": "object", "properties": { "requests": { "description": "Guaranteed resources", "type": "object", "properties": { "cpu": { "description": "The amount of cpu guaranteed", "title": "CPU", "type": "string", "default": "100m", "render": "slider", "sliderMin": 50, "sliderMax": 40000, "sliderStep": 50, "sliderUnit": "m", "sliderExtremity": "down", "sliderExtremitySemantic": "guaranteed", "sliderRangeId": "cpu" }, "memory": { "description": "The amount of memory guaranteed", "title": "memory", "type": "string", "default": "2Gi", "render": "slider", "sliderMin": 1, "sliderMax": 200, "sliderStep": 1, "sliderUnit": "Gi", "sliderExtremity": "down", "sliderExtremitySemantic": "guaranteed", "sliderRangeId": "memory" } } }, "limits": { "description": "max resources", "type": "object", "properties": { "cpu": { "description": "The maximum amount of cpu", "title": "CPU", "type": "string", "default": "30000m", "render": "slider", "sliderMin": 50, "sliderMax": 40000, "sliderStep": 50, "sliderUnit": "m", "sliderExtremity": "up", "sliderExtremitySemantic": "Maximum", "sliderRangeId": "cpu" }, "memory": { "description": "The maximum amount of memory", "title": "Memory", "type": "string", "default": "50Gi", "render": "slider", "sliderMin": 1, "sliderMax": 200, "sliderStep": 1, "sliderUnit": "Gi", "sliderExtremity": "up", "sliderExtremitySemantic": "Maximum", "sliderRangeId": "memory" }, "nvidia.com/gpu": { "description": "GPU to allocate to this instance. This is also requested", "type": "string", "default": "1", "render": "slider", "sliderMin": 1, "sliderMax": 3, "sliderStep": 1, "sliderUnit": "" } } } } }, "persistence": { "description": "Configuration for persistence", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Create a persistent volume", "default": true }, "size": { "type": "string", "title": "Persistent volume size", "description": "Size of the persistent volume", "default": "10Gi", "form": true, "render": "slider", "sliderMin": 1, "sliderMax": 100, "sliderStep": 1, "sliderUnit": "Gi", "hidden": { "value": false, "path": "persistence/enabled" } } } }, "security": { "description": "security specific configuration", "type": "object", "properties": { "password": { "type": "string", "description": "Password", "default": "changeme", "x-form": { "value": "{{project.password}}" }, "x-onyxia": { "overwriteDefaultWith": "{{project.password}}" } }, "allowlist": { "type": "object", "description": "IP protection", "properties": { "enabled": { "type": "boolean", "title": "Enable IP protection", "description": "Only the configured set of IPs will be able to reach the service", "default": true, "x-form": { "value": "{{region.defaultIpProtection}}" }, "x-onyxia": { "overwriteDefaultWith": "region.defaultIpProtection" } }, "ip": { "type": "string", "description": "the white list of IP is whitespace", "title": "Whitelist of IP", "x-form": { "value": "{{user.ip}}" }, "x-onyxia": { "overwriteDefaultWith": "{{user.ip}}" }, "hidden": { "value": false, "path": "security/allowlist/enabled" } } } }, "networkPolicy": { "type": "object", "description": "Define access policy to the service", "properties": { "enabled": { "type": "boolean", "title": "Enable network policy", "description": "Only pod from the same namespace will be allowed", "default": true, "x-form": { "value": "{{region.defaultNetworkPolicy}}" }, "x-onyxia": { "overwriteDefaultWith": "region.defaultNetworkPolicy" } }, "from": { "type": "array", "description": "Array of source allowed to have network access to your service", "default": [], "x-form": { "hidden": true, "value": "{{region.from}}" }, "x-onyxia": { "hidden": true, "overwriteDefaultWith": "region.from" } } } } } }, "kubernetes": { "description": "configuration of your kubernetes access", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "allow your service to access your namespace ressources", "default": true }, "role": { "type": "string", "description": "bind your service account to this kubernetes default role", "default": "view", "hidden": { "value": false, "path": "kubernetes/enabled" }, "enum": [ "view", "edit", "admin" ] } } }, "git": { "description": "Git user configuration", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Add git config inside your environment", "default": true }, "name": { "type": "string", "description": "user name for git", "default": "", "x-form": { "value": "{{git.name}}" }, "x-onyxia": { "overwriteDefaultWith": "{{git.name}}" }, "hidden": { "value": false, "path": "git/enabled" } }, "email": { "type": "string", "description": "user email for git", "default": "", "x-form": { "value": "{{git.email}}" }, "x-onyxia": { "overwriteDefaultWith": "{{git.email}}" }, "hidden": { "value": false, "path": "git/enabled" } }, "cache": { "type": "string", "description": "duration in seconds of the credentials cache duration", "default": "", "x-form": { "value": "{{git.credentials_cache_duration}}" }, "x-onyxia": { "overwriteDefaultWith": "{{git.credentials_cache_duration}}" }, "hidden": { "value": false, "path": "git/enabled" } }, "token": { "type": "string", "description": "personal access token", "default": "", "x-form": { "value": "{{git.token}}" }, "x-onyxia": { "overwriteDefaultWith": "{{git.token}}" }, "hidden": { "value": false, "path": "git/enabled" } }, "repository": { "type": "string", "description": "Repository url", "default": "", "x-form": { "value": "{{git.project}}" }, "x-onyxia": { "overwriteDefaultWith": "{{git.project}}" }, "hidden": { "value": false, "path": "git/enabled" } }, "branch": { "type": "string", "description": "Brach automatically checkout", "default": "", "hidden": { "value": "", "path": "git/repository" } } } }, "vault": { "description": "Configuration of vault client", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Add vault temporary identity inside your environment", "default": true }, "token": { "description": "token vault", "type": "string", "x-form": { "value": "{{vault.VAULT_TOKEN}}" }, "x-onyxia": { "overwriteDefaultWith": "{{vault.VAULT_TOKEN}}" }, "hidden": { "value": false, "path": "vault/enabled" } }, "url": { "description": "url of vault server", "type": "string", "x-form": { "value": "{{vault.VAULT_ADDR}}" }, "x-onyxia": { "overwriteDefaultWith": "{{vault.VAULT_ADDR}}" }, "hidden": { "value": false, "path": "vault/enabled" } }, "mount": { "description": "mount of the v2 secret engine", "type": "string", "x-form": { "value": "{{vault.VAULT_MOUNT}}" }, "x-onyxia": { "overwriteDefaultWith": "{{vault.VAULT_MOUNT}}" }, "hidden": { "value": false, "path": "vault/enabled" } }, "directory": { "description": "top level directory", "type": "string", "x-form": { "value": "{{vault.VAULT_TOP_DIR}}" }, "x-onyxia": { "overwriteDefaultWith": "{{vault.VAULT_TOP_DIR}}" }, "hidden": { "value": false, "path": "vault/enabled" } }, "secret": { "description": "the path of the secret to convert into a list of environment variables", "type": "string", "default": "", "hidden": { "value": false, "path": "vault/enabled" } } } }, "s3": { "description": "Configuration of temporary identity", "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Add S3 temporary identity inside your environment", "default": true }, "accessKeyId": { "description": "AWS Access Key", "type": "string", "x-form": { "value": "{{s3.AWS_ACCESS_KEY_ID}}" }, "x-onyxia": { "overwriteDefaultWith": "{{s3.AWS_ACCESS_KEY_ID}}" }, "hidden": { "value": false, "path": "s3/enabled" } }, "endpoint": { "description": "AWS S3 Endpoint", "type": "string", "x-form": { "value": "{{s3.AWS_S3_ENDPOINT}}" }, "x-onyxia": { "overwriteDefaultWith": "{{s3.AWS_S3_ENDPOINT}}" }, "hidden": { "value": false, "path": "s3/enabled" } }, "defaultRegion": { "description": "AWS S3 default region", "type": "string", "x-form": { "value": "{{s3.AWS_DEFAULT_REGION}}" }, "x-onyxia": { "overwriteDefaultWith": "{{s3.AWS_DEFAULT_REGION}}" }, "hidden": { "value": false, "path": "s3/enabled" } }, "secretAccessKey": { "description": "AWS S3 secret access key", "type": "string", "x-form": { "value": "{{s3.AWS_SECRET_ACCESS_KEY}}" }, "x-onyxia": { "overwriteDefaultWith": "{{s3.AWS_SECRET_ACCESS_KEY}}" }, "hidden": { "value": false, "path": "s3/enabled" } }, "sessionToken": { "description": "AWS S3 session Token", "type": "string", "x-form": { "value": "{{s3.AWS_SESSION_TOKEN}}" }, "x-onyxia": { "overwriteDefaultWith": "{{s3.AWS_SESSION_TOKEN}}" }, "hidden": { "value": false, "path": "s3/enabled" } } } }, "ingress": { "type": "object", "form": true, "title": "Ingress Details", "properties": { "hostname": { "type": "string", "form": true, "title": "Hostname", "x-form": { "hidden": true, "value": "{{project.id}}-{{k8s.randomSubdomain}}-0.{{k8s.domain}}" }, "x-onyxia": { "hidden": true, "overwriteDefaultWith": "{{project.id}}-{{k8s.randomSubdomain}}-0.{{k8s.domain}}" } }, "userHostname": { "type": "string", "form": true, "title": "Hostname", "x-form": { "hidden": true, "value": "{{project.id}}-{{k8s.randomSubdomain}}-user.{{k8s.domain}}" }, "x-onyxia": { "hidden": true, "overwriteDefaultWith": "{{project.id}}-{{k8s.randomSubdomain}}-user.{{k8s.domain}}" } }, "ingressClassName": { "type": "string", "form": true, "title": "ingressClassName", "default": "", "x-form": { "hidden": true, "value": "{{k8s.ingressClassName}}" }, "x-onyxia": { "hidden": true, "overwriteDefaultWith": "{{k8s.ingressClassName}}" } } } }, "networking": { "type": "object", "form": true, "title": "Networking detail", "properties": { "user": { "type": "object", "description": "user defined port", "properties": { "enabled": { "type": "boolean", "title": "Enable a custom service port", "description": "Enable a custom service port", "default": false }, "port": { "type": "integer", "description": "port of the custom service", "title": "Custom service port", "hidden": { "value": false, "path": "networking/user/enabled" }, "default": 5000 } } } } }, "init": { "description": "Init parameters", "type": "object", "properties": { "regionInit": { "type": "string", "description": "region initialization script", "default": "", "x-form": { "hidden": true, "value": "{{k8s.initScriptUrl}}" }, "x-onyxia": { "hidden": true, "overwriteDefaultWith": "{{k8s.initScriptUrl}}" } }, "personalInit": { "type": "string", "description": "user initialization script", "default": "" }, "personalInitArgs": { "type": "string", "description": "args for user initialization script", "default": "" } } } } }