Monday, June 24, 2019

SaltStack

Some notes

Get formulas from https://github.com/saltstack-formulas/ e.g. for HAProxy
 https://github.com/saltstack-formulas/haproxy-formula

Steps below is condensed (and includes more explicit commands than on this page https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html)

To use curl 
curl -LOk https://github.com/saltstack-formulas/haproxy-formula.git
Unzip Add to salt Master file_roots sudo vi /etc/salt/master
file_roots:
  base:
    - /srv/salt
    - /srv/formulas/apache-formula
Restart Salt Master
sudo pkill salt-master 
sudo salt-master -d 

Run state e.g. for haproxy
sudo salt '*' state.apply haproxy.install

Salt States

Backup folder
backup_folder:
  file.copy:
    - name: {{ folder-name }}.bak.{{ None|strftime("%Y-%m-%d_%H_%M") }}
    - source: {{folder-name}}
    - user: {{ user}}
    - group: {{group}}


Set variable to latest filename
{%- set fileName = salt['file.find']('/var/publish/',type='f', name='PackageToPublish-1.*.tar.gz')  | last -%}

Include Another state
Say we have a service stop state in a file called service/stop.sls
stop_service:
  service.dead:
    - nameservice

If we are in the same folder and want to include it, we include it usings its filename (with any directories in front)
However in the require step we just include the id name (can also have idnetifies like service: pkg:  etc)

include:
  - service.stop

upgrade_archive_unpacked:
  archive.extracted:
    - name: {{ pillar['root_dir'] }}/{{ pillar['service']['upgrade'] }}
    - source:  {{ pillar['service']['source'] }}
    - source_hash: {{ pillar['service']['source_hash'] }}
    - user: {{ pillar['user'] }}
    - group: {{ pillar['group'] }}
    - overwriteTrue
    - enforce_ownership_on: {{ pillar['root_dir'] }}
    - enforce_toplevelFalse
    - options"--strip-components=1"
    - require
      - stop_service


Rollback to backup
{%- set rollbackFolderTuple = salt['file.find']('/pathToSearch/', type='d', name='dirname.bak.*', print='mtime,name')| sort  | last -%}
{%- set rollbackFolder = rollbackFolderTuple[1] %}
rollback_folder:
  file.rename:
    - name: {{ rollbackFolder }}
    - source: {{folder-name}}
    - user: {{ user}}
    - group: {{group}}