#helmfile (2019-11)

https://github.com/roboll/helmfile

Questions and discussion around helmfile https://github.com/roboll/helmfile and https://github.com/cloudposse/helmfiles Archive: https://archive.sweetops.com/helmfile/

2019-11-29

2019-11-28

mumoshu

@Erik Osterman btw, are you still using atlantis? just wanted to ask if it can be a good idea to use atlantis for deploying k8s apps, as we now have the tf provider for helmfile

https://github.com/roboll/helmfile/issues/386

Github PR workflow support similar to Atlantis · Issue #386 · roboll/helmfile

A workflow similar to Atlantis for terraform would be a killer feature for helmfile - https://github.com/runatlantis/atlantis/

Erik Osterman

Yes, we are still using atlantis (and starting to poc terraform cloud)

Erik Osterman

which is why all this is extra exciting.

1
mumoshu

(wow a year old issue

Erik Osterman

we’re using helmfile with atlantis, using a custom step

Erik Osterman

…but would rather just keep it vanilla terraform

Erik Osterman

also, excited about the possibility of relying on fewer ENVs

mumoshu

that’s cool. i tried it but ended up building my own chatops solution w/ a github app that triggers circleci job according to the body of comments

Erik Osterman

and mod + variant?

Erik Osterman

did you do the github app b/c for #chatops using #github-actions is too slow?

mumoshu

the chatops solution was github app + variant + helmfile/eksctl, but we have an another pipeline that continually updates things like base docker image tags with mod + variant

Erik Osterman

ok

mumoshu

did you do the github app b/c for #chatops using #github-actions is too slow? no. but i think it works. we’re planning to move everything to github actions

mumoshu

btw i was wondering if we can create an “oneshot” version of atlantis, that is executed on each github action run

mumoshu

so that we don’t need to host atlantis..

Erik Osterman

hah! that would be cool

Erik Osterman

I think it might be worth opening a feature request for that one

Erik Osterman

see what the receptiveness will be

Erik Osterman

The key is to get buy-in from luke

1
mumoshu

okay i will! thanks for the input

2019-11-27

Josh McDade

Hi, I’m having issues running helmfile -n my-ns apply from v0.93.1 (I have set HELMFILE_HELM3=1 for my helm3 releases). Every release errors:

helm exited with status 1:
  Error: context deadline exceeded
  Error: plugin "diff" exited with error

The version of diff plugin is the same as the one in the Dockerfile.helm3 diff 3.0.0-rc.7

mumoshu

it may be super surprising but you actually have an outdated helm-diff binary installed

mumoshu

even you see diff 3.0.0-r.7 in helm plugin list`

mumoshu
Fully support helm 3 in docker image (helm diff) · Issue #980 · roboll/helmfile

Is it possible to add helm 3 to the docker image of helmfile? So we can just use the helmfile docker image in CI/CD without needing to install helm3. Things to do: Update helm diff plugin to versio…

mumoshu

try this

2019-11-26

Roderik van der Veer

I’m struggling a bit with –namespace and namespace definition in releases. I run helmfile with --namespace namespaceA. All my releases have namespace: {{ .Namespace }} and one (ingress controller) has namespace: something in the release. But it gets deloyed to namespaceA . Anyone have an idea on how to do this (apart from running helmfile twice)?

mumoshu

Hi! It sounds like what you might need is --state-values-set namespace=namespaceA and {{.Values.namespace}}

mumoshu

--namespace is for overriding namespaces for all the releases, regardless of what their “default” values are in helmfile.yaml

mumoshu

So you’d better use a more general template .Values and the corresponding flag to inject it at runtime --state-values-set to code your convention into helmfile.yaml

2019-11-25

Roderik van der Veer

I’ve got a quick question. I have a nice big Helmfile deploying an application stack. It is completely deployed within a namespace to separate it from other things running on the cluster. I now want to install a complete second instance of the stack, in a different namespace but on the same cluster. I imagined that because it is namespaced, it would just work, except it modified my original deploy. What would be the best way to enable such a usecase? Prefixing the release name with the namespace? (helm 2, latest helmfile, GKE)

jafow


Prefixing the release name with the namespace?
I stumbled into this same problem and got around it by doing just that: prefixing release with Namespace and passing that a value with the --namespace option

Roderik van der Veer

Thx!

2019-11-24

mumoshu

it’s still rough around the edges but…

https://github.com/mumoshu/terraform-provider-helmfile

mumoshu/terraform-provider-helmfile

Deploy Helmfile releases from Terraform. Contribute to mumoshu/terraform-provider-helmfile development by creating an account on GitHub.

3
2
3
Erik Osterman

Omg @mumoshu you are the greatest

mumoshu/terraform-provider-helmfile

Deploy Helmfile releases from Terraform. Contribute to mumoshu/terraform-provider-helmfile development by creating an account on GitHub.

Erik Osterman

Thank you for this! @aknysh

Erik Osterman

@aknysh Let’s try this this week with terraform cloud

Erik Osterman

@Daren @Alex Siegman @Rhooker @btai heads up

Erik Osterman

@coreygale start using Helmfile yet? :)

Erik Osterman

@Shane think you mentioned some interest in this

aknysh

will try, great work @mumoshu

nice nice

Erik Osterman

What’s cool about this “ value = helmfile_release_set.mystack.apply_output” is we can use a regex to extract parts of the output (e.g. NOTES.txt) which can contain metadata. Or for custom charts, output JSON in notes and use terraform interpolations to unpack

Andrey Nazarov

Is it possible to reference remote helmfile.yaml?

Erik Osterman

Good question! I assume so. @mumoshu ?

mumoshu

Yes it should work. path is basically -f in Helmfile and it should accept remote urls.

Andrey Nazarov

How does it work with environments? I mean environmnent values are taken from the file referenced in the main helmfile.yaml. Or I could somehow define them in tf config directly. I’m figuring out the best way to use the plugin.

We are using terraform to create clusters on GKE and we are using a repo per stage to restrict the access. At the same time we think it would be better to separate cluster creation and app deployment. Moreover we want to keep the existing helmfile.yaml and don’t repeat its configuration. Our helmfile.yaml is highly templatized and we are using environments.yaml as a simple interface for our developers. All they need to do is to change or add some values in this file and that’s it.

Andrey Nazarov

So if somebody had some thoughts to share I would really appreciate this.

mumoshu

it really depends on the use-case but generally speaking, i’d use terraform variables for a few parameters like the name of environment, region, availability zone.

:--1:1
mumoshu

and set it via helmfile_release_set values

values = {
      # Corresponds to --state-values-set region=whatever
      region = "whatever"
    }
mumoshu

btw it’ll likely to be changed to

values = [
  <<EOS
{
  "region": "whatever"
}
EOS
]
mumoshu

terraform native maps doesn’t really support arbitrary nested maps that we cant do this:

values = {
      # Corresponds to --state-values-set region=whatever
      foo = {
        bar = {
          region = "whatever"
        }
      }
    }
mumoshu

a good news is that terraform 0.12 is able to produce a structured diff against these json-object-looking strings

mumoshu

so it isn’t a huge u/x breaker

mumoshu


Moreover we want to keep the existing helmfile.yaml and don’t repeat its configuration

how do you provide helmfile environments.yaml file today?

mumoshu

if you’re passing it via helmfile --state-values-file environments.yaml, you can just point that file from values_file in tf helmfile_release_set resource

Andrey Nazarov

Now it’s just like that

bases:
- environments.yaml
---
mumoshu

got it. would you consider to specify the path to environments.yaml from tf-side?

mumoshu

or the whole contents of the environments.yaml, or only some part of it?

Andrey Nazarov

Yes, something like that

mumoshu

in any case, the general recommendation would be that u should do as much as possible in helmfile

Andrey Nazarov

Probably only a part of it, based on the environment passed to tf.

Andrey Nazarov

Ok)

mumoshu

i was considering to allow inlining the whole helmfile.yaml content in tf, it it helps

mumoshu

you could use tf string interpolation syntax to write whatever helmfile.yaml you like in it

Andrey Nazarov

Alright, thank you very much)

:--1:1
Erik Osterman
values = [
  <<EOS
{
  "region": "whatever"
}
EOS
]

Erik Osterman

Why move to HEREDOC?

Erik Osterman

(string) vs structured data in HCL?

Daren

Interesting. Unfortunately its not compatible with Terraform Cloud as it relies on cli tools + config

Erik Osterman

Can’t those be installed just like custom terraform provider?

Erik Osterman

…pretty sure

mumoshu

I think that’s why the helm provider doesn’t support maps for setting values as well https://www.terraform.io/docs/providers/helm/release.html#example-usage

mumoshu

Should we move to a set syntax similar to the helm provider, something like:

set {
  name = "metrics.enabled"
  bool = true
}

set {
  name = "image.tag"
  string = "sometag"
}

set {
  name = "deployment.replicas"
  int = 3
}
Erik Osterman

I follow what you are suggesting, but don’t understand how if one is writing a custom provider how it would be limited to using certain data types, of which map is not supported. (Not speaking from experience)

Erik Osterman

Is that what you are saying?

Erik Osterman

Hrmm I follow a little bit more

Erik Osterman

Though I thought this is possible with locals

mumoshu

yeah i believe you’re following me correctly

mumoshu

from my experience, terraform resource spec’s is restricted to have

mumoshu

a static and predefined schema

Erik Osterman

So for consistency with helm provider maybe makes sense to do the same

Erik Osterman

Otherwise it could be a flat map with dot notation

mumoshu

i’ll try taking a deeper look but probably the set syntax would be better

mumoshu

a flat map wit dot nation seems not work as we need to give a specific type(string, int, bool, etc.) to the schema

mumoshu
values = {
  "foo.bar" = 1,
  "bar.baz = true
}

probably this can’t be expressed in today’s tf resource schema

Erik Osterman

I wonder if this syntax would work:

values = yamlencode({
      # Corresponds to --state-values-set region=whatever
      foo = {
        bar = {
          region = "whatever"
        }
      }
    })
mumoshu

o

mumoshu

looks good

mumoshu

then we don’t need to change anything

mumoshu

from the helmfile provider’s perspective, values is just a array of strings

Erik Osterman

oh cool

mumoshu

where you use yamlencode to convert the HCL map into string

Erik Osterman

I confirmed the syntax is acceptable

Erik Osterman

…with nested maps

mumoshu

cool!

mumoshu

actually, when i start working on the helmfile provider, i was blindly believing that it’s possible without yamlencode

Erik Osterman

…i would have assumed the same!

mumoshu

pretty disappointed when it turned out i had to change maps to strings. hopefully this will be fixed in tf in the future..

Erik Osterman

Out of curiosity, would would happen if one did this?

values = yamlencode({
      # Corresponds to --state-values-set region=whatever
      foo = {
        bar = {
          region = "{{ .Env.REGION }}"
        }
      }
    })
Erik Osterman

would helmfile render the gotmpl stuff?

mumoshu

i have not tried yet but it should

:--1:1
mumoshu

just a moment..

mumoshu

ah sry it won’t work. under the hood it is just that the provider produces a temporary values.yaml to be passed to --state-values-file

Erik Osterman

aha, ok - was just curious. don’t have a use-case yet.

mumoshu

you’d need to make it .gotmpl` to let gotmpl expressions evaluated

mumoshu

ok

mumoshu

maybe we can add values_templates for that

Andrey Nazarov

I was wondering if terraform apply works correctly with presync hooks installing crds… I mean in situations like this one: https://github.com/roboll/helmfile/issues/538#issuecomment-499237514

[doc] Recommended way of handling non conventional install such as cert-manager · Issue #538 · roboll/helmfile

HI, When reading the process to install the cert-manager chart (https://hub.helm.sh/charts/jetstack/cert-manager), you can see two steps before installing the chart: installing some CRD prior to th…

mumoshu

can i ask why you think so?

mumoshu

my theory was that it should work if vanilla helmfile apply works, as the tf provider just run helmfile apply under the hood

Andrey Nazarov

Haven’t checked it yet with the most recent versions of helmfile and tf provider (currently dealing with some different troubles with cert-manager), but considering the provided example I had to run helmfile sync first and only then apply started working.

mumoshu

thx. do you see any specifc error from the first helmfile apply?

Andrey Nazarov

It was some application specific error. I don’t remember exactly. I will try to check this out a bit later.

Andrey Nazarov

It seems now it works quite ok.

Andrey Nazarov

Another problem I have is that I always get the following error when running terraform apply, but helmfile apply works ok:

Error: could not get apiVersions from Kubernetes: unable to retrieve the complete list of server APIs: [admission.stash.appscode.com/v1alpha1>: the server could not find the requested resource, [admission.stash.appscode.com/v1beta1](http://admission.stash.appscode.com/v1beta1): the server could not find the requested resource, <http://repositories.stash.appscode.com/v1alpha1|repositories.stash.appscode.com/v1alpha1](http://admission.stash.appscode.com/v1alpha1): the server could not find the requested resource
Andrey Nazarov

Probably it’s related with the installation order. So, since stash-operator always shows diff helmfile always tries to reinstall it, hence for some time the api are not available. When this happens another services cannot be installed due to the https://github.com/helm/helm/issues/6361

unable to retrieve the complete list of server APIs · Issue #6361 · helm/helm

Output of helm version: version.BuildInfo{Version:&quot;v3.0+unreleased&quot;, GitCommit:&quot;180db556aaf45f34516f8ddb9ddac28d71736a3e&quot;, GitTreeState:&quot;clean&quot;, GoVersion:&quot;go1.13…

Andrey Nazarov

But somehow it always works for helmfile apply, but never for terraform apply. Any hints? The order is different? Concurrency is different?

mumoshu

hmm, could you share your tf file?

mumoshu

does any actual upgrades via terraform apply works after the successful helmfile apply?

Andrey Nazarov

It’s as simple as that

variable "project_id" {
  type = string
  description = "Google Cloud project ID"
}

variable "region" {
  type = string
  description = "Default Google Cloud region"
}

provider "google" {
  version = "~> 2.18.0"
  project = var.project_id
  region = var.region
  credentials = "${file("./credentials/account.json")}"
}

provider "helmfile" {}

resource "helmfile_release_set" "mystack" {
  path = "git::https://******/helmfile.yaml"

  working_directory = path.module

  environment = "staging"
}

data "google_compute_address" "dev_ip_address" {
  name = "***-dev"
}

output "external-ip" {
  description = "External static IP adress for dev"
  value = data.google_compute_address.dev_ip_address.address
}

output "mystack_diff" {
  value = helmfile_release_set.mystack.diff_output
}

output "mystack_apply" {
  value = helmfile_release_set.mystack.apply_output
}
mumoshu

ohh… it does look simple

Andrey Nazarov

Some updates happen initially as well, but since the whole terraform apply fails with the error, the state is not updated. So we cannot use terraform to manage that half-baked infra). Except for giving another try to apply.

mumoshu

i reread the relevant part of the providers code. unfortunately i have no clue so far. it is really just calling helmfile apply.

mumoshu

would it be easily reproducible for me if i tried to install stash-operatory?

Andrey Nazarov

I’m not sure actually). I had the same errors some time ago even with helmfile apply, but subsequent applying helped. So, I think this is just a coincidence.

Andrey Nazarov

I will play with it more. Don’t waste your time exploring this right now).

1
Andrey Nazarov

I’ve decided to move stash-operator to the dedicated helmfile and reference it via helmfiles: from the main one. But for some reason it’s ignored during installation. What I’m doing wrong?

bases:
- environments.yaml
---
helmfiles:
  - stash-operator/helmfile.yaml

repositories:
....

releases:
....
Andrey Nazarov

I can see the rendering though

first-pass rendering result of "helmfile.yaml.part.0": {staging map[] map[]}
vals:
map[]
defaultVals:[]
second-pass rendering result of "helmfile.yaml.part.0":
 0: repositories:
 1:  - name: incubator
 2:    url: <https://kubernetes-charts-incubator.storage.googleapis.com/>
 3:  - name: appscode
 4:    url: <https://charts.appscode.com/stable/>
 5: 
 6: releases:
 7:   - name: namespace-stash
 8:     namespace: default
 9:     chart: incubator/raw
10:     values:
11:       - resources:
12:         - apiVersion: v1
13:           kind: Namespace
14:           metadata:
15:             name: stash
16:           spec:
17: 
18:   - name: stash-operator
19:     namespace: stash
20:     chart: appscode/stash
21:     version: v0.9.0-rc.2
22:     needs:
23:       - default/namespace-stash
24:     labels:
25:       type: backup
mumoshu
$ cat helmfile.all.yaml
helmfiles:
- helmfile.stashop.yaml

$ cat helmfile.stashop.yaml
repositories:
- name: incubator
  url: <https://kubernetes-charts-incubator.storage.googleapis.com/>
- name: appscode
  url: <https://charts.appscode.com/stable/>
releases:
- name: namespace-stash
  namespace: default
  chart: incubator/raw
  values:
  - resources:
    - apiVersion: v1
      kind: Namespace
      metadata:
        name: stash
      spec:
- name: stash-operator
  namespace: stash
  chart: appscode/stash
  version: v0.9.0-rc.2
  needs:
  - default/namespace-stash
  labels:
    type: backup
mumoshu

helmfile --helm-binary helm3 -f helmfile.all.yaml apply worked for me. but on helmfile destroy it failed with the error we talked about:

FAILED RELEASES:
NAME
stash-operator
in ./helmfile.all.yaml: in .helmfiles[0]: in ./helmfile.stashop.yaml: release "stash-operator" failed: helm3 exited with status 1:
  Error: uninstallation completed with 1 error(s): could not get apiVersions from Kubernetes: could not get apiVersions from Kubernetes: unable to retrieve the complete list of server APIs: [admission.stash.appscode.com/v1alpha1>: the server is currently unable to handle the request, [admission.stash.appscode.com/v1beta1](http://admission.stash.appscode.com/v1beta1): the server is currently unable to handle the request, <http://repositories.stash.appscode.com/v1alpha1|repositories.stash.appscode.com/v1alpha1](http://admission.stash.appscode.com/v1alpha1): the server is currently unable to handle the request
mumoshu

if helmfile apply doesn’t install stash-operator for you, probably something in your top-level helmfile.yaml relates

mumoshu
bases in helmfile.yaml will make environment disappeared · Issue #1008 · roboll/helmfile

Helmfile version: v0.94.0 Hi I run into a problem when use advanced configuration Layering State Files If I include bases into helmfile.yaml, and then use helm list, err: no releases found that mat…

Andrey Nazarov

Hm, maybe. But my situation is a little bit different. In my case helmfile ignores releases defined in helmfiles:. I’ll open up a new issue with the example to reproduce.

Andrey Nazarov

Hm, or you’ve already fixed that)). Let me double check that we the latest release.

Andrey Nazarov

It seems no. I’ll file the issue. Probably I’m doing something wrong.

Andrey Nazarov
Releases from `helmfiles` are ignored when the environment is specified · Issue #1010 · roboll/helmfile

I&#39;m facing the issue when releases defined in separate .yaml files and referenced via helmfiles: are ignored when I try to install the full stack for a certain environment. Example: #environmen…

mumoshu

@Andrey Nazarov Thx! I was flying to re:Invent. I’ll take a look soon. Curious but did it work before?

Andrey Nazarov

Haven’t used helmfiles: block before.

mumoshu

got it! thanks

Andrey Nazarov

Hm, it seems I need to define environments in subhelmfile for this to work. But shouldn’t they be taken from the main one?

mumoshu

@Andrey Nazarov Replied to you in https://github.com/roboll/helmfile/issues/1010#issuecomment-561364261

I’m gonna do two things - wdyt?

Releases from `helmfiles` are ignored when the environment is specified · Issue #1010 · roboll/helmfile

I&#39;m facing the issue when releases defined in separate .yaml files and referenced via helmfiles: are ignored when I try to install the full stack for a certain environment. Example: #environmen…

Corey Gale

@Erik Osterman Still getting our feet wet with Helmfile but yes it’s in our new k8s stack Thanks again for showing up the light

1
:--1:1
mumoshu

just realized that there was another way to call helmfile from tf:

https://kubedex.com/using-helmfile-with-terraform/ https://github.com/Kubedex/terraform-helmfile

it’s interesting as well

Using Helmfile with Terraform - kubedex.com

Come and read Using Helmfile with Terraform on Kubedex.com. The number one site to Discover, Compare and Share Kubernetes Applications.

Kubedex/terraform-helmfile

Run Helmfile from Terraform. Contribute to Kubedex/terraform-helmfile development by creating an account on GitHub.

Erik Osterman

It’s interesting but assumes you can call it from Docker

Using Helmfile with Terraform - kubedex.com

Come and read Using Helmfile with Terraform on Kubedex.com. The number one site to Discover, Compare and Share Kubernetes Applications.

Kubedex/terraform-helmfile

Run Helmfile from Terraform. Contribute to Kubedex/terraform-helmfile development by creating an account on GitHub.

Erik Osterman

But we run inside of Docker already with geodesic

Erik Osterman

So it’s a non starter. Docker in Docker would be overkill.

Erik Osterman

That said it was an interesting demonstration

:--1:1
mumoshu

one advantage of my terraform-helmfile-provider would be that it exploits terraform plan output to show diff from helmfile diff

Erik Osterman

This has huge potential

mumoshu

and you can even use terraform output to view helmfile apply results

Rhooker
02:36:24 PM

@Rhooker has joined the channel

dustinvb

This is still rough but I am setting up a demo for it as we speak… https://github.com/codefresh-contrib/cfstep-helmfile If there is interest in putting CI in Codefresh for the project that might be something that would help keep the Dockerfile contents updated. Also, is this ready for Helm 3.0 can I simply supply the newest helm binary and expect this to work?

2
mumoshu


Also, is this ready for Helm 3.0 can I simply supply the newest helm binary and expect this to work?

Yes, it should work as helmfile detects helm version automatically

dustinvb

Okay I think I am behind a couple version so will slip in the helm 3.0 binary with the 0.93.2 or something else over the holidays.

mumoshu

Looking forward to it! JFYI, we have images for the helm3 setup in [quay.io/roboll/helmfile:helm3-](http://quay.io/roboll/helmfile:helm3-){ver} for reference

mumoshu
Quay

Quay is the best place to build, store, and distribute your containers. Public repositories are always free.

roboll/helmfile

Deploy Kubernetes Helm Charts. Contribute to roboll/helmfile development by creating an account on GitHub.

2019-11-23

2019-11-22

jedineeper

are there any special changes to helmfile for the helmv3 upgrade? my helm installation seems to be fine but the latest version of helmfile isn’t happy? Is there a change in syntax?

jedineeper

does look like a helm issue which is frustrating

jedineeper
Comparing release=drone, chart=stable/drone
in ./helmfile.yaml: failed processing release drone: helm exited with status 1:
  Error: Couldn't load repositories file (repository/repositories.yaml).
  You might need to run `helm init` (or `helm init --client-only` if tiller is already installed)
  Error: plugin "diff" exited with error
jedineeper
Helm 3: Error: Couldn't load repositories file (repository\repositories.yaml). You might need to run `helm init` · Issue #161 · databus23/helm-diff

I&#39;m currently trying to setup helm 3 with helmfile and helm-diff but I run in some weird issues. When running helm file with debug mode I notice that the following command cause issues for helm…

Andrey Nazarov

Yes, it was a similar issue in the helmfile repo.

https://github.com/roboll/helmfile/issues/980

Fully support helm 3 in docker image (helm diff) · Issue #980 · roboll/helmfile

Is it possible to add helm 3 to the docker image of helmfile? So we can just use the helmfile docker image in CI/CD without needing to install helm3. Things to do: Update helm diff plugin to versio…

Andrey Nazarov
Not working with helm3 · Issue #994 · roboll/helmfile

I&#39;m trying to install simple environment with helmfile using helm3 on brand new 1.16 cluster and it fails with following error: worker 1/1 finished err: release &quot;cert-manager&quot; in &quo…

2019-11-21

TBeijen

Seem to run into a strange situation where failing to decrypt sops secrets (because not having KMS permissions) fails silently, resulting in an error due to missing variable, hiding the actual problem. In other projects error clearly states sops failing. So… probably overlooking some silly thing. Does this ring any bells?

mumoshu

Hmmm, no idea unfortunately. All Helmfile does is to shell out to helm-secrets expecting it would exit with a non-zero code when something went wrong

mumoshu

Reading Helmfile code to see if I’ve made silly mistake in it like ignoring exit code from helm-secrets at all..

TBeijen

Haven’t pinpointed it. We now know that something with co-workers AWS config was incorrect, causing decrypt to fail. However helmfile was silent about it. In another project decrypt errors were clearly stated.

TBeijen

Only difference between projects was that the latter secrets file had a fallback-pgp key configured as well, presenting an interactive screen for pgp password if KMS decryption failed.

TBeijen

So maybe that’s the difference: Interactive screen triggering a decrypt error in Helmfile, where simply failing to decrypt goes unnoticed (and then results in some missing var error).

TBeijen

Now need to focus on something else but will try to pinpoint if this difference indeed is what causes the different behaviour.

mumoshu

Does it fail as intended when you call helm-secrets dec $FILE directly?

TBeijen

Additional complexity: We run tiller-less. Need to look into that later as it ‘worked on my machine’.

TBeijen

Will later try to set-up scenario where it doesn’t decrypt. Then work my way up: sops, helm secrets, helm tiller, helmfile.

2019-11-20

rms1000watt

https://github.com/helm/helm/issues/3701 Does anyone hit this still? For some reason updating (adding) environment variables doesn’t get properly applied to the PodTemplateSpec of the deployment.

Updating the value of a computed environment variable did not take · Issue #3701 · helm/helm

I had a working chart and template that I accidentally broke; The problem was that an environment variable for a pod contained an incorrect value. &quot;Break&quot; here is taken to mean the pod co…

rms1000watt

might just helm render then kubectl apply

Updating the value of a computed environment variable did not take · Issue #3701 · helm/helm

I had a working chart and template that I accidentally broke; The problem was that an environment variable for a pod contained an incorrect value. &quot;Break&quot; here is taken to mean the pod co…

mumoshu

wow this looks like an interesting issue

mumoshu

do you have any chart or helmfile.yaml i can use to reproduce?

rms1000watt

So the process that got me here (sort of impossible to reproduce)

  1. kubectl apply -f generic-deployment-only.yaml
  2. let developers do a bunch of kubectl commands against this deployment
  3. Import this deployment to helm without destroying it first
  4. Add/update env vars and notice they don’t get updated

Honestly, I doubt it’s a helmfile issue. Probably just helm being helm

mumoshu

Thanks! How did you import the deployment to helm?

2019-11-19

Shikhar Goel

Hi…–concurrency=1 is not working in helm3…

Shikhar Goel

I want to run my charts sequentially is there any other way i can do that

mumoshu

how did you verify that?

mumoshu

i thought we had tests for that so need to investigate how and where it’s happening

Shikhar Goel

I ran my helmfile and there was no execution order

mumoshu

is it actually running concurrently? or the ordering is just random?

Shikhar Goel

order is just random

mumoshu

ah

mumoshu

maybe it’s alphabetically sorted, right?

mumoshu

or is it really random?

mumoshu

random, like each run results in different ordering?

Shikhar Goel

i think it is alphabetically sorted

Shikhar Goel

but i want to execute in the order of defination

mumoshu

okay i think that’s a regression since 0.90.0 or so

mumoshu

as the workaround, you can add needs to specify the order

mumoshu
release:
- name: foo
- name: bar
  needs:
  - foo

this makes bar processed after foo

mumoshu

regardless of concurrency.

Shikhar Goel

yup i think that is the only option now…and also regarding timeout…it didn’t work i have to remove explicitly from the helmfile

mumoshu

probably i can try to bring back the old behavior in coming days but not today

Shikhar Goel

Ya sure thanks…that will be really helpfull

mumoshu

will take a look into that as well. thx for your patience and support!

Shikhar Goel

Do i file a bug for that…or you will be notify me once done

mumoshu

filing a bug would be super helpful, as i’m always overwhelmed by todos and the github issues are the only way to keep me reminded

Andrey Nazarov

Are you sure about alphabetical order? For me it seems random even with v0.87.0.

mumoshu

@Andrey Nazarov Does it seem random even when you’ve --concurrency -1 ?

mumoshu

If it’s not set or set to 2 or bigger, the ordering should be random, regardless of helmfile is pre v0.90 or not

Andrey Nazarov

I ran helmfile --log-level=debug --environment=alpha --selector type!=ingress apply --concurrency=1 . helm diff and helm upgrade calls looked pretty random. I used the helm-tiller plugin, btw.

mumoshu

oh… good to know. thx!

Andrey Nazarov

Haven’t checked the most recent version yet. And I’m in a way to switch to Helm 3.

mumoshu

based on how it’s implemented, i thought it should be the order of definition.

perhaps that’s my mlsconception, or perhaps it’s conditional.

mumoshu

anyways i’ve added some test case for that

Andrey Nazarov

And my examples were related to Helm 2. The initial question was about Helm 3.

:--1:1

2019-11-18

Shikhar Goel

Hi…….I am seeing this issue. I have also referred this ‘https://github.com/roboll/helmfile/issues/863’ but it didn’t work. I took pull from master today only.Upgrading ../../helm-installer/rook-operator in ./helmfile.yaml: in .helmfiles[0]: in environments/singlenode/00-helmfile.yaml: failed processing release rook-operator: helm exited with status 1: Error: invalid argument "300" for "--timeout" flag: time: missing unit in duration 300

Timeout issue with Helm v3 mode · Issue #863 · roboll/helmfile

in Helm v3 –timeout option in upgrade command has a type of duration, i.e. 60s or 5m –timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) he…

Shikhar Goel

When i make 300s then again i am facing issue.

Timeout issue with Helm v3 mode · Issue #863 · roboll/helmfile

in Helm v3 –timeout option in upgrade command has a type of duration, i.e. 60s or 5m –timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) he…

Shikhar Goel

could not deduce environment: block, configuring only .Environment.Name. error: failed to read 00-helmfile.yaml.part.0: reading document at index 1: yaml: unmarshal errors: line 14: cannot unmarshal !!str 300s into int in ./helmfile.yaml: in .helmfiles[0]: in environments/singlenode/00-helmfile.yaml: failed to read 00-helmfile.yaml: reading document at index 1: yaml: unmarshal errors: line 14: cannot unmarshal !!str 300s into int

mumoshu
roboll/helmfile

Deploy Kubernetes Helm Charts. Contribute to roboll/helmfile development by creating an account on GitHub.

mumoshu

it should be a number so 300 should be okay

Shikhar Goel

But it is giving error when used 300

mumoshu

@Shikhar Goel which helmfile command are you running?

i thought i’ve fixed it for helm upgrade

Shikhar Goel

helmfile apply

mumoshu

Hmm

Shikhar Goel

helm3 wants it in form of 300s and helmfile accepts it in form of 300(int)

mumoshu

yes and helmfile automatically append s in helm3 mode

Shikhar Goel

but it is not in our case

mumoshu

interesting

mumoshu

could you provide a smallest possible example to reproduce it?

mumoshu

i have no idea how that would happen..

Shikhar Goel

Sure one minute

Shikhar Goel

`releases:

#ROOK

#ROOK-INIT {{ if .Environment.Values.isRook }}

  • name: rook-operator chart: ../../helm-installer/rook-operator values:
    • /home/dmp/helmfile/{{ requiredEnv “env_file_name” }} wait: true timeout: 300 atomic: true {{ end }}

#PREREQUISITE-PROMETHEUS-GRAFANA {{ if .Environment.Values.isPrometheusGrafana }}

  • name: prerequisite-prometheus chart: ../../helm-installer/prerequisite-prometheus values:
    • /home/dmp/helmfile/{{ requiredEnv “env_file_name” }} wait: true timeout: 300 atomic: true`
Shikhar Goel

This is my helmfile and when i am running helmfile apply it is giving error Upgrading ../../helm-installer/rook-operator in ./helmfile.yaml: in .helmfiles[0]: in environments/singlenode/00-helmfile.yaml: failed processing release rook-operator: helm exited with status 1: Error: invalid argument "300" for "--timeout" flag: time: missing unit in duration 300

mumoshu

can we generalize it to this?

releases:
  - name: rook-operator
    chart: stable/envoy
    wait: true
    timeout: 300
    atomic: true
  - name: prerequisite-prometheus
    chart: stable/envoy
    wait: true
    timeout: 300
    atomic: true

`

mumoshu

so that i can run it locally

Shikhar Goel

actually we have local helm charts that we are running…but yes we can regenrate like this also

mumoshu

thanks!

mumoshu

okay reproduced

mumoshu

HELMFILE_HELM3 helmfile apply still works

mumoshu
feat: Automatically enable Helm v3 mode by drakedevel · Pull Request #963 · roboll/helmfile

Runs helm version in helmexec.New, and exposes a method on Interface to allow other packages to use the detected version. Preserves compatibility with previous HELMFILE_HELM3 mechanism. Resolves #923

Shikhar Goel

so i have to use HELMFILE_HELM3 helmfile apply explicitily in helmfile apply command

mumoshu

yeah for now

mumoshu

once the bug is fixed it isn’t needed

Shikhar Goel

ok cool but do i have to add some plugin or anything to make it work

Shikhar Goel

because i am getting bash-5.0# HELMFILE_HELM3 helmfile --environment=singlenode apply --concurrency=1 bash: HELMFILE_HELM3: command not found

mumoshu

i thought it’s something posix-ish

mumoshu

HELMFILE_HELM3=1 helmfile

mumoshu

try adding =1

Shikhar Goel

that is already set in env

mumoshu

then you can omit it from the command

Shikhar Goel

still got the same error

Shikhar Goel

Upgrading ../../helm-installer/rook-operator in ./helmfile.yaml: in .helmfiles[0]: in environments/singlenode/00-helmfile.yaml: failed processing release rook-operator: helm exited with status 1: Error: invalid argument “300” for “–timeout” flag: time: missing unit in duration 300

mumoshu

what do you get from echo $HELMFILE_HELM3?

mumoshu

or export | grep HELMFILE

Shikhar Goel

bash-5.0# env | grep -i HELMFILE_HELM HELMFILE_HELM3=1 bash-5.0# echo $HELMFILE_HELM3 1

mumoshu

hm then your helmfile must be outdated..?

Shikhar Goel

i have just downloaded from your master branch today

mumoshu

but it seems to be working for me

mumoshu

could you double-check your path and timestamp on the helmfile binary being used?

Shikhar Goel

yes i have done that….

Shikhar Goel

i have build using docker build -t helmfile:0.1 .

Shikhar Goel

is there anything else we should do…

mumoshu

..?

mumoshu

could you provide me a full procedure to reproduce it?

mumoshu

what do you run exactly after docker building it?

Shikhar Goel

Actually we have dockerfile inside helmfile repo so when we run docker build command then a docker image is build using that docker file…

Shikhar Goel

so for this i have removed your Dockerfile and renamed Dockerfile.v3 with Dockerfiule

Shikhar Goel

and then ran the command

mumoshu

so how do you run helmfile after that?

Shikhar Goel

i have made a shell script that clone the helmcharts inside the docker image and call helmfile apply method after that

Shikhar Goel

Is there any other way to make docker image for helmfile

Shikhar Goel

??

mumoshu

no it seems good

mumoshu

but i cant reproduce it easily

mumoshu

could you try just running make install to install helmfile locally and see if it works as intended?

mumoshu

from what i see, all i can say atm is you may have outdated helmfile binary (or source repo)…

mumoshu

also be sure to run go mod vendor before docker-build

mumoshu

if you’ve outdated vendor/ under the helmfile repo

Shikhar Goel

Sorry i had previos cloned repo…but when i do docker build on your latest pulled master i get the following error

Shikhar Goel
mumoshu

did you run go mod vendor?

Shikhar Goel

Nope let me try that

Shikhar Goel

Is this expected?

Shikhar Goel
Shikhar Goel

after building with latest image….still this issue persist

mumoshu

no

mumoshu

did you manually removed .git after cloning?

Shikhar Goel

Nope…

mumoshu

no idea…

mumoshu

where the error is coming from?

Shikhar Goel

Can you do one thing…can you please build helmfile docker image and make it pubic

mumoshu

you can just grab it from quay

Shikhar Goel

ok…

mumoshu

but why were you buijding it manually? did you have to do so??

Shikhar Goel

Actually i was adding sleep into it so that pod is not complete after execution

Shikhar Goel

can you please send me the quay url with helm3 and latest helmfile

mumoshu

use tags prefixed with helm3

Shikhar Goel

ok thanks

Shikhar Goel

after using your image also same issue persist

Shikhar Goel

Upgrading ../../helm-installer/rook-operator in ./helmfile.yaml: in .helmfiles[0]: in environments/singlenode/00-helmfile.yaml: failed processing release rook-operator: helm exited with status 1: Error: invalid argument "300" for "--timeout" flag: time: missing unit in duration 300

mumoshu

@Shikhar Goel I’ve tried to reproduce it but had no luck so far


\#

\# On my macOS machine:

\#

$ docker run -it --net host -v $HOME:$HOME --rm [quay.io/roboll/helmfile:helm3-v0.93.1](http://quay.io/roboll/helmfile:helm3-v0.93.1) sh


\#

\# In the docker container:

\#


\# helmfile -v
helmfile version v0.93.1

\# helm version
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}

\# cat helmfile.timeout.yaml
releases:
- name: envoy
  chart: stable/envoy
  timeout: 10

\# helm repo add stable <https://kubernetes-charts.storage.googleapis.com/>

\# helmfile -f helmfile.timeout.yaml sync
<succeeds>
mumoshu

It just works as expected for me.

Shikhar Goel

ok thanks mumoshu…i will try it once again

Shikhar Goel

Thanks momushu..it worked with 0.93.1…earliar i was using 0.93.0

Shikhar Goel

Thanks Alot!…

mumoshu

glad it worked!

Shikhar Goel

Just one more thing how do you think of implementing namespace feature that helm3 has.

Shikhar Goel

Like each helm chart will have its all info stored in its namespace

Shikhar Goel

in the form of secrets

mumoshu

just specify namespace: yourns under releases[] and it should work

Shikhar Goel

Yup…that it works but i was thinking that there can be some namespace variable in helmdefaults so that if the user wants to send all the info in one namespace then he or she can do that easily.

mumoshu

yeah can you just use helmDefaults.namespace?

Shikhar Goel

ok cool..

mumoshu

Ah!

mumoshu

So you mean helmfile doesn’t have support for that yet, right?

mumoshu

seems so. i have never realized that we missed it under helmDefaults

mumoshu

This should be a good feature request

Shikhar Goel

yup…actually i tested that…and i didn’t find that…thats why i was asking

mumoshu

got it! thx

mumoshu

would you mind writing a feature request?

Shikhar Goel

Yup i will start it now only.

mumoshu

Much appreciated!

Shikhar Goel

2019-11-15

Shikhar Goel

Hi…i am not able to run helmfile using helm 3…i am getting the following error….. Error: context deadline exceeded Error: plugin "diff" exited with error

mumoshu

Which version of helmfile are u using?

mumoshu

Do you have tillerless: true set?

mumoshu

You need to turn it off

Shikhar Goel

Thanks it worked with removing tiller plugin from dockerfile

:--1:1
Shikhar Goel

Hi mumoshu…if i set tillerless: false using helm3 then i get the same error

Shikhar Goel

bash-5.0# helmfile --environment=singlenode apply --concurrency=1 Building dependency ../../helm-installer/rook-operator Comparing rook-operator ../../helm-installer/rook-operator in ./helmfile.yaml: in .helmfiles[0]: in environments/singlenode/00-helmfile.yaml: failed processing release rook-operator: helm exited with status 1: Error: context deadline exceeded Error: plugin "diff" exited with error

mumoshu
Fully support helm 3 in docker image (helm diff) · Issue #980 · roboll/helmfile

Is it possible to add helm 3 to the docker image of helmfile? So we can just use the helmfile docker image in CI/CD without needing to install helm3. Things to do: Update helm diff plugin to versio…

mumoshu

tl;dr; pls try reinstalling helm-diff with –version flag

Shikhar Goel

diff 3.0.0-rc.7 Preview helm upgrade changes as a diff

mumoshu

yeah but you may still have onld helm-diff binary!

Shikhar Goel

I think diff is of correct version

mumoshu

nope

mumoshu

surprisingly.

mumoshu

helm plugin install` clones the repo. the version number is taken from the the plugin.yaml contained in the repo. but installation of helm-diff binary happens independently

mumoshu
databus23/helm-diff

A helm plugin that shows a diff explaining what a helm upgrade would change - databus23/helm-diff

Shikhar Goel

Thanks it worked…that was the only issue….

mumoshu

and this seems to have an issue(?) that, when --version is omitted, installs the latest “non-rc” release

mumoshu

glad it worked!

Shikhar Goel

So do you mind to add this fix in the latest Dockerfile for v3.

mumoshu

did we miss that in dockerfile?

mumoshu
roboll/helmfile

Deploy Kubernetes Helm Charts. Contribute to roboll/helmfile development by creating an account on GitHub.

mumoshu

@Shikhar Goel would you mind submitting a pr for that?

Shikhar Goel

Sure

1

2019-11-13

Thomas Burton

Anyone able to help here

After running helmfile --environment staging apply successfully I go to check my releases and they’re not listed even though part of the logs suggests otherwise.

Thomas Burton

This is the output from the logs

Thomas Burton

I am running a tiller deployment in the staging namespace

Thomas Burton

However, if I run helm list --tiller-namespace staging it returns absolutely nothing

Thomas Burton

Another weird thing is that the pods start correctly

Thomas Burton
Andrey Nazarov

What’s in helmDefaults.tillerNamespace in your helmfile.yaml?

Thomas Burton

@Andrey Nazarov it was originally default. Changed it to {{ .Environment.Name }} but still no luck.

Andrey Nazarov

oh, you are using tillerless plugin)

