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