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 Directive | Source |
---|---|
cattle.clusterId | The management cluster ID |
cattle.clusterName | The management cluster name |
systemDefaultRegistry | The default registry, taken from the settings |
cattle.url | The Rancher server URL, taken from the settings |
cattle.rkePathPrefix | The prefix path defined in the management cluster at spec.rancherKubernetesEngineConfig.prefixPath |
cattle.rkeWindowsPathPrefix | The Windows prefix path defined in the management cluster at spec.rancherKubernetesEngineConfig.winPrefixPath |
cattle.windows | Included in global values if workerOSs on the management cluster contains Windows |
cattle.systemProjectId | Taken 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
}