Andrey Nazarov

Then try helm tiller run staging -- helm ls

Thomas Burton

A-HA!

Thomas Burton

Thanks v much

Thomas Burton

Worked

Erik Osterman
helm/helm

The Kubernetes Package Manager. Contribute to helm/helm development by creating an account on GitHub.

Erik Osterman

3.0 official!!l?

seems official, whats the support status of helmfile with helm v3? sorry was not following lately

pjbecotte

I’ve been using v3 for the last month

Erik Osterman

With Helmfile?

Erik Osterman

I know there have been a few PRs to add support

Erik Osterman

Haven’t tested it yet

pjbecotte

Yeah with helmfile

4
Erik Osterman

@Daren @chris FYI

:--1:1
chris
10:15:37 PM

@chris has joined the channel

pjbecotte

Something I just thought of…the first time I had to set an env variables…butbinhavent been doing that

2019-11-12

Thomas Burton

Afternoon. Question:

Thomas Burton

I am running into an error with installing any charts through helmfile. I get the following error:

sung kang

That’s an underlying helm issue

sung kang

Happens when you fail the first release

Andrey Nazarov

indeed

Andrey Nazarov

atomic: true could help here

Thomas Burton

thanks for your responses

Thomas Burton
Thomas Burton

This is my helmfile

