--- - name: Create version backup directory ansible.builtin.file: path: "{{ spigot_backup_dir }}" state: directory owner: "{{ minecraft_user }}" group: "{{ minecraft_group }}" mode: '0755' - name: Stop Minecraft server ansible.builtin.systemd: name: minecraft state: stopped - name: Backup current version ansible.builtin.shell: | BACKUP_NAME="version_backup_$(date +%Y%m%d_%H%M%S)" mkdir -p "{{ spigot_backup_dir }}/$BACKUP_NAME" cp -r "{{ minecraft_server_dir }}"/* "{{ spigot_backup_dir }}/$BACKUP_NAME/" become_user: "{{ minecraft_user }}" - name: Copy world data to new version ansible.builtin.shell: | if [ -d "{{ minecraft_server_dir }}/world" ]; then cp -r "{{ minecraft_server_dir }}/world" "{{ spigot_new_version_dir }}/" fi if [ -d "{{ minecraft_server_dir }}/world_nether" ]; then cp -r "{{ minecraft_server_dir }}/world_nether" "{{ spigot_new_version_dir }}/" fi if [ -d "{{ minecraft_server_dir }}/world_the_end" ]; then cp -r "{{ minecraft_server_dir }}/world_the_end" "{{ spigot_new_version_dir }}/" fi if [ -d "{{ minecraft_server_dir }}/plugins" ]; then cp -r "{{ minecraft_server_dir }}/plugins" "{{ spigot_new_version_dir }}/" fi become_user: "{{ minecraft_user }}" - name: Replace server directory with new version ansible.builtin.shell: | rm -rf "{{ minecraft_server_dir }}.old" mv "{{ minecraft_server_dir }}" "{{ minecraft_server_dir }}.old" mv "{{ spigot_new_version_dir }}" "{{ minecraft_server_dir }}" become_user: "{{ minecraft_user }}" - name: Update version file ansible.builtin.copy: content: "{{ minecraft_version }}" dest: "{{ spigot_current_version_file }}" owner: "{{ minecraft_user }}" group: "{{ minecraft_group }}" mode: '0644' - name: Start Minecraft server with new version ansible.builtin.systemd: name: minecraft state: started notify: "restart minecraft after version change" - name: Wait for server to start ansible.builtin.wait_for: port: "{{ minecraft_port }}" delay: 30 timeout: 300 - name: Verify server is running new version ansible.builtin.shell: | sleep 10 /usr/local/bin/mcrcon -H 127.0.0.1 -P {{ rcon_port }} -p "{{ rcon_password }}" "version" register: version_check failed_when: false - name: Display version switch result ansible.builtin.debug: msg: - "Version switch completed successfully" - "Server response: {{ version_check.stdout | default('No response') }}" - "Old version backed up to: {{ minecraft_server_dir }}.old" - name: Clean up old version after successful switch ansible.builtin.file: path: "{{ minecraft_server_dir }}.old" state: absent when: version_check.rc == 0