Salt Notes
I decided to go for Salt when picking a solution that would help me automate server management. Here are some things that required some figuring out.
Including keys in pillar data
Using Git as an example; deploy key is set in Github repo's settings:
sites:
example.com:
gitsource: git+ssh://git@github.com/you/your_repo.git
gitidentity: |
-----BEGIN RSA PRIVATE KEY-----
<Deploy key goes here – mind the indentation!>
-----END RSA PRIVATE KEY-----
Using the above in states:
{% if 'gitsource' in args and 'gitidentity' in args %}
/etc/deploy-keys/{{ site }}:
file.directory:
- makedirs: True
- require:
- pkg: nginx
- watch_in:
- service: nginx
/etc/deploy-keys/{{ site }}/identity:
file.managed:
- mode: 600
- contents_pillar: sites:{{ site }}:gitidentity
- require:
- pkg: nginx
- watch_in:
- service: nginx
{{ args.gitsource }}:
git.latest:
- identity: /etc/deploy-keys/{{ site }}/identity
- target: /var/www/{{ site }}
- rev: master
- force: True
- require:
- pkg: nginx
- watch_in:
- service: nginx
{% endif %}
Swap
Using a swap file here because DigitalOcean instances, at least the small ones that I've tested, don't include any swap.
/swapfile:
cmd.run:
- name: "fallocate -l 1024M /swapfile && chmod 600 /swapfile && mkswap /swapfile"
- unless: test -f /swapfile
mount.swap:
- require:
- cmd: /swapfile
Logentries
The "agent" of the excellent Logentries log gathering service doesn't use a config file, and instead relies on the le tool that is used to set thing up. After config changes, the Logentries daemon must be restarted (that last restart part can likely be streamlined but I couldn't get a hard service restart to work otherwise).
logentries:
pkgrepo.managed:
- name: deb http://rep.logentries.com/ trusty main
- dist: trusty
- file: /etc/apt/sources.list.d/logentries.list
- keyid: C43C79AD
- keyserver: pgp.mit.edu
pkg:
- latest
logentries_registered:
cmd.run:
- unless: le whoami
- name: le register --force --account-key={{ pillar['logentries']['account_key'] }} --hostname={{ grains.id }} --name={{ grains.id }}-`date +'%Y-%m-%dT%H:%M:%S'`
- require:
- pkg: logentries
- require_in:
- pkg: logentries-daemon
logentries_follow:
cmd.run:
- name: |
le follow /var/log/syslog
le follow /var/log/auth.log
le follow /var/log/salt/minion
{% for site, args in pillar.get('sites', {}).items() %}
le follow /var/log/nginx/{{ site }}.access.log
le follow /var/log/nginx/{{ site }}.error.log
{% endfor %}
- require:
- pkg: logentries
- require_in:
- pkg: logentries-daemon
logentries-daemon:
pkg:
- latest
logentries_daemon_stop:
service.dead:
- name: logentries
- require:
- pkg: logentries-daemon
- require_in:
- logentries_daemon_start
logentries_daemon_start:
service.running:
- name: logentries
Categorised as: note