new version
Some checks failed
Ansible Minecraft CI/CD / Ansible Lint (push) Successful in 8s
Ansible Minecraft CI/CD / Syntax Check (push) Failing after 7s
Ansible Minecraft CI/CD / Deploy to Staging (push) Has been skipped
Ansible Minecraft CI/CD / Deploy to Production (push) Has been skipped

This commit is contained in:
2025-08-27 15:11:08 +02:00
parent 3e64946953
commit 8f0877cd53
105 changed files with 911 additions and 2540 deletions

View File

@@ -1,23 +1,14 @@
---
- name: Create minecraft group
- name: Création du groupe minecraft
ansible.builtin.group:
name: "{{ minecraft_group }}"
state: present
system: yes
- name: Create minecraft user
- name: Création de l'utilisateur minecraft
ansible.builtin.user:
name: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
groups: []
append: no
home: "{{ minecraft_base_dir }}"
home: "{{ minecraft_home }}"
shell: /bin/bash
system: yes
create_home: yes
state: present
comment: "Minecraft Server User"
- name: Set minecraft user password to never expire
ansible.builtin.command: chage -M -1 {{ minecraft_user }}
changed_when: false
state: present

View File

@@ -1,25 +1,15 @@
---
- name: Create minecraft directories
- name: Création des répertoires Minecraft
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
loop: "{{ minecraft_dirs }}"
- name: Create .ssh directory for minecraft user
ansible.builtin.file:
path: "{{ minecraft_base_dir }}/.ssh"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0700'
- name: Set correct permissions on base directory
ansible.builtin.file:
path: "{{ minecraft_base_dir }}"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
recurse: yes
with_items:
- "{{ minecraft_sources_dir }}"
- "{{ minecraft_server_dir }}"
- "{{ minecraft_tools_dir }}"
- "{{ minecraft_backups_dir }}"
- "{{ minecraft_logs_dir }}"
- "{{ minecraft_server_dir }}/plugins"

View File

@@ -1,30 +1,8 @@
---
- name: Install required packages for building
ansible.builtin.apt:
name: "{{ build_packages }}"
state: present
update_cache: yes
when: ansible_os_family == "Debian"
- name: Check if BuildTools already exists
ansible.builtin.stat:
path: "{{ minecraft_sources_dir }}/{{ buildtools_jar }}"
register: buildtools_exists
- name: Download BuildTools
- name: Téléchargement de BuildTools
ansible.builtin.get_url:
url: "{{ minecraft_build_tools_url }}"
dest: "{{ minecraft_sources_dir }}/{{ buildtools_jar }}"
url: "{{ spigot_build_tools_url }}"
dest: "{{ minecraft_sources_dir }}/{{ build_tools_jar }}"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
force: yes
when: not buildtools_exists.stat.exists or force_download | default(false)
- name: Create work directory for compilation
ansible.builtin.file:
path: "{{ minecraft_sources_dir }}/work"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
mode: '0644'

View File

@@ -1,52 +0,0 @@
---
- name: Check if Spigot is already compiled
ansible.builtin.stat:
path: "{{ minecraft_sources_dir }}/{{ spigot_jar_name }}"
register: spigot_compiled
- name: Remove old work directory if exists
ansible.builtin.file:
path: "{{ minecraft_sources_dir }}/work"
state: absent
when: not spigot_compiled.stat.exists
- name: Compile Spigot with BuildTools
ansible.builtin.shell: |
cd {{ minecraft_sources_dir }}
java -Xmx1024M -jar {{ buildtools_jar }} --rev {{ minecraft_version }} --compile-if-changed
args:
creates: "{{ minecraft_sources_dir }}/{{ spigot_jar_name }}"
become_user: "{{ minecraft_user }}"
when: not spigot_compiled.stat.exists
register: compile_result
async: 1800
poll: 30
- name: Wait for compilation to complete
ansible.builtin.async_status:
jid: "{{ compile_result.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 60
delay: 30
when: compile_result.ansible_job_id is defined
- name: Verify Spigot jar was created
ansible.builtin.stat:
path: "{{ minecraft_sources_dir }}/{{ spigot_jar_name }}"
register: spigot_jar_check
failed_when: not spigot_jar_check.stat.exists
- name: Copy compiled Spigot to server directory
ansible.builtin.copy:
src: "{{ minecraft_sources_dir }}/{{ spigot_jar_name }}"
dest: "{{ minecraft_server_dir }}/{{ spigot_jar_name }}"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
remote_src: yes
- name: Clean up work directory
ansible.builtin.file:
path: "{{ minecraft_sources_dir }}/work"
state: absent

View File

@@ -0,0 +1,20 @@
---
- name: Installation des dépendances pour mcrcon
ansible.builtin.apt:
name:
- build-essential
- git
state: present
- name: Clone du repository mcrcon
ansible.builtin.git:
repo: https://github.com/Tiiffi/mcrcon.git
dest: "{{ minecraft_tools_dir }}/mcrcon"
version: master
become_user: "{{ minecraft_user }}"
- name: Compilation de mcrcon
ansible.builtin.command:
cmd: make
chdir: "{{ minecraft_tools_dir }}/mcrcon"
become_user: "{{ minecraft_user }}"

