update
This commit is contained in:
5
roles/05-update/defaults/main.yml
Normal file
5
roles/05-update/defaults/main.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
update_check_interval: daily
|
||||
ssh_keys_check_enabled: true
|
||||
system_update_check_enabled: true
|
||||
spigot_update_check_enabled: true
|
7
roles/05-update/handlers/main.yml
Normal file
7
roles/05-update/handlers/main.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: reboot if needed
|
||||
reboot:
|
||||
reboot_timeout: 300
|
||||
when:
|
||||
- ansible_kernel != ansible_kernel_before_update | default(ansible_kernel)
|
||||
- reboot_required | default(false)
|
14
roles/05-update/tasks/01-check-ssh-keys.yml
Normal file
14
roles/05-update/tasks/01-check-ssh-keys.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Check for new SSH keys in authorized_keys
|
||||
stat:
|
||||
path: /home/{{ ansible_user }}/.ssh/authorized_keys
|
||||
register: ssh_keys_stat
|
||||
|
||||
- name: Update SSH keys if changed
|
||||
authorized_key:
|
||||
user: "{{ ansible_user }}"
|
||||
key: "{{ item }}"
|
||||
state: present
|
||||
loop: "{{ ssh_public_keys | default([]) }}"
|
||||
when: ssh_public_keys is defined
|
||||
tags: ['ssh-keys-update']
|
23
roles/05-update/tasks/02-check-system-updates.yml
Normal file
23
roles/05-update/tasks/02-check-system-updates.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Check for system updates (Debian/Ubuntu)
|
||||
apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
register: apt_cache_update
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: Check available upgrades
|
||||
shell: apt list --upgradable 2>/dev/null | grep -v WARNING | wc -l
|
||||
register: available_upgrades
|
||||
changed_when: false
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: Apply system updates if available
|
||||
apt:
|
||||
upgrade: yes
|
||||
autoremove: yes
|
||||
autoclean: yes
|
||||
when:
|
||||
- ansible_os_family == "Debian"
|
||||
- available_upgrades.stdout | int > 1
|
||||
notify: reboot if needed
|
26
roles/05-update/tasks/03-check-spigot-version.yml
Normal file
26
roles/05-update/tasks/03-check-spigot-version.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
- name: Get current Spigot version
|
||||
stat:
|
||||
path: "{{ minecraft_server_dir }}/spigot.jar"
|
||||
register: current_spigot
|
||||
|
||||
- name: Check latest Spigot version available
|
||||
uri:
|
||||
url: "https://api.papermc.io/v2/projects/paper/versions"
|
||||
method: GET
|
||||
return_content: yes
|
||||
register: spigot_versions_api
|
||||
failed_when: false
|
||||
|
||||
- name: Parse latest version
|
||||
set_fact:
|
||||
latest_spigot_version: "{{ (spigot_versions_api.json.versions | last) if spigot_versions_api.json is defined else minecraft_version }}"
|
||||
|
||||
- name: Compare versions
|
||||
set_fact:
|
||||
new_spigot_available: "{{ latest_spigot_version != minecraft_version }}"
|
||||
when: latest_spigot_version is defined
|
||||
|
||||
- name: Display version information
|
||||
debug:
|
||||
msg: "Current: {{ minecraft_version }}, Latest: {{ latest_spigot_version | default('Unknown') }}, Update available: {{ new_spigot_available | default(false) }}"
|
16
roles/05-update/tasks/04-download-new-spigot.yml
Normal file
16
roles/05-update/tasks/04-download-new-spigot.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Create temporary build directory
|
||||
file:
|
||||
path: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Download BuildTools for new version
|
||||
get_url:
|
||||
url: "{{ spigot_build_tools_url }}"
|
||||
dest: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}/BuildTools.jar"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
38
roles/05-update/tasks/05-compile-new-version.yml
Normal file
38
roles/05-update/tasks/05-compile-new-version.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
- name: Compile new Spigot version
|
||||
shell: |
|
||||
cd {{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}
|
||||
java -jar BuildTools.jar --rev {{ latest_spigot_version }}
|
||||
become_user: "{{ minecraft_user }}"
|
||||
args:
|
||||
creates: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}/spigot-{{ latest_spigot_version }}.jar"
|
||||
register: spigot_compile_result
|
||||
|
||||
- name: Set compilation success flag
|
||||
set_fact:
|
||||
new_spigot_compiled: "{{ spigot_compile_result.rc == 0 }}"
|
||||
|
||||
- name: Create new server directory
|
||||
file:
|
||||
path: "{{ minecraft_server_dir }}_{{ latest_spigot_version }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
when: new_spigot_compiled
|
||||
|
||||
- name: Copy new Spigot jar to new server directory
|
||||
copy:
|
||||
src: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}/spigot-{{ latest_spigot_version }}.jar"
|
||||
dest: "{{ minecraft_server_dir }}_{{ latest_spigot_version }}/spigot.jar"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
remote_src: yes
|
||||
when: new_spigot_compiled
|
||||
|
||||
- name: Copy configuration files to new server directory
|
||||
shell: |
|
||||
cp -r {{ minecraft_server_dir }}/* {{ minecraft_server_dir }}_{{ latest_spigot_version }}/
|
||||
chown -R {{ minecraft_user }}:{{ minecraft_group }} {{ minecraft_server_dir }}_{{ latest_spigot_version }}
|
||||
when: new_spigot_compiled
|
29
roles/05-update/tasks/06-switch-versions.yml
Normal file
29
roles/05-update/tasks/06-switch-versions.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
- name: Stop Minecraft service
|
||||
systemd:
|
||||
name: minecraft
|
||||
state: stopped
|
||||
|
||||
- name: Create version switch script
|
||||
template:
|
||||
src: version-switch.sh.j2
|
||||
dest: "{{ minecraft_tools_dir }}/version-switch.sh"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Execute version switch
|
||||
shell: "{{ minecraft_tools_dir }}/version-switch.sh {{ minecraft_version }} {{ latest_spigot_version }}"
|
||||
become_user: "{{ minecraft_user }}"
|
||||
register: version_switch_result
|
||||
|
||||
- name: Update minecraft_version variable
|
||||
set_fact:
|
||||
minecraft_version: "{{ latest_spigot_version }}"
|
||||
when: version_switch_result.rc == 0
|
||||
|
||||
- name: Start Minecraft service
|
||||
systemd:
|
||||
name: minecraft
|
||||
state: started
|
||||
when: version_switch_result.rc == 0
|
13
roles/05-update/tasks/07-cleanup.yml
Normal file
13
roles/05-update/tasks/07-cleanup.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Clean up old build directories
|
||||
file:
|
||||
path: "{{ minecraft_sources_dir }}/build_{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ old_versions | default([]) }}"
|
||||
|
||||
- name: Clean up old server directories
|
||||
file:
|
||||
path: "{{ minecraft_server_dir }}_{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ old_versions | default([]) }}"
|
||||
when: cleanup_old_versions | default(true)
|
34
roles/05-update/tasks/main.yml
Normal file
34
roles/05-update/tasks/main.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
- name: Include SSH keys check tasks
|
||||
include_tasks: 01-check-ssh-keys.yml
|
||||
when: ssh_keys_check_enabled
|
||||
tags: ['update', 'ssh-keys']
|
||||
|
||||
- name: Include system updates check tasks
|
||||
include_tasks: 02-check-system-updates.yml
|
||||
when: system_update_check_enabled
|
||||
tags: ['update', 'system']
|
||||
|
||||
- name: Include Spigot version check tasks
|
||||
include_tasks: 03-check-spigot-version.yml
|
||||
when: spigot_update_check_enabled
|
||||
tags: ['update', 'spigot']
|
||||
|
||||
- name: Include new Spigot download tasks
|
||||
include_tasks: 04-download-new-spigot.yml
|
||||
when: new_spigot_available | default(false)
|
||||
tags: ['update', 'download']
|
||||
|
||||
- name: Include new version compilation tasks
|
||||
include_tasks: 05-compile-new-version.yml
|
||||
when: new_spigot_available | default(false)
|
||||
tags: ['update', 'compile']
|
||||
|
||||
- name: Include version switch tasks
|
||||
include_tasks: 06-switch-versions.yml
|
||||
when: new_spigot_compiled | default(false)
|
||||
tags: ['update', 'switch']
|
||||
|
||||
- name: Include cleanup tasks
|
||||
include_tasks: 07-cleanup.yml
|
||||
tags: ['update', 'cleanup']
|
18
roles/05-update/templates/version-switch.sh.j2
Normal file
18
roles/05-update/templates/version-switch.sh.j2
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
OLD_VERSION="$1"
|
||||
NEW_VERSION="$2"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/version_backup"
|
||||
|
||||
# Create backup directory
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
|
||||
# Backup current version
|
||||
mv "${SERVER_DIR}" "${BACKUP_DIR}/server_${OLD_VERSION}_$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Switch to new version
|
||||
mv "${SERVER_DIR}_${NEW_VERSION}" "${SERVER_DIR}"
|
||||
|
||||
echo "Version switched from ${OLD_VERSION} to ${NEW_VERSION}"
|
||||
exit 0
|
0
roles/05-update/vars/main.yml
Normal file
0
roles/05-update/vars/main.yml
Normal file
Reference in New Issue
Block a user