Add a gmod server and required roles
This commit is contained in:
parent
61ed816059
commit
241a74a21f
@ -3,3 +3,11 @@
|
||||
backups_frequency: 6h
|
||||
mcheapmax: 4096
|
||||
mcheapmin: 1024
|
||||
steam_api_key: !vault |
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
39616163316634306633623435636633623966306537636639316439343839393231376661666335
|
||||
6136333866633861313566306433393637613364386234360a303832626338373230396665336430
|
||||
33346530626633616161613635656433356434366437383363663165303862316163323263323230
|
||||
3334373531646364620a386165626130386265343235363639346230323930626330343235373662
|
||||
38313431663734343931333462316633643935353038313934663466303834636533616165353961
|
||||
6438356265656532396363323532616437353831613261323037
|
||||
|
@ -63,5 +63,19 @@
|
||||
tags: [ gameserver, minecraft, magicpack ]
|
||||
- hosts: game3
|
||||
roles:
|
||||
- role: steamcmd
|
||||
tags: [ steamcmd ]
|
||||
- role: steamgame
|
||||
vars:
|
||||
steam_appid: "232330"
|
||||
steam_path: "Counter-Strike Source Dedicated Server"
|
||||
tags: [ steam, gmod, css ]
|
||||
- role: sourcegame
|
||||
vars:
|
||||
source_appid: "4020"
|
||||
source_path: GarrysModDS
|
||||
source_game: garrysmod
|
||||
source_instancename: gmod
|
||||
# TODO: Add me when sam figures his shit out
|
||||
# source_args: "+host_workshop_collection COLLECTION_ID"
|
||||
source_args: "+gamemode sandbox"
|
||||
source_configrepo: "https://git.9iron.club/salt/gmodconfig"
|
||||
tags: [ steam, gmod ]
|
||||
|
2
roles/sourcegame/defaults/main.yml
Normal file
2
roles/sourcegame/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
||||
# vim:ft=ansible:
|
||||
source_maxplayers: 16
|
8
roles/sourcegame/handlers/main.yml
Normal file
8
roles/sourcegame/handlers/main.yml
Normal file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/ansible-playbook
|
||||
# vim:ft=ansible:
|
||||
---
|
||||
- name: "restart {{ source_instancename }}"
|
||||
systemd:
|
||||
name: "source-{{ source_instancename }}"
|
||||
state: restarted
|
||||
become: yes
|
9
roles/sourcegame/meta/main.yml
Normal file
9
roles/sourcegame/meta/main.yml
Normal file
@ -0,0 +1,9 @@
|
||||
# vim:ft=ansible:
|
||||
---
|
||||
allow_duplicates: yes
|
||||
dependencies:
|
||||
- role: steamcmd
|
||||
- role: steamgame
|
||||
vars:
|
||||
steam_appid: "{{ source_appid }}"
|
||||
steam_path: "{{ source_path }}"
|
48
roles/sourcegame/tasks/main.yml
Normal file
48
roles/sourcegame/tasks/main.yml
Normal file
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/ansible-playbook
|
||||
# vim:ft=ansible:
|
||||
---
|
||||
- name: Set up game
|
||||
block:
|
||||
- name: Clone configuration repository
|
||||
git:
|
||||
repo: "{{ source_configrepo }}"
|
||||
dest: $HOME/sourcecfg/{{ source_instancename }}
|
||||
notify: "restart {{ source_instancename }}"
|
||||
- name: Symlink configs
|
||||
file:
|
||||
src: "$HOME/sourcecfg/{{ source_instancename }}/{{ item }}"
|
||||
path: "/var/steam/.steam/SteamApps/common/{{ source_path }}/{{ source_game }}/cfg/{{ item }}"
|
||||
state: link
|
||||
force: yes
|
||||
loop:
|
||||
- autoexec.cfg
|
||||
- mount.cfg
|
||||
- server.cfg
|
||||
notify: "restart {{ source_instancename }}"
|
||||
become: yes
|
||||
become_user: steamcmd
|
||||
- name: Set up system
|
||||
block:
|
||||
- name: Template out service
|
||||
template:
|
||||
src: sourcegame.service
|
||||
dest: "/etc/systemd/system/source-{{ source_instancename }}.service"
|
||||
notify: "restart {{ source_instancename }}"
|
||||
- name: Reload available daemons
|
||||
systemd:
|
||||
daemon_reload: yes
|
||||
- name: Enable service
|
||||
systemd:
|
||||
name: "source-{{ source_instancename }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
- name: Assure CNAME record
|
||||
route53:
|
||||
state: present
|
||||
zone: "{{ zone }}"
|
||||
type: CNAME
|
||||
record: "{{ source_instancename }}.src.{{ zone }}."
|
||||
ttl: 300
|
||||
value:
|
||||
- "{{ inventory_hostname }}.{{ zone }}."
|
||||
become: yes
|
29
roles/sourcegame/templates/sourcegame.service
Normal file
29
roles/sourcegame/templates/sourcegame.service
Normal file
@ -0,0 +1,29 @@
|
||||
#
|
||||
# Licensed under the terms of the MIT license
|
||||
# vim:ft=dosini:
|
||||
#
|
||||
|
||||
[Unit]
|
||||
Description={{ source_game }} - {{ source_instancename }}
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=steamcmd
|
||||
Group=steamcmd
|
||||
WorkingDirectory=/var/steam/.steam/SteamApps/common/{{ source_path }}
|
||||
PrivateUsers=true
|
||||
ProtectSystem=full
|
||||
ProtectHome=true
|
||||
# Implies MountFlags=slave
|
||||
ProtectKernelTunables=true
|
||||
# Implies NoNewPrivileges=yes
|
||||
ProtectKernelModules=true
|
||||
# Implies MountAPIVFS=yes
|
||||
ProtectControlGroups=true
|
||||
|
||||
ExecStart=/bin/sh -c '/usr/bin/screen -DmS {{ source_instancename }} /var/steam/.steam/SteamApps/common/{{ source_path }}/srcds_run -game {{ source_game }} -maxplayers {{ source_maxplayers }} -authkey {{ steam_api_key }} {{ source_args }}'
|
||||
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
5
roles/steamgame/meta/main.yml
Normal file
5
roles/steamgame/meta/main.yml
Normal file
@ -0,0 +1,5 @@
|
||||
# vim:ft=ansible:
|
||||
---
|
||||
allow_duplicates: yes
|
||||
dependencies:
|
||||
- role: steamcmd
|
27
roles/steamgame/tasks/main.yml
Normal file
27
roles/steamgame/tasks/main.yml
Normal file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/ansible-playbook
|
||||
# vim:ft=ansible:
|
||||
---
|
||||
- name: Install Steam game
|
||||
block:
|
||||
- name: "Install game {{ steam_appid }}"
|
||||
command:
|
||||
argv:
|
||||
- /usr/games/steamcmd
|
||||
- +login
|
||||
- anonymous
|
||||
- +app_update
|
||||
- "{{ steam_appid }}"
|
||||
# - validate
|
||||
- +quit
|
||||
creates: "$HOME/.steam/SteamApps/common/{{ steam_path }}"
|
||||
- name: Create quick-access dir
|
||||
file:
|
||||
path: $HOME/games
|
||||
state: directory
|
||||
- name: Symlink game to quick-access dir
|
||||
file:
|
||||
src: "$HOME/.steam/SteamApps/common/{{ steam_path }}"
|
||||
path: "/var/steam/games/{{ steam_appid }}"
|
||||
state: link
|
||||
become: yes
|
||||
become_user: steamcmd
|
Loading…
Reference in New Issue
Block a user