View File

@@ -0,0 +1,17 @@
---
- name: Compilation de Spigot
ansible.builtin.command:
cmd: "java -jar {{ build_tools_jar }} --rev {{ minecraft_version }}"
chdir: "{{ minecraft_sources_dir }}"
creates: "{{ minecraft_sources_dir }}/spigot-{{ minecraft_version }}.jar"
become_user: "{{ minecraft_user }}"
timeout: 1800
- name: Copie du JAR Spigot compilé
ansible.builtin.copy:
src: "{{ minecraft_sources_dir }}/spigot-{{ minecraft_version }}.jar"
dest: "{{ minecraft_server_dir }}/spigot.jar"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
remote_src: yes

View File

@@ -1,57 +0,0 @@
---
- name: Create server.properties
ansible.builtin.template:
src: server.properties.j2
dest: "{{ minecraft_server_dir }}/server.properties"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
backup: yes
- name: Accept EULA
ansible.builtin.template:
src: eula.txt.j2
dest: "{{ minecraft_server_dir }}/eula.txt"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
- name: Create spigot.yml configuration
ansible.builtin.template:
src: spigot.yml.j2
dest: "{{ minecraft_server_dir }}/spigot.yml"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
- name: Create bukkit.yml configuration
ansible.builtin.template:
src: bukkit.yml.j2
dest: "{{ minecraft_server_dir }}/bukkit.yml"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
- name: Create start script
ansible.builtin.template:
src: start.sh.j2
dest: "{{ minecraft_base_dir }}/scripts/start.sh"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
- name: Create stop script
ansible.builtin.template:
src: stop.sh.j2
dest: "{{ minecraft_base_dir }}/scripts/stop.sh"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
- name: Store current version
ansible.builtin.copy:
content: "{{ minecraft_version }}"
dest: "{{ minecraft_server_dir }}/.version"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'

View File

@@ -0,0 +1,18 @@
---
- name: Génération de la configuration server.properties
ansible.builtin.template:
src: server.properties.j2
dest: "{{ minecraft_server_dir }}/server.properties"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
notify: restart minecraft
- name: Acceptation de l'EULA
ansible.builtin.lineinfile:
path: "{{ minecraft_server_dir }}/eula.txt"
line: "eula=true"
create: yes
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'

View File

@@ -1,46 +0,0 @@
---
- name: Check if mcrcon is already installed
ansible.builtin.stat:
path: "{{ minecraft_tools_dir }}/mcrcon"
register: mcrcon_installed
- name: Download mcrcon
ansible.builtin.get_url:
url: "{{ mcrcon_url }}"
dest: "{{ minecraft_tools_dir }}/mcrcon.tar.gz"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
when: not mcrcon_installed.stat.exists
- name: Extract mcrcon
ansible.builtin.unarchive:
src: "{{ minecraft_tools_dir }}/mcrcon.tar.gz"
dest: "{{ minecraft_tools_dir }}"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
remote_src: yes
creates: "{{ minecraft_tools_dir }}/mcrcon"
when: not mcrcon_installed.stat.exists
- name: Make mcrcon executable
ansible.builtin.file:
path: "{{ minecraft_tools_dir }}/mcrcon"
mode: '0755'
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
- name: Create mcrcon wrapper script
ansible.builtin.copy:
content: |
#!/bin/bash
{{ minecraft_tools_dir }}/mcrcon -H localhost -P {{ rcon_port }} -p "{{ rcon_password }}" "$@"
dest: "{{ minecraft_base_dir }}/scripts/rcon.sh"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
- name: Clean up mcrcon archive
ansible.builtin.file:
path: "{{ minecraft_tools_dir }}/mcrcon.tar.gz"
state: absent

View File

@@ -1,36 +1,11 @@
---
- name: Create minecraft systemd service
- name: Création du service systemd Minecraft
ansible.builtin.template:
src: minecraft.service.j2
dest: "/etc/systemd/system/{{ minecraft_service_name }}"
dest: /etc/systemd/system/minecraft.service
owner: root
group: root
mode: '0644'
notify:
- reload systemd daemon
- restart minecraft server
- name: Reload systemd daemon
ansible.builtin.systemd:
daemon_reload: yes
- name: Enable minecraft service
ansible.builtin.systemd:
name: "{{ minecraft_service_name }}"
enabled: "{{ minecraft_service_enabled }}"
masked: no
- name: Start minecraft service
ansible.builtin.systemd:
name: "{{ minecraft_service_name }}"
state: "{{ minecraft_service_state }}"
when: minecraft_service_state == "started"
- name: Wait for server to be ready
ansible.builtin.wait_for:
port: "{{ server_port }}"
delay: 10
timeout: 120
state: started
host: 127.0.0.1
when: minecraft_service_state == "started"
notify:
- reload systemd
- enable minecraft service

View File

