Compare commits

...

4 Commits

Author SHA1 Message Date
80cd42b1c8 Update readme 2021-02-08 11:58:41 -06:00
dbc9e3f80f Add more complex stop-start behavior 2021-01-24 20:27:17 -06:00
d325f47cd9 Separate out tasks into different files 2021-01-09 04:02:38 -06:00
272c3e730a Add gitignore 2021-01-09 03:56:19 -06:00
8 changed files with 125 additions and 61 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.swp

View File

@@ -100,8 +100,8 @@ There's a lot that I want to add to this role. Namely:
* Vanilla server installation
* Management of whitelist, banlist, and ops.json
* INI/TOML configuration support for mods
* YAML configuration support for plugins
PRs are welcome.

48
tasks/forge.yml Normal file
View File

@@ -0,0 +1,48 @@
#!/usr/bin/ansible-playbook
# vim:ft=ansible:
---
- name: set up forge
block:
- name: template out modpack installer
template: src=install-modpack.sh dest={{ minecraft_home }}/{{ minecraft_name }}/install-modpack.sh mode="0755"
- name: download forge
get_url: dest={{ minecraft_home }}/{{ minecraft_name }}/installer.jar url={{ minecraft_forge_downloadurl }}
register: download_forge
- name: install forge
command:
chdir: "{{ minecraft_home }}/{{ minecraft_name }}"
argv: [ "/usr/bin/java", "-jar", "./installer.jar", "--installServer" ]
notify: restart minecraft {{ minecraft_name }}
when: download_forge is changed
- name: link to forge jar
file: path={{ minecraft_home }}/{{ minecraft_name }}/server.jar src={{ minecraft_forge_jar_name }} state=link
- name: install modpack
block:
- name: download modpack
get_url: dest={{ minecraft_home }}/{{ minecraft_name }}/modpack.zip url={{ minecraft_forge_packurl }}
register: download_modpack
- name: install modpack
block:
- name: assure modpack unzip directory
file: path={{ minecraft_home }}/{{ minecraft_name }}/modpack state=directory
- name: unpack zip
unarchive: src={{ minecraft_home }}/{{ minecraft_name }}/modpack.zip dest={{ minecraft_home }}/{{ minecraft_name }}/modpack remote_src=yes
- name: run installer
command:
chdir: "{{ minecraft_home }}/{{ minecraft_name }}"
argv: [ "bash", "./install-modpack.sh" ]
notify: "restart minecraft {{ minecraft_name }}"
when: download_modpack is changed
when: minecraft_forge_packurl is defined
- name: install mods
get_url: dest="{{ minecraft_home }}/{{ minecraft_name }}/mods" url={{ item }}
loop: "{{ minecraft_forge_mods }}"
notify: "restart minecraft {{ minecraft_name }}"
when: minecraft_forge_mods is iterable and minecraft_forge_mods != None
- name: remove mods
file: path={{ minecraft_home }}/{{ minecraft_name }}/mods/{{ item }} state=absent
loop: "{{ minecraft_forge_mods_remove }}"
notify: "restart minecraft {{ minecraft_name }}"
when: minecraft_forge_mods_remove is iterable and minecraft_forge_mods_remove != None
become: yes
become_user: minecraft

View File

