helm deploy with no objects

11/20/2019

I'm doing a very simple chart with helm. It consists on deploying a chart with just one object ("/templates/pod.yaml"), that have to be deployed just if a parameter of file Values.yaml is true. To provide an example of my case, this is what I have:

/templates/pod.yaml

{{- if eq .Values.shoudBeDeployed true }}
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
{{- end}}

Values.yaml

shoudBeDeployed: true

So when I use shoudBeDeployed with true value, helm installs it correctly.

My problem is that when shoudBeDeployed is false, helm doesn't deploy anything (as I expected), but helm shows the following message:

Error: release CHART_NAME failed: no objects visited

And if I execute helm ls I get that CHART_NAME is deployed with STATUS FAILED.

My question is if there is a way to not have it as a failed helm deploy. So I would like to not see it when using the command helm ls

I know that I could move the logic of shoudBeDeployed variable outside the chart, and then deploy the chart or not depending on its value, but I would like to know if there is a solution just using helm.

-- pcampana
kubernetes
kubernetes-helm

1 Answer

11/21/2019

@pcampana I think there is no way to stop helm deployment if there is nothing to deploy. But here is a trick that you can use to delete a helm chart if it is FAILED.

helm install --name temp demo --atomic

where demo is the helm chart directory and temp is release name . release name is mandatory for this to work.

One scenario is when you see error

Error: release temp failed: no objects visited

you can use above command to deploy helm chart.

I think this might be useful for you.

-- shubham_asati
Source: StackOverflow