Thomas Burton
Thomas Burton

any help would be greatly appreciated

Thomas Burton

managed to fix by running helmfile destroy then helmfile apply

mumoshu

I periodically see folks being trapped by the fact that atomic isnt enabled by default. Hopefully we are able to cut v1 and start turning it on by default since then https://github.com/roboll/helmfile/issues/776

plan: Helmfile v1 · Issue #776 · roboll/helmfile

Helmfile v1 may be the first helmfile release may introduce small backward-incompatible changes to provide long-term benefit for users. It won&#39;t break anything badly as Helmfile is already adop…

mumoshu

@Erik Osterman I’d appreciate your comment here! https://github.com/roboll/helmfile/issues/932#issuecomment-553188582

feat: Predictable Helmfile template · Issue #932 · roboll/helmfile

TL;DR; I want to add a new helmfile.yaml field to make templating helmfile configs easier. Problem Helmfile&#39;s double-rendering has opened a wide variety of use-cases that requires you to write …

2019-11-11

pjbecotte

Any way to run helmfile hooks without helmfile sync?

pjbecotte

(am investigating using our helmfile setup with our argocd deployment…but I made extensive use of helmfile hooks)

mumoshu

@pjbecotte Unfortunately it isn’t possible today. But a feature request is welcomed. If you could also include your specific use-cases for hooks(fetching charts and modifying it, creating namespaces by calling kubectl, etc) that would be great

