At first Pillars were something that I could not wrap my head around due to confusing Salt documentation. Eventually the docs became better and with working in Salt extensively, the pillars finally kicked in. They are something that any experienced Salt user should be using as they open up more doors in your DevOps infrastructure.
Pillars are basically a secure key value store in Salt that can be used by Salt States. You can store confidential information and options in pillars instead of keeping them in configs and the pass this data to specifically assigned minions (which you can do in pillars/top.sls file).
There are two main ways of getting a value from a pillar in your config file:
{{ salt['pillar.get']('elasticsearch:pathdata', 'default value') }}
{{ pillar['elasticsearch']['pathdata'] }}
The default value
in first example can be substitute with an actual
default value that you want to be filled in case your pillar dict is not
found. In the second example, Salt will throw out Pillar SLS errors in
case the pillar is not found. Clearly when you can store default values,
using the first example is better.
To assign pillars to specific minions, you can do the following:
base:
'*':
- grains
'P@fqdn:(app|web)server(0|1).domain.com:
- nginx
- java
{% if grains['specialgrain'] == "specialgrain_match" %}
- special_state
{% endif %}
In the above example, we are assigning grains
pillar to all the hosts
(via *
). All hosts matching a grains PCRE (P@
) compound
matcher
will get nginx and java pillars. Finally, any hosts that have a grain
that matches specialgrain_match
will get the special_state
pillar.
Comments
comments powered by Disqus