Blob Blame History Raw
include:
  - profile.borgbackup.packages

# client-side user (non-privileged or root)
{% set client_user = 'cboltz' %}  # TODO (use pillar - from pillar/id or pillar/role?)
{% set client_home = salt['user.info'](client_user).home %}
{% set backup_pass = 'topsecret' %}  # TODO: create encrypted pillar  borgbackup/{{ server_user }}.sls  with backup_pass and ssh private key
{% set backup_server = pillar.get('profile:borgbackup:backupserver') %}

# server-side
{% set server_user = 'cboltz' %}  # TODO (use pillar)
{% set backupdir = '/backup/' + server_user + '/borgbackup' %}


# setup user and ssh stuff
borgbackup_user:
  user.present:
    - name: {{ client_user }}

{{ salt['user.info'](client_user).home }}/.ssh:
  file.directory:
    - user: {{ client_user }}
    - mode: 700

{{ salt['user.info'](client_user).home }}/.ssh/borgbackup_key:
  file.managed:
    - user: {{ client_user }}
    - mode: 600
    - contents_pillar: profile.borgbackup.{{ server_user }}.privatekey

{{ salt['user.info'](client_user).home }}/.ssh/known_hosts:
  file.append:
    - user: {{ client_user }}
    - mode: 600
    - contents_pillar: profile.borgbackup.ssh_known_hosts

# backup config file
{{ salt['user.info'](client_user).home }}/borg-env:
  file.managed:
    - user: {{ client_user }}
    - mode: 600
    - contents:
      - export BORG_RSH="ssh -i {{ salt['user.info'](client_user).home }}/.ssh/borgbackup_key"
      - export BORG_PASSPHRASE='{{ backup_pass }}'
      - "export BORG_REPO='ssh://{{ client_user }}@{{ backup_server }}{{ backupdir }}'"
      - export LOG='/var/log/borg/backup.log'
      # TODO: make the directory to backup configurable
      # TODO: make excludes configurable

# initialize the backup
borgbackup_init:
  cmd.run:
    - env: {{ backup_pass }}
    - name: borg init --encryption=repokey 'ssh://{{ client_user }}@{{backup_server}}{{ backupdir }}'
    - runas: {{ client_user }}
    - creates: {{ salt['user.info'](client_user).home }}/.cache/borg/CACHEDIR.TAG

{{ salt['user.info'](client_user).home }}/borg-backup-script:
  file.managed:
    - source: salt://profile/borgbackup/files/borg-backup-script
    - user: {{ client_user }}
    - mode: 600

/var/log/borg:
  file.directory
    - user: {{ client_user }}

# create cronjob
# TODO