150 lines
3.9 KiB
YAML
150 lines
3.9 KiB
YAML
- name: Hetzner
|
|
hosts: beepi
|
|
become: true
|
|
vars:
|
|
user: hetzner
|
|
user_home: /home/hetzner
|
|
|
|
hetzner_raid_mount: /home/beeshare/raid
|
|
|
|
hetzner_paths:
|
|
- src: /home/beeshare/raid/serverBackup
|
|
dest: ./beepi
|
|
- src: /home/beeshare/raid/foundry/backup
|
|
dest: ./foundry
|
|
|
|
tasks:
|
|
- name: Install rsync
|
|
ansible.builtin.apt:
|
|
name: rsync
|
|
state: present
|
|
|
|
- name: Create user
|
|
ansible.builtin.user:
|
|
name: "{{ user }}"
|
|
home: "{{ user_home }}"
|
|
shell: /usr/sbin/nologin
|
|
create_home: true
|
|
|
|
- name: Create ssh directory
|
|
ansible.builtin.file:
|
|
path: "{{ user_home }}/.ssh"
|
|
state: directory
|
|
owner: "{{ user }}"
|
|
group: "{{ user }}"
|
|
mode: '0700'
|
|
|
|
- name: Generate ssh key
|
|
ansible.builtin.command:
|
|
cmd: "ssh-keygen -t ed25519 -N '' -C beepi-hetzner -f {{ user_home }}/.ssh/id_ed25519"
|
|
creates: "{{ user_home }}/.ssh/id_ed25519"
|
|
|
|
- name: Set key ownership
|
|
ansible.builtin.file:
|
|
path: "{{ user_home }}/.ssh/{{ item.name }}"
|
|
owner: "{{ user }}"
|
|
group: "{{ user }}"
|
|
mode: "{{ item.mode }}"
|
|
loop:
|
|
- name: id_ed25519
|
|
mode: '0600'
|
|
- name: id_ed25519.pub
|
|
mode: '0644'
|
|
|
|
- name: Scan storage box host key
|
|
ansible.builtin.command:
|
|
cmd: "ssh-keyscan -p {{ hetzner_port }} {{ hetzner_host }}"
|
|
register: hetzner_hostkey
|
|
changed_when: false
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Pin known hosts
|
|
ansible.builtin.copy:
|
|
dest: "{{ user_home }}/.ssh/known_hosts"
|
|
content: "{{ hetzner_hostkey.stdout }}\n"
|
|
owner: "{{ user }}"
|
|
group: "{{ user }}"
|
|
mode: '0600'
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Copy sync script
|
|
ansible.builtin.template:
|
|
src: hetznerSync.sh.j2
|
|
dest: /opt/backup/hetznerSync.sh
|
|
mode: '0700'
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Schedule daily sync
|
|
ansible.builtin.cron:
|
|
name: beepi hetzner sync
|
|
user: root
|
|
minute: '0'
|
|
hour: '7'
|
|
job: /opt/backup/hetznerSync.sh >> /var/log/beepi-backup.log 2>&1
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Copy metrics collector
|
|
ansible.builtin.template:
|
|
src: hetznerMetrics.sh.j2
|
|
dest: /opt/backup/hetznerMetrics.sh
|
|
mode: '0700'
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Install metrics timer
|
|
ansible.builtin.copy:
|
|
dest: "/etc/systemd/system/beepi-hetzner-metrics.{{ item.kind }}"
|
|
content: "{{ item.content }}"
|
|
mode: '0644'
|
|
loop:
|
|
- kind: service
|
|
content: |
|
|
[Unit]
|
|
Description=Collect hetzner storage box metrics
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/opt/backup/hetznerMetrics.sh
|
|
- kind: timer
|
|
content: |
|
|
[Unit]
|
|
Description=Collect hetzner storage box metrics
|
|
|
|
[Timer]
|
|
OnBootSec=5min
|
|
OnUnitActiveSec=1h
|
|
AccuracySec=5min
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
when: hetzner_host | length > 0
|
|
notify: Reload systemd
|
|
|
|
- name: Flush handlers
|
|
ansible.builtin.meta: flush_handlers
|
|
|
|
- name: Enable metrics timer
|
|
ansible.builtin.systemd_service:
|
|
name: beepi-hetzner-metrics.timer
|
|
state: started
|
|
enabled: true
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Run metrics collector once
|
|
changed_when: true
|
|
ansible.builtin.command:
|
|
cmd: /opt/backup/hetznerMetrics.sh
|
|
when: hetzner_host | length > 0
|
|
|
|
- name: Debug
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Test manually: sudo /opt/backup/hetznerSync.sh"
|
|
- "Read logs: sudo tail -50 /var/log/beepi-backup.log"
|
|
tags:
|
|
- always
|
|
|
|
handlers:
|
|
- name: Reload systemd
|
|
ansible.builtin.systemd_service:
|
|
daemon_reload: true
|