--- - 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 }}"