Files
cluster/minecraft/update-playbook.yml
Khwezi Mngoma 0410dc3950 first commit
2026-02-22 16:43:17 +02:00

81 lines
2.3 KiB
YAML

---
- name: Update Minecraft Server
hosts: minecraft
become: true
vars:
minecraft_user: minecraft
minecraft_home: /opt/minecraft
mc_service_name: minecraft
mc_version_manifest: https://piston-meta.mojang.com/mc/game/version_manifest.json
backup_dir: "{{ minecraft_home }}/backup"
timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
tasks:
- name: Ensure jq and wget are installed
apt:
name: [ wget, jq ]
state: present
update_cache: true
- name: Stop Minecraft service
systemd:
name: "{{ mc_service_name }}"
state: stopped
- name: Create backup directory
file:
path: "{{ backup_dir }}"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: "0755"
- name: Backup current server.jar
copy:
src: "{{ minecraft_home }}/server.jar"
dest: "{{ backup_dir }}/server.jar.{{ timestamp }}"
remote_src: true
ignore_errors: yes # in case it's missing (first run)
- name: Backup world data folder
archive:
path: "{{ minecraft_home }}/world"
dest: "{{ backup_dir }}/world-{{ timestamp }}.tar.gz"
format: gz
become_user: "{{ minecraft_user }}"
when: ansible.builtin.stat.path is not none
ignore_errors: yes
- name: Download latest Minecraft server JAR
shell: |
set -e
cd "{{ minecraft_home }}"
latest_url=$(wget -qO- {{ mc_version_manifest }} | jq -r '.latest.release as $v | .versions[] | select(.id == $v) | .url')
server_url=$(wget -qO- "$latest_url" | jq -r '.downloads.server.url')
wget -qO server.jar "$server_url"
args:
executable: /bin/bash
- name: Ensure correct ownership of files
file:
path: "{{ minecraft_home }}"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
recurse: true
- name: Start Minecraft service
systemd:
name: "{{ mc_service_name }}"
state: started
- name: Verify service is running
systemd:
name: "{{ mc_service_name }}"
state: started
enabled: true
- name: Display success message
debug:
msg: "Minecraft server updated and restarted successfully on {{ inventory_hostname }}"