pjbecotte

Sure- helmfile is golang?

mumoshu

Yep

pjbecotte

Probably not gonna be a PR then :)

pjbecotte

I’ll put in an issue though

mumoshu

Thanks!

2019-11-10

Andrey Nazarov

Is it possible to prevent a release from updating when doing helmfile apply? I don’t see any flag allowing me to do so. The use case: some charts have some random values which are recalculated every time we run helm diff. So there are always some diffs. Hence this leads to unnecessary upgrades. This ignore is not the best solution for sure. Like it will also ignore all “positive changes” that should be syncronized. But at the moment I don’t see anything else that could have been done to solve this. Any thoughts on this?

Andrey Nazarov

No, it was a bad idea. It’s better to upgrade a release every time.

pjbecotte

What are the random numbers for? I generate secrets- but i use hooks so that I only generate them if they don’t already exist. If you’re generating random values in manifests that you apply, then you are certainly changing stuff.

Andrey Nazarov

Usually this comes from certs, like tls.crt, tls.key, caBundle, etc fields. Artifactory and Stash charts are know for doing that. Also I’ve seen something similar from Elasticsearch, but not anymore. Cannot find any examples with generated strings and random numbers right now, but they definitely existed before).

2019-11-09

Erik Osterman

Wow Helmfile getting spammed in issues! Hope this is an isolated incident. GitHub has been amazingly spam free.

