Search code examples
salt-project

Should I always use pillar.get instead of pillar['foo']?


I see in the pillar documentation that there are two ways to reference pillar data in an SLS.

{{ pillar['foo'] }}

and

{{ salt['pillar.get']('foo') }}

The pillar.get method handles nested pillar data better and allows to specify a default if the data isn't found in the pillar. But it's a bit more typing and I find the first method easier to read.

So, is it considered best practice to always use the pillar.get method or is using the pillar['foo'] acceptable, especially when dealing with non-nested pillar data.

I suspect always using the pillar.get method is best since it make sense to use it when dealing with nested pillar data or you want to set a default. And it's best to just you one method consistently. But I wanted to get other people's thoughts.


Solution

  • I agree that the shorter syntax looks nicer.

    In states that I build, I tend to use the {{ pillar['foo'] }} syntax when I'm referencing a value that ABSOLUTELY must be there for my state to work correctly. In that case, I do want a failure to happen.

    Then with other values where I need to traverse nested data, or if I want to use a default value, I use the longer syntax.

    In the end, it's mostly personal preference. None of them is more correct than another.