Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Salt Formulas and States

Forrest
March 25, 2014

Salt Formulas and States

This talk discusses how to begin creating and using Salt formulas and states to create modular, extensible, and clear content that others can use and learn from.

Forrest

March 25, 2014
Tweet

More Decks by Forrest

Other Decks in Technology

Transcript

  1. Salt States Core of Salt Range from basic to very

    complex Used for provisioning and deployment
  2. State Directory Structure /srv/salt/nginx/init.sls - Installs and starts service /srv/salt/mysql/client.sls

    - installs client /srv/salt/mysql/server.sls - installs the server and starts the service
  3. Salt States Can Become Complex apache: pkg: - installed {%

    if grains[‘os_family’] == ‘RedHat’ %} - name: httpd {% elif grains[‘os_family’] == ‘Debian’ %} - name: apache2 {% endif %}
  4. Pillar Exploitation OS variables that shouldn’t be in pillar are

    Pillar becomes bloated Harder to understand for new users
  5. How Do We Address This? Ease of use Simple to

    modify multiple locations Can be applied to existing configurations
  6. Salt Formulas Evolution of the Salt states Easy to write

    because you already are Somewhat difficult to understand how they work
  7. The Core of Formulas, map.jinja Sets data based on OS

    grains Merges with Pillar data Centralizes variables
  8. Creating The Map {% set apache = salt[‘grains.filter_by’]({ ‘Debian’: {

    ‘server’: ‘apache2’, ‘service’: ‘apache2’, ‘conf’: ‘/etc/apache2/apache.conf’, }, ‘RedHat’: { ‘server’: ‘httpd’, ‘service’: ‘httpd’, ‘conf’: ‘/etc/httpd/httpd.conf’, }, }, merge=salt[‘pillar.get’](‘apache:lookup’)) %}
  9. Using Maps in States {% from “apache/map.jinja” import apache with

    context %} apache: pkg: - installed - name: {{ apache.server }} service: - running - name: {{ apache.service }} - enable: True
  10. Before apache: pkg: - installed {% if grains[‘os_family’] == ‘RedHat’

    %} - name: httpd {% elif grains[‘os_family’] == ‘Debian’ %} - name: apache2 {% endif %} service: - running {% if grains[‘os_family’] == ‘RedHat’ %} - name: httpd {% elif grains[‘os_family’] == ‘Debian’ %} - name: apache2 {% endif %} - enable: True
  11. After {% from “apache/map.jinja” import apache with context %} apache:

    pkg: - installed - name: {{ apache.server }} service: - running - name: {{ apache.service }} - enable: True
  12. More Maps in States {% from “apache/map.jinja” import apache with

    context %} include: - apache apache_conf: file: - managed - name: {{ apache.conf }} - source: {{ salt[‘pillar.get’](‘apache:lookup:config:tmpl’) }} # Notice this variable doesn’t live in our map - template: jinja - user: root - group: root - mode: ‘0644’ - watch_in: - service: apache
  13. Merging Maps With Pillars Multiple pillars further reduce complexity Easy

    to include several pillars in your top pillar Pillar variables can overwrite map
  14. Clear Location of Variables Where did I miss that conf

    name change? Did I make sure to update all my requires? Hey, could you modify this value?
  15. The Simpler the Better Works great even if you only

    have a single OS Easy to hand off Fewer files to manage
  16. Managing Formulas Directory structure is the same as always One

    map file per formula Pillars are just included in your top pillar
  17. Writing Formulas Effectively Think about what is OS based Consider

    what might need to be expanded Look at how someone else would see your formula
  18. Premade Salt Formulas Over 75 formulas publicly available Not all

    formulas require the map Fork it with GIT and modify as needed
  19. Sources XKCD: Kayak comic - http://xkcd.com/209/ Easy button - http://dealer-communications.com/wp-content/uploads/2014/01/easy_button.png

    Bad cabling - http://farm3.staticflickr.com/2353/2219131561_31feee1745.jpg Earl of Lemongrab - http://fc03.deviantart.net/fs70/i/2013/108/e/3/lemongrab_by_twillis-d6266g9.png Dat Map - http://cdn.memegenerator.net/instances/500x/43904408.jpg Bruce Lee - http://www.elliottcaras.com/wp-content/uploads/2013/11/Bruce-Lee-Simplicity-is-the-key-2-brilliance.jpg Structure of Salt - http://upload.wikimedia.org/wikipedia/commons/2/29/NaCl.png Github OctoCat - http://www.iconsdb.com/icons/download/black/github-10-512.png