<p>Im using helm to install succesfully components via the following command</p>

<pre><code>helm template install/kubernetes/helm/istio --name istio --namespace istio-system  \ --set tracing.enabled=true --set servicegraph.enabled=true \ --set grafana.enabled=true | kubectl apply -f -
</code></pre>

<p>Now I want to change only one property like </p>

<pre><code>--set tracing.enabled=false
</code></pre>

<p>I try the following with just the field which I need to modify</p>

<pre><code>helm template update/kubernetes/helm/istio --name istio --namespace istio-system  \ --set tracing.enabled=flase  | kubectl apply -f -
</code></pre>

<p>without success, do I miss something ?</p>

NSS
<p><code>helm template</code> is totally stateless – it reads a Helm chart's configuration and YAML files, and writes out the YAML that results from applying all of the templates.  It has no idea that you've run it before with different options.</p>

<p>The current version of Helm has a cluster-side component called Tiller that keeps track of state like this, and the Istio documentation does have <a href="https://istio.io/docs/setup/kubernetes/install/helm/#option-2-install-with-helm-and-tiller-via-helm-install" rel="noreferrer">specific instructions for using Tiller</a>.  Since there is state kept here, you can do an update like</p>

<pre><code>helm upgrade istio \
  install/kubernetes/helm/istio \
  --reuse-values \
  --set tracing.enabled=false
</code></pre>

<p>Another valid option is to keep your install-time options in a YAML file</p>

<pre><code>tracing:
  enabled: true
servicegraph:
  enabled: true
grafana:
  enabled: true
</code></pre>

<p>And then you can pass those options using Helm's <code>-f</code> flag</p>

<pre><code>helm template install/kubernetes/helm/istio \
  --name istio \
  -f istio-config.yaml
</code></pre>

<p>This option also works with <code>helm install</code> and <code>helm upgrade</code>, and is equivalent to passing all of the <code>--set</code> options you specified.</p>
