{
    "2403.0.0": {
        "healthy": true,
        "supported": true,
        "healthy_error": null,
        "location": "/__w/charts/charts/charts/ix-chart/2403.0.0",
        "last_update": "2024-04-02 09:23:43",
        "required_features": [
            "definitions/gpuConfiguration",
            "normalize/ixVolume",
            "definitions/interface",
            "normalize/interfaceConfiguration",
            "definitions/nodeIP"
        ],
        "human_version": "2403.0.0",
        "version": "2403.0.0",
        "chart_metadata": {
            "name": "ix-chart",
            "description": "A Helm chart for deploying simple workloads Kubernetes",
            "annotations": {
                "title": "ix-chart"
            },
            "type": "application",
            "version": "2403.0.0",
            "apiVersion": "v2",
            "appVersion": "v1",
            "kubeVersion": ">=1.16.0-0",
            "maintainers": [
                {
                    "name": "truenas",
                    "url": "https://www.truenas.com/",
                    "email": "dev@ixsystems.com"
                }
            ],
            "dependencies": [
                {
                    "name": "common",
                    "repository": "file://../../../common/2304.0.1",
                    "version": "2304.0.1"
                }
            ],
            "home": "https://www.truenas.com/",
            "icon": "https://media.sys.truenas.net/apps/ix-chart/icons/icon.webp",
            "keywords": [],
            "sources": []
        },
        "app_metadata": {
            "runAsContext": [],
            "capabilities": [],
            "hostMounts": []
        },
        "schema": {
            "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"
                                    ],
                                    "default": "192.168.0.10"
                                }
                            },
                            {
                                "variable": "port",
                                "label": "Port",
                                "description": "Specify port to be used for Portal access",
                                "schema": {
                                    "type": "int",
                                    "max": 65535,
                                    "default": 15000
                                }
                            }
                        ]
                    }
                },
                {
                    "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"
                            }
                        ]
                    }
                },
                {
                    "variable": "cronSchedule",
                    "label": "Cron Schedule",
                    "group": "Workload Details",
                    "schema": {
                        "hidden": true,
                        "type": "cron",
                        "show_if": [
                            [
                                "workloadType",
                                "=",
                                "CronJob"
                            ]
                        ],
                        "default": {
                            "minute": "5"
                        }
                    }
                },
                {
                    "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"
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "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"
                            }
                        ]
                    }
                },
                {
                    "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"
                            }
                        ]
                    }
                },
                {
                    "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
                                            }
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "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"
                                                ],
                                                "enum": []
                                            }
                                        },
                                        {
                                            "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.\"\n"
                            },
                            {
                                "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"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "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>\nFormat: 100Mi, 1Gi, 2Gi etc\n",
                                            "schema": {
                                                "type": "string",
                                                "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$",
                                                "default": "512Mi"
                                            }
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "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
                                            }
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "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
                                }
                            }
                        ]
                    }
                },
                {
                    "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"
                    }
                }
            ]
        },
        "app_readme": "<h1>iX-Chart</h1>\n<p>iX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.\nIt provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.</p>",
        "detailed_readme": "<h1>iX Chart</h1>\n<p>iX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.\nIt provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.</p>\n<p>This chart will deploy a docker image as a kubernetes workload allowing user to configure the workload deployment / management.</p>\n<h2>Introduction</h2>\n<p>iX-chart is designed for simple single docker image deployments.</p>\n<h2>Configuration</h2>\n<p>The following table lists the configurable parameters of the iX chart and\ntheir default values.</p>\n<p>| Parameter                      | Description                                                                                                     | Default                                                              |\n|:-------------------------------|:----------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------|\n| <code>workloadType</code>                 | Specify type of workload to deploy                                                                              | <code>Deployment</code>                                                         |\n| <code>cronSchedule</code>                 | Specify schedule for cronjob if <code>workloadType</code> is <code>CronJob</code>.                                                    | <code>{\"minute\": \"5\", \"hour\": \"*\", \"dom\": \"*\", \"month\": \"*\", \"dow\": \"*\"}</code> |\n| <code>image.repository</code>             | The image repository to pull from                                                                               | <code>debian</code>                                                             |\n| <code>image.tag</code>                    | The image tag to pull from                                                                                      | <code>latest</code>                                                             |\n| <code>image.pullPolicy</code>             | Image pull policy                                                                                               | <code>IfNotPresent</code>                                                       |\n| <code>updateStrategy</code>               | Upgrade Policy                                                                                                  | <code>RollingUpdate</code>                                                      |\n| <code>jobRestartPolicy</code>             | Restart Policy for job type workload ( only applicable if <code>workloadType</code> is <code>Job</code>/<code>CronJob</code>                     | <code>OnFailure</code>                                                          |\n| <code>containerCommand</code>             | Commands to execute inside container overriding image CMD default                                               | <code>null</code>                                                               |\n| <code>containerArgs</code>                | Specify arguments for container command                                                                         | <code>null</code>                                                               |\n| <code>containerEnvironmentVariables</code>| Container Environment Variables                                                                                 | <code>null</code>                                                               |\n| <code>externalInterfaces</code>           | Add external interfaces in the pod                                                                              | <code>null</code>                                                               |\n| <code>dnsPolicy</code>                    | Specify DNS Policy for pod                                                                                      | <code>Default</code>                                                            |\n| <code>dnsConfig</code>                    | Specify custom DNS configuration which will be applied to the pod                                               | <code>{\"nameservers\": [], \"searches\": []}</code>                                |\n| <code>hostNetwork</code>                  | Use host network for workload ( similar to docker host networking )                                             | <code>false</code>                                                              |\n| <code>hostPortsList</code>                | Specify ports of host and workload to forward traffic from host port to workload port.                          | <code>null</code>                                                               |\n| <code>portForwardingList</code>           | Specify ports of node and workload to forward traffic from node port to workload port                           | <code>null</code>                                                               |\n| <code>hostPathVolumes</code>              | Specify host paths to be used as hostpath volumes for the workload                                              | <code>null</code>                                                               |\n| <code>volumes</code>                      | Specify <code>ix_volumes</code>                                                                                            | <code>null</code>                                                               |\n| <code>livenessProbe</code>                | Configure Liveness Probe for workload                                                                           | <code>null</code>                                                               |\n| <code>gpuConfiguration</code>             | Allocate GPU to workload ( if available )                                                                       | <code>{}</code>                                                                 |</p>\n<h2>Persistence</h2>\n<p>Chart release iX chart offers 2 ways to have persistent storage:</p>\n<p>1) <code>hostPathVolumes</code>\n2) <code>volumes</code></p>\n<p>For (1), they are kubernetes host path volumes which the user can assign to the workload with RO/RW permissions.</p>\n<p>(2) is a host path volume as well but it operates differently then (1) in terms of where it lives and how it's lifecycle is tied to the chart release.\nFor (2), users specify where they would like persistent storage in the workload and a dataset name ( it should be unique per each chart release ), based on this input,\nsystem will create a dataset and then use it as a host path volume for the workload. During upgrades, snapshot will be taken for these volumes and on rollback users can subsequently\nrestore the snapshots hence the data.\nWhen a chart release will be deleted, all (2) volumes data will be deleted unlike (1) ( until of course they are not in the chart release's dataset path ).</p>\n<h2>Recommended Persistence Configuration Examples</h2>\n<p>The following is a recommended configuration example for creating ix volumes</p>\n<p>```\n\"volumes\": [\n  {\n     \"datasetName\": \"ix_volume1\",\n     \"mountPath\": \"/mount_test1\"\n  },\n  {\n     \"datasetName\": \"ix_volume2\",\n     \"mountPath\": \"/mount_test2\"\n  }\n]</p>\n<p>```</p>\n<p><code>mountPath</code> refers to the path inside the pod.</p>\n<hr />\n<p>The following is a recommended configuration example for <code>hostPathVolumes</code></p>\n<p><code>\"hostPathVolumes\": [\n  {\n    \"hostPath\": \"/mnt/pool/test_dir\",\n    \"mountPath\": \"/test_dir\",\n    \"readOnly\": true\n  },\n  {\n    \"hostPath\": \"/mnt/pool/test_file\",\n    \"mountPath\": \"/test_file\",\n    \"readOnly\": true\n  }\n]</code></p>\n<h2>External Interfaces Configuration Examples</h2>\n<p><code>\"externalInterfaces\": [\n  {\n    \"hostInterface\": \"ens3\",\n    \"ipam\": {\"type\": \"dhcp\"}\n  },\n  {\n     \"hostInterface\": \"br0\",\n     \"ipam\": {\n       \"type\": \"static\",\n       \"staticIPConfigurations\": [\"192.168.0.120/24\"],\n       \"staticRoutes\": [\n         {\"destination\": \"0.0.0.0/0\", \"gateway\": \"192.168.0.1\"}\n       ]\n     }\n  }\n]</code></p>\n<p>The first entry in the above configuration example will add an external interface in the pod using macvlan with <code>ipam</code> being set to <code>dhcp</code>.\nSecond entry will add an external interface in the pod using <code>bridge</code> and using static IP configuration for the external interface.</p>",
        "changelog": null
    }
}