Files
chart/library/ix-dev/charts/ix-chart/questions.yaml
2023-08-22 14:05:45 +03:00

657 lines
22 KiB
YAML

groups:
- name: "Container Images"
description: "Image to be used for container"
- name: "Container Entrypoint"
description: "Configuration of the executable that will be run when the container is started"
- name: "Container Environment Variables"
description: "Set the environment that will be visible to the container"
- name: "Networking"
description: "Configure networking for container"
- name: "Port Forwarding"
description: "Configure ports to forward to workload"
- name: "Storage"
description: "Persist and share data that is separate from the lifecycle of the container"
- name: "Health Check"
description: "Define mechanism to periodically probe the container to ensure it's functioning as desired"
- name: "Workload Details"
description: "Configure how workload should be deployed"
- name: "Scaling/Upgrade Policy"
description: "Configure how pods are replaced when configuration is upgraded"
- name: "Restart Policy"
description: "Configure when pod should be restarted in case of failure"
- name: "Resource Reservation"
description: "Specify resources to be allocated to workload"
- name: "Resource Limits"
description: "Set CPU/memory limits for Kubernetes Pod"
- name: "Portal Configuration"
description: "Configure UI web portal"
questions:
- variable: enableUIPortal
label: "Enable WebUI Portal"
description: "Enable webui portal for easier access to workload (Only valid for TrueNAS SCALE Bluefin and later)"
group: "Portal Configuration"
schema:
type: boolean
default: false
- variable: portalDetails
label: "WebUI Portal"
description: "Configure WebUI Portal"
group: "Portal Configuration"
schema:
show_if: [["enableUIPortal", "=", true]]
type: dict
attrs:
- variable: portalName
label: "Portal Name"
description: "Specify a UI Portal name to use which would be displayed in the UI"
schema:
type: string
default: "Web Portal"
- variable: protocol
label: "Protocol for Portal"
description: "Specify protocol for portal"
schema:
type: string
default: "http"
enum:
- value: "http"
description: "HTTP Protocol"
- value: "https"
description: "HTTPS Protocol"
- variable: useNodeIP
label: "Use Node IP for Portal IP/Domain"
schema:
type: boolean
default: true
- variable: host
description: "IP/Domain to use for accessing the portal"
label: "Portal IP/Domain"
schema:
show_if: [["useNodeIP", "=", false]]
type: string
$ref:
- "definitions/nodeIP"
- variable: port
label: "Port"
description: "Specify port to be used for Portal access"
schema:
type: int
max: 65535
default: 15000
# Workload type
- variable: workloadType
description: "Please specify type of workload to deploy"
label: "Workload Type"
group: "Workload Details"
schema:
type: string
hidden: true
default: "Deployment"
required: true
enum:
- value: "Deployment"
description: "Deploy a Deployment workload"
- value: "Job"
description: "Deploy job workload"
- value: "CronJob"
description: "Deploy cronjob workload"
# Cronjob schedule
- variable: cronSchedule
label: "Cron Schedule"
group: "Workload Details"
schema:
hidden: true
type: cron
show_if: [["workloadType", "=", "CronJob"]]
default:
minute: "5"
# Image related
- variable: image
description: "Docker Image Details"
label: "Docker Image"
group: "Container Images"
schema:
type: dict
required: true
attrs:
- variable: repository
description: "Docker image repository"
label: "Image repository"
schema:
type: string
required: true
- variable: tag
description: "Tag to use for specified image"
label: "Image Tag"
schema:
type: string
default: "latest"
- variable: pullPolicy
description: "Docker Image Pull Policy"
label: "Image Pull Policy"
schema:
type: string
default: "IfNotPresent"
enum:
- value: "IfNotPresent"
description: "Only pull image if not present on host"
- value: "Always"
description: "Always pull image even if present on host"
- value: "Never"
description: "Never pull image even if it's not present on host"
# Update strategy
- variable: updateStrategy
description: "Upgrade Policy"
label: "Update Strategy"
group: "Scaling/Upgrade Policy"
schema:
type: string
show_if: [["workloadType", "=", "Deployment"]]
default: "Recreate"
enum:
- value: "RollingUpdate"
description: "Create new pods and then kill old ones"
- value: "Recreate"
description: "Kill existing pods before creating new ones"
# Restart Policy
- variable: jobRestartPolicy
description: "Restart Policy for Job"
label: "Restart Policy"
group: "Restart Policy"
schema:
hidden: true
type: string
default: "OnFailure"
show_if: [["workloadType", "!=", "Deployment"]]
enum:
- value: "OnFailure"
description: "Only restart job if it fails"
- value: "Never"
description: "Never restart job even if it fails"
# Configurable CMD / Entrypoint / Environment Variables
- variable: containerCommand
description: "Commands to execute inside container overriding image CMD default"
label: "Container CMD"
group: "Container Entrypoint"
schema:
type: list
items:
- variable: command
description: "Container Command"
label: "Command"
schema:
type: string
- variable: containerArgs
description: "Specify arguments for container command"
label: "Container Args"
group: "Container Entrypoint"
schema:
type: list
items:
- variable: arg
description: "Container Arg"
label: "Arg"
schema:
type: string
- variable: containerEnvironmentVariables
description: "Container Environment Variables"
label: "Container Environment Variables"
group: "Container Environment Variables"
schema:
type: list
items:
- variable: environmentVariable
description: "Container Environment Variable"
label: "Container Environment Variable"
schema:
type: dict
attrs:
- variable: name
description: "Environment Variable Name"
label: "Environment Variable Name"
schema:
type: string
required: true
- variable: value
description: "Environment Variable Value"
label: "Environment Variable Value"
schema:
type: string
required: true
# Networking options
- variable: externalInterfaces
description: "Add External Interfaces"
label: "Add external Interfaces"
group: "Networking"
schema:
type: list
items:
- variable: interfaceConfiguration
description: "Interface Configuration"
label: "Interface Configuration"
schema:
type: dict
$ref:
- "normalize/interfaceConfiguration"
attrs:
- variable: hostInterface
description: "Please specify host interface"
label: "Host Interface"
schema:
type: string
required: true
$ref:
- "definitions/interface"
- variable: ipam
description: "Define how IP Address will be managed"
label: "IP Address Management"
schema:
type: dict
required: true
attrs:
- variable: type
description: "Specify type for IPAM"
label: "IPAM Type"
schema:
type: string
required: true
enum:
- value: "dhcp"
description: "Use DHCP"
- value: "static"
description: "Use static IP"
show_subquestions_if: "static"
subquestions:
- variable: staticIPConfigurations
label: "Static IP Addresses"
schema:
type: list
items:
- variable: staticIP
label: "Static IP"
schema:
type: ipaddr
cidr: true
- variable: staticRoutes
label: "Static Routes"
schema:
type: list
items:
- variable: staticRouteConfiguration
label: "Static Route Configuration"
schema:
type: dict
attrs:
- variable: destination
label: "Destination"
schema:
type: ipaddr
cidr: true
required: true
- variable: gateway
label: "Gateway"
schema:
type: ipaddr
cidr: false
required: true
- variable: dnsPolicy
label: "DNS Policy"
description: "Default behaviour is where Pod inherits the name resolution configuration from the node that the pods run on, if None is specified, It allows a Pod to ignore DNS settings from the Kubernetes environment."
group: "Networking"
schema:
type: string
default: "Default"
enum:
- value: "Default"
description: "Use Default DNS Policy where Pod will inherit the name resolution configuration from the node."
- value: "ClusterFirst"
description: >
"Kubernetes internal DNS will be prioritised and resolved first. If the domain does not resolve with internal
kubernetes DNS, the DNS query will be forwarded to the upstream nameserver inherited from the node. This is
useful if the workload needs to access other service(s)/workload(s) using kubernetes internal DNS."
- value: "ClusterFirstWithHostNet"
description: "For Pods running with hostNetwork and wanting to prioritise internal kubernetes DNS should make use of this policy."
- value: "None"
description: "Ignore DNS settings from the Kubernetes cluster"
- variable: dnsConfig
label: "DNS Configuration"
group: "Networking"
description: "Specify custom DNS configuration which will be applied to the pod"
schema:
type: dict
attrs:
- variable: nameservers
label: "Nameservers"
schema:
default: []
type: list
items:
- variable: nameserver
label: "Nameserver"
schema:
type: string
- variable: searches
label: "Searches"
schema:
default: []
type: list
items:
- variable: search
label: "Search Entry"
schema:
type: string
- variable: options
label: "DNS Options"
schema:
type: list
items:
- variable: optionsEntry
label: "Option Entry Configuration"
schema:
type: dict
attrs:
- variable: name
label: "Option Name"
schema:
type: string
required: true
- variable: value
label: "Option Value"
schema:
type: string
required: true
- variable: hostNetwork
label: "Provide access to node network namespace for the workload"
group: "Networking"
schema:
type: boolean
default: false
show_if: [["externalInterfaces", "=", []]]
- variable: hostPortsList
label: "Specify host ports for the workload"
description: "Only use host ports if scaling of a workload is not required"
group: "Networking"
schema:
show_if: [["updateStrategy", "=", "Recreate"]]
type: list
hidden: true
items:
- variable: hostPortConfiguration
label: "Host Port Configuration"
schema:
type: dict
attrs:
- variable: containerPort
label: "Container Port"
schema:
type: string
required: true
- variable: hostPort
label: "Host Port"
schema:
type: string
required: true
- variable: portForwardingList
label: "Specify Node ports to forward to workload"
group: "Port Forwarding"
description: "Specify ports of node and workload to forward traffic from node port to workload port"
schema:
type: list
show_if: [["hostNetwork", "=", false]]
items:
- variable: portForwarding
label: "Port Forwarding Configuration"
schema:
type: dict
attrs:
- variable: containerPort
label: "Container Port"
schema:
type: int
required: true
- variable: nodePort
label: "Node Port"
schema:
type: int
required: true
min: 9000
max: 65535
- variable: protocol
label: "Protocol"
schema:
type: string
default: "TCP"
enum:
- value: "TCP"
description: "TCP Protocol"
- value: "UDP"
description: "UDP Protocol"
# Storage Options
# Host path based volumes
- variable: hostPathVolumes
label: "Host Path Volumes"
group: "Storage"
schema:
type: list
items:
- variable: hostPathConfiguration
label: "Host Path Configuration"
schema:
type: dict
attrs:
- variable: hostPath
label: "Host Path"
schema:
type: hostpath
required: true
- variable: mountPath
label: "Mount Path"
description: "Path where host path will be mounted inside the pod"
schema:
type: path
required: true
- variable: readOnly
label: "Read Only"
schema:
type: boolean
default: false
- variable: emptyDirVolumes
label: "Memory Backed Volumes"
description: "Mount memory based temporary volumes for fast access i.e consuming /dev/shm"
group: "Storage"
schema:
type: list
items:
- variable: emptyDirVolume
label: "Memory Backed Volume"
schema:
type: dict
attrs:
- variable: mountPath
label: "Mount Path"
description: "Path where temporary path will be mounted inside the pod"
schema:
type: path
required: true
- variable: sizeLimit
label: "Size Limit"
description: |
Optional - Size of the memory backed volume.</br>
Format: 100Mi, 1Gi, 2Gi etc
schema:
type: string
valid_chars: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$"
default: "512Mi"
# Volumes
- variable: volumes
label: "Volumes"
group: "Storage"
schema:
type: list
items:
- variable: volume
label: "Volume"
schema:
type: dict
$ref:
- "normalize/ixVolume"
attrs:
- variable: mountPath
label: "Mount Path"
description: "Path where the volume will be mounted inside the pod"
schema:
type: path
required: true
- variable: datasetName
label: "Dataset Name"
schema:
type: string
required: true
# Pod Probes
# Liveness Probe
- variable: livenessProbe
label: "Liveness Probe"
description: "Configure Liveness Probe"
group: "Health Check"
schema:
hidden: true
type: dict
default: null
"null": true
attrs:
- variable: command
label: "Liveness command"
description: "Specify a command to determine liveness of pod"
schema:
type: list
required: true
items:
- variable: commandArg
label: "Command Arg"
schema:
type: string
- variable: initialDelaySeconds
label: "Seconds Delay"
description: "Seconds to delay the first liveness probe"
schema:
type: int
default: 5
- variable: periodSeconds
label: "Period Seconds"
description: "Specify number of seconds to run liveness probe"
schema:
type: int
default: 10
# Specify GPU configuration
- variable: gpuConfiguration
label: "GPU Configuration"
group: "Resource Reservation"
schema:
type: dict
$ref:
- "definitions/gpuConfiguration"
attrs: []
- variable: tty
label: "Enable TTY"
description: "Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled."
group: "Workload Details"
schema:
type: boolean
default: false
- variable: stdin
label: "Enable STDIN"
description: "Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled."
group: "Workload Details"
schema:
type: boolean
default: false
- variable: securityContext
label: "Security Context"
group: "Workload Details"
schema:
type: dict
attrs:
- variable: privileged
label: "Privileged Mode"
description: "Determines if any container in a pod can enable privileged mode. By default a container is not allowed to access any devices on the host, but a 'privileged' container is given access to all devices on the host. This allows the container nearly all the same access as processes running on the host."
schema:
type: boolean
default: false
- variable: capabilities
label: "Capabilities"
description: "With Linux capabilities, you can grant certain privileges to a process without granting all the privileges of the root user."
schema:
type: list
items:
- variable: capability
description: "Add Capability"
label: "Add Capability"
schema:
type: string
- variable: enableRunAsUser
label: "Configure Container User and Group ID"
description: "Configure security context runAsUser and runAsGroup variables"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: runAsUser
label: "Run Container As User"
description: "Configure user id for container."
schema:
type: int
default: 568
- variable: runAsGroup
label: "Run Container As Group"
description: "Configure group id for container."
schema:
type: int
default: 568
- variable: enableResourceLimits
label: "Enable Pod resource limits"
group: "Resource Limits"
schema:
type: boolean
default: false
- variable: cpuLimit
label: "CPU Limit"
description: "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100."
group: "Resource Limits"
schema:
type: string
show_if: [["enableResourceLimits", "=", true]]
valid_chars: "^\\d+(?:\\.\\d+(?!.*m$)|m?$)"
default: "4000m"
- variable: memLimit
label: "Memory Limit"
group: "Resource Limits"
description: "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi"
schema:
type: string
show_if: [["enableResourceLimits", "=", true]]
valid_chars: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$"
default: "8Gi"