Skip to content

TrueNAS SCALE Chart Structure

This is a general synopsis about the structure of a SCALE App and/or Helm Chart, it does not directly reflect TrueCharts specific settings.

The following files are generally considered to be a “normal” Helm chart:

charts/<train>/<chart name>/
charts/ # Directory containing dependency charts
Chart.yaml # Required Helm chart information file
README.md # Optional: Helm Readme file (will be rendered in TrueNAS SCALE UI as well)
templates/ # A directory of templates that, when combined with values.yml will generate K8s YAML
values.yaml # The default configuration values for this chart

The following files are specific for TrueNAS SCALE:

charts/<train>/<chart name>/SCALE/
app-readme.md # TrueNAS SCALE Specific: Readme file for display in TrueNAS SCALE UI, automatically generated
questions.yaml # TrueNAS SCALE Specific: File containing questions for TrueNAS SCALE UI
ix_values.yaml # Hidden configuration values when installing using TrueNAS SCALE
item.yaml # Contains generic information about the App for the TrueNAS SCALE UI

See the upstream Helm chart developer reference for a complete walk through of developing charts.

To convert an upstream chart to take advantage of TrueNAS SCALE enhanced UX, first create an item.yaml file. This file among other catalog item information provides a list of categories that this chart fits into. This helps users navigate and filtering when browsing the catalog UI.

$ cat charts/<train>/<chart name>/SCALE/item.yaml

categories:
- generic
icon_url: "http://ix_url"

Then add a questions.yaml file to prompt the user for something.

groups:
- name: "Container Images"
description: "Image to be used for container"
questions:
- variable: image
description: "Docker Image Details"
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"

The above will prompt the user with 2 text fields and a dropdown in the UI getting details for image configuration in a helm chart. Read more information about questions.yaml