TrueChartsClone/docs/manual/development/chart-structure.md

3.2 KiB

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. More information about questions.yaml is available here