@@ -20,6 +20,12 @@
template: src=eula.txt dest={{ minecraft_home }}/{{ minecraft_name }}/eula.txt
- name: template out env
template: src=env dest={{ minecraft_home }}/{{ minecraft_name }}/env
- name: template start script
template: src=start-server.sh dest={{ minecraft_home }}/{{ minecraft_name }}/start-server.sh mode="0744"
notify: "restart minecraft {{ minecraft_name }}"
- name: template stop script
template: src=stop-server.sh dest={{ minecraft_home }}/{{ minecraft_name }}/stop-server.sh mode="0744"
notify: "restart minecraft {{ minecraft_name }}"
- name: configure server properties
lineinfile:
dest: "{{ minecraft_home }}/{{ minecraft_name }}/server.properties"
@@ -30,61 +36,16 @@
notify: "restart minecraft {{ minecraft_name }}"
become: yes
become_user: minecraft
# Paper - A vanilla server with plugin support
- name: set up paper
block:
- name: download paper
get_url: url={{ minecraft_paper_downloadurl }} dest={{ minecraft_home }}/{{ minecraft_name }}/server.jar
notify: "restart minecraft {{ minecraft_name }}"
# TODO: Manage configs for plugins, auto-install plugins
become: yes
become_user: minecraft
include_tasks: paper.yml
when: minecraft_paper_install
# Forge - Server- and client-side modloader
- name: set up forge
block:
- name: template out modpack installer
template: src=install-modpack.sh dest={{ minecraft_home }}/{{ minecraft_name }}/install-modpack.sh mode="0755"
- name: download forge
get_url: dest={{ minecraft_home }}/{{ minecraft_name }}/installer.jar url={{ minecraft_forge_downloadurl }}
register: download_forge
- name: install forge
command:
chdir: "{{ minecraft_home }}/{{ minecraft_name }}"
argv: [ "/usr/bin/java", "-jar", "./installer.jar", "--installServer" ]
notify: restart minecraft {{ minecraft_name }}
when: download_forge is changed
- name: link to forge jar
file: path={{ minecraft_home }}/{{ minecraft_name }}/server.jar src={{ minecraft_forge_jar_name }} state=link
- name: install modpack
block:
- name: download modpack
get_url: dest={{ minecraft_home }}/{{ minecraft_name }}/modpack.zip url={{ minecraft_forge_packurl }}
register: download_modpack
- name: install modpack
block:
- name: assure modpack unzip directory
file: path={{ minecraft_home }}/{{ minecraft_name }}/modpack state=directory
- name: unpack zip
unarchive: src={{ minecraft_home }}/{{ minecraft_name }}/modpack.zip dest={{ minecraft_home }}/{{ minecraft_name }}/modpack remote_src=yes
- name: run installer
command:
chdir: "{{ minecraft_home }}/{{ minecraft_name }}"
argv: [ "bash", "./install-modpack.sh" ]
notify: "restart minecraft {{ minecraft_name }}"
when: download_modpack is changed
when: minecraft_forge_packurl is defined
- name: install mods
get_url: dest="{{ minecraft_home }}/{{ minecraft_name }}/mods" url={{ item }}
loop: "{{ minecraft_forge_mods }}"
notify: "restart minecraft {{ minecraft_name }}"
when: minecraft_forge_mods is iterable and minecraft_forge_mods != None
- name: remove mods
file: path={{ minecraft_home }}/{{ minecraft_name }}/mods/{{ item }} state=absent
loop: "{{ minecraft_forge_mods_remove }}"
notify: "restart minecraft {{ minecraft_name }}"
when: minecraft_forge_mods_remove is iterable and minecraft_forge_mods_remove != None
become: yes
become_user: minecraft
include_tasks: forge.yml
when: minecraft_forge_install and minecraft_forge_version is defined
- name: enable service
systemd: name=minecraft@{{ minecraft_name }}.service enabled=yes state=started
when: minecraft_enabled

11
tasks/paper.yml Normal file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ansible-playbook
# vim:ft=ansible:
---
- name: set up paper
block:
- name: download paper
get_url: url={{ minecraft_paper_downloadurl }} dest={{ minecraft_home }}/{{ minecraft_name }}/server.jar
notify: "restart minecraft {{ minecraft_name }}"
# TODO: Manage configs for plugins, auto-install plugins
become: yes
become_user: minecraft

View File

@@ -23,14 +23,8 @@ ProtectKernelModules=true
# Implies MountAPIVFS=yes
ProtectControlGroups=true
ExecStart=/bin/sh -c '/usr/bin/screen -DmS %i /usr/bin/java -Xms${JRE_XMS} -Xmx${JRE_XMX} -jar server.jar nogui'
ExecReload=/usr/bin/screen -p 0 -S %i -X eval 'stuff "reload"\\015'
ExecStop=/usr/bin/screen -p 0 -S %i -X eval 'stuff "say Server is going down: Service was stopped"\\015'
ExecStop=/usr/bin/screen -p 0 -S %i -X eval 'stuff "save-all"\\015'
ExecStop=/usr/bin/screen -p 0 -S %i -X eval 'stuff "stop"\\015'
ExecStop=/bin/sleep ${MC_RESTART_DELAY}
ExecStart={{ minecraft_home }}/%i/start-server.sh
ExecStop={{ minecraft_home }}/%i/stop-server.sh
Restart=always
# Restart after 24hrs

10
templates/start-server.sh Normal file
View File

@@ -0,0 +1,10 @@
#! /bin/bash
instance="{{ minecraft_name }}"
/usr/bin/screen -DmS "$instance" \
/usr/bin/java \
-Xms"$JRE_XMS" \
-Xmx"$JRE_XMX" \
-Dfml.queryResult=confirm \
-jar server.jar \
nogui

39
templates/stop-server.sh Normal file
View File

@@ -0,0 +1,39 @@
#! /bin/bash
# vim:ft=bash
instance="{{ minecraft_name }}"
screen="/usr/bin/screen -p 0 -S $instance"
stuff() {
[ -z "$1" ] && return 1
$screen -X eval "stuff \"$1\"\\015"
}
# Junk FD used for read waiting
exec 1023<> <(:)
stuff "say Server is going down for maintenance!"
if [ -n "$MC_RESTART_DELAY" ] && [ "$MC_RESTART_DELAY" -gt 0 ]; then
for (( i="$MC_RESTART_DELAY"; i>0; i-- )); do
case "$i" in
300)
stuff "say Server is going down in 5 minutes!"
;;
60)
stuff "say Server is going down in 1 minute!"
;;
30|10|5|4|3|2)
stuff "say Server is going down in "$i" seconds!"
;;
1)
stuff "say Server is going down NOW!"
;;
*)
;;
esac
read -t 1 -u 1023 || :
done
fi
stuff "save-all"
read -t 10 -u 1023 || :
stuff "stop"
exit 0