Compare commits
4 Commits
0214e6bd75
...
master
Author | SHA1 | Date | |
---|---|---|---|
80cd42b1c8 | |||
dbc9e3f80f | |||
d325f47cd9 | |||
272c3e730a |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.swp
|
@@ -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
48
tasks/forge.yml
Normal 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
|
@@ -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
11
tasks/paper.yml
Normal 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
|
@@ -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
10
templates/start-server.sh
Normal 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
39
templates/stop-server.sh
Normal 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
|
Reference in New Issue
Block a user