qbec
qbec copied to clipboard
Optional `helm dependency update` for helm charts
Some helm applications may not work without helm dependency update.
For example stable/cert-manager will not working without it.
setting cluster to stage
setting context to stage
cluster metadata load took 9ms
[helm template] cd /tmp/cert-manager/components && helm template ../vendor/helm-charts/stable/cert-manager --name cert-manager --namespace kube-system --values -
Error: found in requirements.yaml, but missing in charts/ directory: webhook
✘ evaluate 'cert-manager': RUNTIME ERROR: run helm template command: exit status 1
components/cert-manager.jsonnet:(5:1)-(14:2)
after
cd /tmp/cert-manager/vendor/helm-charts/stable/cert-manager && helm dependency update
everything is working fine
Does this flow work at all when the chart is packaged as a tar.gz file?
What do you mean? I have helm-charts repository which is connected to my project as submodule:
# git submodule
f3d852b477a87eabc83adbb8fcdbba038458c8d2 vendor/helm-charts (f3d852b47)
and my component is looking like:
# cat components/prometheus-operator.jsonnet
local env = { name: std.extVar('qbec.io/env'), namespace: std.extVar('qbec.io/defaultNs') };
local p = import '../params.libsonnet';
local params = p.components.prometheusOperator;
std.native('expandHelmTemplate')(
'../vendor/helm-charts/stable/prometheus-operator',
params.values,
{
namespace: env.namespace,
name: params.name,
thisFile: std.thisFile,
verbose: true,
}
)
If I trying to use prometheus-operator from it, I will get:
# qbec show stage
[helm template] cd /home/kvaps/git/infrastructure/deployments/prometheus-operator/components && helm template ../vendor/helm-charts/stable/prometheus-operator --name monitoring --namespace monitoring --values -
Error: found in Chart.yaml, but missing in charts/ directory: kube-state-metrics, prometheus-node-exporter, grafana
✘ evaluate 'prometheus-operator': RUNTIME ERROR: run helm template command: exit status 1
components/prometheus-operator.jsonnet:(5:23)-(14:2)
but after I manually run helm dependency update
# cd vendor/helm-charts/stable/prometheus-operator
# helm dependency update
Saving 3 charts
Downloading kube-state-metrics from repo https://kubernetes-charts.storage.googleapis.com/
Downloading prometheus-node-exporter from repo https://kubernetes-charts.storage.googleapis.com/
Downloading grafana from repo https://kubernetes-charts.storage.googleapis.com/
Deleting outdated charts
# ls -l charts
total 36
-rw-r--r-- 1 kvaps kvaps 16935 Nov 15 11:26 grafana-3.8.19.tgz
-rw-r--r-- 1 kvaps kvaps 5739 Nov 15 11:26 kube-state-metrics-2.3.1.tgz
-rw-r--r-- 1 kvaps kvaps 5982 Nov 15 11:26 prometheus-node-exporter-1.5.2.tgz
helm downloads dependent tar.gz, and everything is starting working
BTW I also found that qbec with helm3 can use already packed charts. eg:
# cat components/prometheus-operator.jsonnet
local env = { name: std.extVar('qbec.io/env'), namespace: std.extVar('qbec.io/defaultNs') };
local p = import '../params.libsonnet';
local params = p.components.prometheusOperator;
std.native('expandHelmTemplate')(
'https://charts.jetstack.io/charts/cert-manager-v1.0.0-beta.0.tgz',
params.values,
{
namespace: env.namespace,
name: params.name,
thisFile: std.thisFile,
verbose: true,
}
)