1
1
mumoshu

just finished reporting those all

1

2019-11-07

Gourav

Hello All.. Is there any document/image which depicts the kiam, reloader and cert-manager? Which tries to show how they are interrelated. If anyone is having such link, can you please share with me?

Erik Osterman

Nothing visual

Erik Osterman

we have our implementation of them here: https://github.com/cloudposse/helmfiles/tree/master/releases

cloudposse/helmfiles

Comprehensive Distribution of Helmfiles. Works with helmfile.d - cloudposse/helmfiles

Erik Osterman

kiam is to obtain IAM roles needed by cert-manager for Let’s Encrypt validation for wildcard domains

Erik Osterman

cert-manager is needed for the PKI certs that kiam uses between agents/servers

Erik Osterman

reloader is needed to restart the pods for kiam when the certificates change (or else you have a forced outage)

Gourav

@Erik Osterman Thank you very much

Frank

Hi all! I have some helm charts that have to be installed in the right order, e.g. 1) install helm chart 1 which created some CRDs and so on 2) wait some time until helm chart 1 is settled 3) install helm chart 2

Pierre Humberdroz

https://github.com/helm-notifier/Kubernetes-Infrastructure

Check the helmfile.d they get executed in alphabetical order

helm-notifier/Kubernetes-Infrastructure