@@ -1,36 +1,8 @@
---
- name: Configure logrotate for minecraft logs
- name: Configuration de la rotation des logs
ansible.builtin.template:
src: minecraft-logrotate.j2
dest: /etc/logrotate.d/minecraft
owner: root
group: root
mode: '0644'
- name: Create rsyslog configuration for minecraft
ansible.builtin.copy:
content: |
# Minecraft Server Logging
:programname, isequal, "minecraft" /var/log/minecraft.log
& stop
dest: /etc/rsyslog.d/30-minecraft.conf
owner: root
group: root
mode: '0644'
notify: restart rsyslog service
- name: Create minecraft log file
ansible.builtin.file:
path: /var/log/minecraft.log
state: touch
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
modification_time: preserve
access_time: preserve
- name: Test logrotate configuration
ansible.builtin.command: logrotate -d /etc/logrotate.d/minecraft
register: logrotate_test
changed_when: false
failed_when: logrotate_test.rc != 0
mode: '0644'

View File

@@ -1,32 +1,9 @@
---
- name: Check if ops.json exists
ansible.builtin.stat:
path: "{{ minecraft_server_dir }}/ops.json"
register: ops_file
- name: Create ops.json file
- name: Génération du fichier ops.json
ansible.builtin.template:
src: ops.json.j2
dest: "{{ minecraft_server_dir }}/ops.json"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
backup: yes
when: minecraft_ops is defined and minecraft_ops | length > 0
- name: Create empty ops.json if no ops defined
ansible.builtin.copy:
content: "[]"
dest: "{{ minecraft_server_dir }}/ops.json"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
force: no
when: not ops_file.stat.exists and (minecraft_ops is not defined or minecraft_ops | length == 0)
- name: Set permissions on ops.json
ansible.builtin.file:
path: "{{ minecraft_server_dir }}/ops.json"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
notify: restart minecraft

View File

@@ -1,39 +1,10 @@
---
- name: Create plugins directory
ansible.builtin.file:
path: "{{ minecraft_server_dir }}/plugins"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
- name: Download plugins
- name: Installation des plugins par défaut
ansible.builtin.get_url:
url: "{{ item.url }}"
dest: "{{ minecraft_server_dir }}/plugins/{{ item.name }}.jar"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0644'
timeout: 30
loop: "{{ minecraft_plugins_list }}"
when: minecraft_plugins_list is defined and minecraft_plugins_list | length > 0
ignore_errors: yes
- name: Create plugins config directory
ansible.builtin.file:
path: "{{ minecraft_server_dir }}/plugins/{{ item.name }}"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_group }}"
mode: '0755'
loop: "{{ minecraft_plugins_list }}"
when: minecraft_plugins_list is defined and item.create_config_dir | default(false)
- name: Restart server to load new plugins
ansible.builtin.systemd:
name: "{{ minecraft_service_name }}"
state: restarted
when:
- minecraft_plugins_list is defined
- minecraft_plugins_list | length > 0
- restart_after_plugins | default(false)
with_items: "{{ minecraft_plugins | default([]) }}"
when: minecraft_plugins is defined

View File

@@ -1,40 +1,31 @@
---
- name: Include create user and group tasks
ansible.builtin.include_tasks: 01-create-user-group.yml
tags: ['minecraft-user']
# Tâches principales installation Minecraft
- import_tasks: 01-create-user-group.yml
tags: [minecraft, user]
- name: Include create directories tasks
ansible.builtin.include_tasks: 02-create-directories.yml
tags: ['minecraft-dirs']
- import_tasks: 02-create-directories.yml
tags: [minecraft, directories]
- name: Include download Spigot tasks
ansible.builtin.include_tasks: 03-download-spigot.yml
tags: ['minecraft-download']
- import_tasks: 03-download-spigot.yml
tags: [minecraft, download]
- name: Include compile Spigot tasks
ansible.builtin.include_tasks: 04-compile-spigot.yml
tags: ['minecraft-compile']
- import_tasks: 04-install-mcrcon.yml
tags: [minecraft, mcrcon]
- name: Include configure server tasks
ansible.builtin.include_tasks: 05-configure-server.yml
tags: ['minecraft-config']
- import_tasks: 05-compile-spigot.yml
tags: [minecraft, compile]
- name: Include install mcrcon tasks
ansible.builtin.include_tasks: 06-install-mcrcon.yml
tags: ['minecraft-mcrcon']
- import_tasks: 06-configure-minecraft.yml
tags: [minecraft, configure]
- name: Include create service tasks
ansible.builtin.include_tasks: 07-create-service.yml
tags: ['minecraft-service']
- import_tasks: 07-create-service.yml
tags: [minecraft, service]
- name: Include configure logrotate tasks
ansible.builtin.include_tasks: 08-configure-logrotate.yml
tags: ['minecraft-logs']
- import_tasks: 08-configure-logrotate.yml
tags: [minecraft, logrotate]
- name: Include manage ops tasks
ansible.builtin.include_tasks: 09-manage-ops.yml
tags: ['minecraft-ops']
- import_tasks: 09-manage-ops.yml
tags: [minecraft, ops]
- name: Include install plugins tasks
ansible.builtin.include_tasks: 10-install-plugins.yml
tags: ['minecraft-plugins']
- import_tasks: 10-install-plugins.yml
tags: [minecraft, plugins]