Files
beepi/playbooks/hetzner/hetzner.yml
T
2026-08-16 14:48:04 +02:00

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