ansible/roles/terraria/tasks/main.yml
Salt d698f0b588 Set up a recovery script for MC servers
this shit happens to goddamn often-
2020-06-25 08:42:29 -05:00

127 lines
3.8 KiB
YAML

#!/usr/bin/ansible-playbook
# vim:ft=ansible:
---
- name: Set up Terraria user
block:
- name: Install required packages
apt:
name:
- mono-complete
- name: Disable bundled services
systemd:
name: "{{ item }}"
enabled: no
state: stopped
loop:
- "mono-xsp4"
- name: Assure terraria admin group
group:
name: ter-admin
- name: Assure server user
user:
name: terraria
group: ter-admin
system: yes
home: "{{ terraria_root }}"
- name: Assure var directory
file:
path: "{{ terraria_root }}"
state: directory
owner: root
group: ter-admin
# Sticky, SetGID
mode: "3770"
- name: Assure systemd unit
template:
src: "terraria@.service"
dest: "/etc/systemd/system/terraria@.service"
- name: Reload available daemons
systemd:
daemon_reload: yes
become: yes
- name: Set up Terraria server
block:
- name: Create server directory
file:
path: "{{ terraria_root }}/{{ terraria_name }}"
state: directory
- name: Check for existing install
stat:
path: "{{ terraria_root }}/{{ terraria_name }}/TerrariaServer"
register: stat_server_binary
- name: Unpack archive
block:
- name: Download zip
get_url:
dest: "{{ terraria_root }}/{{ terraria_name }}/pack.zip"
url: "{{ terraria_zip }}"
- name: Unpack zip
unarchive:
src: "{{ terraria_root }}/{{ terraria_name }}/pack.zip"
remote_src: yes
dest: "{{ terraria_root }}/{{ terraria_name }}"
- name: Move zip contents
shell: mv "{{ terraria_root }}/{{ terraria_name }}/1405/Linux/"* "{{ terraria_root }}/{{ terraria_name }}"
- name: Mark executable
file:
path: "{{ terraria_root }}/{{ terraria_name }}/TerrariaServer.bin.x86_64"
mode: "0755"
- name: Clean up
file:
path: "{{ item }}"
state: absent
loop:
- "{{ terraria_root }}/{{ terraria_name }}/pack.zip"
- "{{ terraria_root }}/{{ terraria_name }}/1405"
- name: Create worlds directory
file:
path: "{{ terraria_root }}/{{ terraria_name }}/worlds"
owner: terraria
group: ter-admin
state: directory
- name: Fix ownership
file:
path: "{{ terraria_root }}/{{ terraria_name }}"
recurse: yes
owner: terraria
group: ter-admin
when: not stat_server_binary.stat.exists
- name: Configure server
block:
- name: Template out server config
template:
src: config
dest: "{{ terraria_root }}/{{ terraria_name }}/config"
owner: terraria
group: ter-admin
become: yes
- name: Set up backups
block:
- name: Create backups directory
file:
state: directory
mode: "0700"
path: "{{ terraria_root }}/{{ terraria_name }}/backups"
owner: terraria
group: ter-admin
- name: Template out backup script
template:
src: "backup.sh"
dest: "{{ terraria_root }}/{{ terraria_name }}/backup.sh"
owner: terraria
group: ter-admin
mode: "0700"
- name: Set up backup cronjob
cron:
minute: "*/30"
name: "ansible-backup-terraria-{{ terraria_name }}"
job: "{{ terraria_root }}/{{ terraria_name }}/backup.sh >> {{ terraria_root }}/{{ terraria_name }}/backups.log 2>&1"
become: yes
- name: Enable service
systemd:
name: "terraria@{{ terraria_name }}"
daemon_reload: yes
enabled: yes
state: started
become: yes