Skip to main content

Helm Chart Apps

When you install or upgrade Helm chart apps through Rancher, the UI passes several values to the Helm CLI command that installs or upgrades the app.

Injected Global Values

The Rancher UI injects the following global values into the Helm chart values of apps installed through Rancher. It adds them under values.global.cattle.

YAML DirectiveSource
cattle.clusterIdThe management cluster ID
cattle.clusterNameThe management cluster name
systemDefaultRegistryThe default registry, taken from the settings
cattle.urlThe Rancher server URL, taken from the settings
cattle.rkePathPrefixThe prefix path defined in the management cluster at spec.rancherKubernetesEngineConfig.prefixPath
cattle.rkeWindowsPathPrefixThe Windows prefix path defined in the management cluster at spec.rancherKubernetesEngineConfig.winPrefixPath
cattle.windowsIncluded in global values if workerOSs on the management cluster contains Windows
cattle.systemProjectIdTaken from the ID of the project named System

If there are two charts associated with an app, such as rancher-monitoring and rancher-monitoring-crd, Rancher injects the global values into the values of both charts.

Injecting User Values

When you select a version, a new chart is loaded. Rancher anticipates that you probably want to port all of your previously customized, non-default values from the old chart version to the new chart version, so it applies the previous chart's customization (the diff between the current and default values of the existing chart) to the new chart values before you see the values form on the next page in the workflow.

We assume that any difference between the values in two different Helm chart versions is a "user value," or a user-selected customization.

When Rancher makes the async call to install or upgrade an app, all of the data under values in the chart data (except for the global values) is created by getting the difference between the chart's standard values.yaml and the user's customized values.yaml. The actual diff function used is in shell/utils/object.js. For any values that in the standard YAML but not the user's YAML, null values are added to the result.

The standard YAML comes from versionInfo. The versionInfo originates from the store:

this.versionInfo = await this.$store.dispatch('catalog/getVersionInfo', {
repoType: this.query.repoType,
repoName: this.query.repoName,
chartName: this.query.chartName,
versionName: this.query.versionName
});

The store gets the information from the backed by following a link in the relevant GitHub repo and providing the chart name and version:

info = await repo.followLink('info', {
url: addParams(repo.links.info, {
chartName,
version: versionName
})
});

Example Output

Example output that the UI sends in the async call when installing the monitoring app:

{
"charts": [
{
"chartName": "rancher-monitoring-crd",
"version": "100.1.3+up19.0.3",
"releaseName": "rancher-monitoring-crd",
"projectId": "c-m-hhpg69fv/p-j4p76",
"values": {
"global": {
"cattle": {
"clusterId": "c-m-hhpg69fv",
"clusterName": "c4",
"systemDefaultRegistry": "",
"systemProjectId": "p-j4p76",
"url": "https://143.198.67.178",
"rkePathPrefix": "",
"rkeWindowsPathPrefix": ""
},
"systemDefaultRegistry": ""
}
},
"annotations": {
"catalog.cattle.io/ui-source-repo-type": "cluster",
"catalog.cattle.io/ui-source-repo": "rancher-charts"
}
},
{
"chartName": "rancher-monitoring",
"version": "100.1.3+up19.0.3",
"releaseName": "rancher-monitoring",
"annotations": {
"catalog.cattle.io/ui-source-repo-type": "cluster",
"catalog.cattle.io/ui-source-repo": "rancher-charts"
},
"values": {
"prometheus": {
"prometheusSpec": {
"evaluationInterval": "1m",
"retentionSize": "50GiB",
"scrapeInterval": "1m"
}
},
"rke2ControllerManager": {
"enabled": true
},
"rke2Etcd": {
"enabled": true
},
"rke2IngressNginx": {
"enabled": true
},
"rke2Proxy": {
"enabled": true
},
"rke2Scheduler": {
"enabled": true
},
"global": {
"cattle": {
"clusterId": "c-m-hhpg69fv",
"clusterName": "c4",
"systemDefaultRegistry": "",
"systemProjectId": "p-j4p76",
"url": "https://143.198.67.178",
"rkePathPrefix": "",
"rkeWindowsPathPrefix": ""
},
"systemDefaultRegistry": ""
}
}
}
],
"noHooks": false,
"timeout": "600s",
"wait": true,
"namespace": "cattle-monitoring-system",
"projectId": "c-m-hhpg69fv/p-j4p76",
"disableOpenAPIValidation": false,
"skipCRDs": false
}