Contribute to helm-notifier/Kubernetes-Infrastructure development by creating an account on GitHub.

Frank

I work with references from one (master) helmfile to (child) helmfiles. like this I think the order is also preserved plus additionally I can use common values and so on. But what doesn’t work is this wait time…

Frank

e.g.

bases:
  - common.yaml
---
helmfiles:
  - path: "storageclass.yaml"
  - path: "reloader.yaml"
  - path: "certmanager.yaml"

\#  - path: "appscode.yaml"
  - path: "others.yaml"
    values:
    - environment: {{ .Values.environment }}  
    - domain: {{ .Values.domain }} 
Frank

I tried to do this with wait(on helmfile and release level) and atomic , but both seem not to work stable in my case. (By the way I use helm3 , latest release, that might be important )

mumoshu

what is your definition of the chart is settled?

I thought wait: true i.e. helm’s --wait, more or less, wait for all the pods under deployments are ready in terms of pod readiness.

is that what you want? or perhaps you have an another criteria to be met before helmfile proceeds to the next release?

Balaji J

Hi @Frank, were u able to achieve the ordering of starting the helm chart? if so, can you pls clarify how the issue was solved?

2019-11-05

pjbecotte

Another question- how does values templating work in helmfile? Like, I can’t use .Values from a helmfile in .gotmpl files…but I can use values passed in from higher level helmfiles using the ‘helmfiles’ key. Butniflt feels like there is a way I’m missing to not need multiple layers. The kinds of things I want to do are declare a value in one place, and then use that value later in to build up other values.

