qbec icon indicating copy to clipboard operation
qbec copied to clipboard

Optional `helm dependency update` for helm charts

Open kvaps opened this issue 6 years ago • 3 comments

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

kvaps avatar Aug 08 '19 17:08 kvaps

Does this flow work at all when the chart is packaged as a tar.gz file?

gotwarlost avatar Nov 09 '19 18:11 gotwarlost

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

kvaps avatar Nov 15 '19 10:11 kvaps

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,
  }
)

kvaps avatar Aug 27 '20 11:08 kvaps