121 lines
3.6 KiB
YAML
121 lines
3.6 KiB
YAML
#!/usr/bin/ansible-playbook
|
|
# vim:ft=ansible:
|
|
---
|
|
- name: Set up Terraria user
|
|
block:
|
|
- name: Install required packages
|
|
apt:
|
|
name:
|
|
- mono-complete
|
|
- 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 }}/1401/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 }}/Dedicated Server"
|
|
- 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: "0"
|
|
hour: "*/2"
|
|
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
|