Salt Pillars & Formulas

Working with Pillars
Pillars in Salt is arbitrary, minion-specific data. There is a large volume of Pillar Modules available to pull this data into Salt from external sources.
Instructions on how to pull this data in is stored in *.sls files. Start by creating the directory /srv/pillar and add the following files:
top.sls
base:
  '*':
    - name
The Top File sets the permission - what minions have access to a specific file. In this case all minions will have access to the file name.sls:
name.sls
{% if grains.os == 'Ubuntu' %}
name: Ubuntu Rocks
{% elif grains.os == 'Centos' %}
name: CentOS Rocks
{% endif %}
We can clean this up by using a dictionary:
{% set lookup = {
  'Ubuntu': 'Ubuntu Rocks',
  'Centos': 'Centos Rocks'
} %}
{% set name = lookup[grains.os] %}
name: {{ name | json() }}
Or:
{% set os = salt.grains.filter_by({
    'Ubuntu': {
        'name': 'Ubuntu Rocks'
    },
    'Centos': {
        'name': 'Centos Rocks'
    }
}) %}
name: {{ os.name }}
Run the following command to update all minions:
sudo salt '*' saltutil.refresh_pillar
ubuntuAsus:
    True
We can use this data for example in our Apache landing page (see previous tutorial):
welcome.sls
# Adding a blank front page
{% set name = salt.pillar.get('name') %}
check_pillar_values:
  test.check_pillar:
    - present:
      - name
    - failhard: True
welcome_page:
  file.managed:
    - name: /var/www/html/index.html
    - contents: |
        <!doctype html>
        <body>
            <h1>{{ name }}.</h1>
        </body>
You should be able to see that you Minions have access to your pillars:
sudo salt '*' pillar.items
And check that your front page was updated:
sudo salt '*' state.sls apache.welcome
You can also manually set the value of name - but this data will be send to all minions and is NOT PRIVATE:
sudo salt '*' state.sls apache.welcome pillar='{name: Override}'
Working with Formulas
Formulas are pre-written Salt States. They are as open-ended as Salt States themselves and can be used for tasks such as installing a package, configuring, and starting a service, setting up users or permissions, and many other common tasks.
All official Salt Formulas are found as separate Git repositories in the 'saltstack-formulas' organization on GitHub. They can be downloaded using the GIT Fileserver Backend. To be able to use Git you first have to uncomment it in your /etc/salt/master config. Or use a local.conf in /etc/salt/master.d/local.conf:
fileserver_backend:
  - git
  - roots
gitfs_remotes:
  - https://github.com/saltstack-formulas/memcached-formula
After adding your desired Formulas restart the Salt master and use the cp.list_master or cp.list_states command to get a list of all available configuration files to make sure that memcached was successfully cloned from Github:
sudo systemctl restart salt-master
sudo salt ubuntuAsus cp.list_states
ubuntuAsus:
    - apache
    - apache.map
    - apache.mods
    - apache.welcome
    - memcached
    - memcached.config
    - memcached.libmemcached
    - memcached.macros
    - memcached.python_memcached
    - memcached.uninstall
Continue installing the following package:
on CentOS
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install GitPython
on Ubuntu
sudo apt install python-git-doc