pjbecotte

Like ‘tag: 123’ and then ‘image: tag: {{.Values.tag}}’

pjbecotte

Hmm, and it looks like I can also you values from the environment. Interestingly, env variables override values passed in

mumoshu

Hey!
I can’t use .Values from a helmfile in .gotmpl files.

I thought this is actually opposite. You can access .Values from within .gomtpl files listed under releases[].values[]

mumoshu

But I’d say it’s the only exception

mumoshu

To pass .Values down to sub-helmfiles, you need to explicitly state so in helmfiles[].values

mumoshu


it looks like I can also you values from the environment. Interestingly, env variables override values passed in

I don’t understand this. Would you mind providing an example?

mumoshu

helmfile doesn’t override values with env variables except that you explicitly stated so

2019-11-04

Bart M.

hmm getOrNil can only return as string?

mumoshu

nope. what do you see though?

Bart M.

well I’m trying to loop over a dict that might not exist…

Bart M.

so I’m trying to do something like this:

{{ range $version, $semver := (getOrNil .Values.deploys "somerelease") | default {} }}
Bart M.

the | default {} doesn’t seem to work, so I left it out

Bart M.

but then I get: wrong type for value: expected string, got map[string]interface{}

Bart M.

on that line

Bart M.

core reason for this is that we need to deploy the same stack to quite a few namespaces, all different versions, so now we have a central base that includes a deploys map like this:

deploys:
  service1:
    v0: ">=0.0.1-alpha.1"
    v1: "1.0.2"
  service2:
    v2: "2.0.0"

The file containing this is loaded depending on the environment that’s being deployed

mumoshu

@Bart M. It should be getOrNil "somerelease" .Values.deploys

Bart M.

ow

Bart M.

right damn

mumoshu

and {} isnt a valid symbol in go template so probably you want (getOrNil "somerelease" .Values.deploys) | default (dict) or even shorter get "somerelease" .Values.deploys (dict)

Bart M.

hmm ic

Bart M.

allright - thanks, seems to work like that

mumoshu

awesome!

2019-11-02

mumoshu

I’d like to deprecate “double-rendering” in favor of this feature: https://github.com/roboll/helmfile/issues/932

WDYT?

feat: Double-render-free Helmfile config template · Issue #932 · roboll/helmfile

TL;DR; I want to add a new helmfile.yaml field to make templating helmfile configs easier and more powerful than ever. Problem Helmfile&#39;s double-rendering has opened a wide variety of use-cases…

Erik Osterman

How reddit uses Helmfile (2018). https://youtu.be/7Qxuo9W5SlY

:--1:5

2019-11-01

    keyboard_arrow_up