Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(role): LinuxGameServerManager #321

Merged
merged 8 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions roles/lgsm/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
########################################################################
# Title: Sandbox: LGSM | Default Variables #
# Author(s): Scarabyte #
# URL: https://github.com/saltyorg/Sandbox #
# -- #
########################################################################
# GNU General Public License v3.0 #
########################################################################
---
################################
# Basics
################################

lgsm_instances: ["lgsm"]
DevScarabyte marked this conversation as resolved.
Show resolved Hide resolved

################################
# Paths
################################

lgsm_paths_folder: "{{ lgsm_name }}"
lgsm_paths_location: "{{ server_appdata_path }}/{{ lgsm_paths_folder }}"
lgsm_paths_folders_list:
- "{{ lgsm_paths_location }}"

################################
# Web
################################

lgsm_web_subdomain: "{{ lgsm_name }}"
lgsm_web_domain: "{{ user.domain }}"

################################
# DNS
################################

lgsm_dns_record: "{{ lookup('vars', lgsm_name + '_web_subdomain', default=lgsm_web_subdomain) }}"
lgsm_dns_zone: "{{ lookup('vars', lgsm_name + '_web_domain', default=lgsm_web_domain) }}"
lgsm_dns_proxy: false

################################
# Docker
################################

# Container
lgsm_docker_container: "{{ lgsm_name }}"

# Image
lgsm_docker_image_pull: true
lgsm_docker_image_repo: "gameservermanagers/gameserver"
lgsm_docker_image_tag: "{{ lgsm_name | replace('lgsm_', '') }}"
lgsm_docker_image: "{{ lookup('vars', lgsm_name + '_docker_image_repo', default=lgsm_docker_image_repo)
+ ':' + lookup('vars', lgsm_name + '_docker_image_tag', default=lgsm_docker_image_tag) }}"

# Ports
lgsm_docker_ports_defaults: []
lgsm_docker_ports_custom: []
lgsm_docker_ports: "{{ lookup('vars', lgsm_name + '_docker_ports_defaults', default=lgsm_docker_ports_defaults)
+ lookup('vars', lgsm_name + '_docker_ports_custom', default=lgsm_docker_ports_custom) }}"

# Envs
lgsm_docker_envs_default: {}
lgsm_docker_envs_custom: {}
lgsm_docker_envs: "{{ lookup('vars', lgsm_name + '_docker_envs_default', default=lgsm_docker_envs_default)
| combine(lookup('vars', lgsm_name + '_docker_envs_custom', default=lgsm_docker_envs_custom)) }}"

# Commands
lgsm_docker_commands_default: []
lgsm_docker_commands_custom: []
lgsm_docker_commands: "{{ lookup('vars', lgsm_name + '_docker_commands_default', default=lgsm_docker_commands_default)
+ lookup('vars', lgsm_name + '_docker_commands_custom', default=lgsm_docker_commands_custom) }}"

# Volumes
lgsm_docker_volumes_default:
- "{{ lgsm_paths_location }}:/data"
lgsm_docker_volumes_custom: []
lgsm_docker_volumes: "{{ lookup('vars', lgsm_name + '_docker_volumes_default', default=lgsm_docker_volumes_default)
+ lookup('vars', lgsm_name + '_docker_volumes_custom', default=lgsm_docker_volumes_custom) }}"

# Devices
lgsm_docker_devices_default: []
lgsm_docker_devices_custom: []
lgsm_docker_devices: "{{ lookup('vars', lgsm_name + '_docker_devices_default', default=lgsm_docker_devices_default)
+ lookup('vars', lgsm_name + '_docker_devices_custom', default=lgsm_docker_devices_custom) }}"

# Hosts
lgsm_docker_hosts_default: []
lgsm_docker_hosts_custom: []
lgsm_docker_hosts: "{{ docker_hosts_common
| combine(lookup('vars', lgsm_name + '_docker_hosts_default', default=lgsm_docker_hosts_default))
| combine(lookup('vars', lgsm_name + '_docker_hosts_custom', default=lgsm_docker_hosts_custom)) }}"

# Labels
lgsm_docker_labels_default: {}
lgsm_docker_labels_custom: {}
lgsm_docker_labels: "{{ docker_labels_common
| combine(lookup('vars', lgsm_name + '_docker_labels_default', default=lgsm_docker_labels_default))
| combine(lookup('vars', lgsm_name + '_docker_labels_custom', default=lgsm_docker_labels_custom)) }}"

# Hostname
lgsm_docker_hostname: "{{ lgsm_name }}"

# Network Mode
lgsm_docker_network_mode_default: "{{ docker_networks_name_common }}"
lgsm_docker_network_mode: "{{ lookup('vars', lgsm_name + '_docker_network_mode_default', default=lgsm_docker_network_mode_default) }}"

# Networks
lgsm_docker_networks_alias: "{{ lgsm_name }}"
lgsm_docker_networks_default: []
lgsm_docker_networks_custom: []
lgsm_docker_networks: "{{ docker_networks_common
+ lookup('vars', lgsm_name + '_docker_networks_default', default=lgsm_docker_networks_default)
+ lookup('vars', lgsm_name + '_docker_networks_custom', default=lgsm_docker_networks_custom) }}"

# Capabilities
lgsm_docker_capabilities_default: []
lgsm_docker_capabilities_custom: []
lgsm_docker_capabilities: "{{ lookup('vars', lgsm_name + '_docker_capabilities_default', default=lgsm_docker_capabilities_default)
+ lookup('vars', lgsm_name + '_docker_capabilities_custom', default=lgsm_docker_capabilities_custom) }}"

# Security Opts
lgsm_docker_security_opts_default: []
lgsm_docker_security_opts_custom: []
lgsm_docker_security_opts: "{{ lookup('vars', lgsm_name + '_docker_security_opts_default', default=lgsm_docker_security_opts_default)
+ lookup('vars', lgsm_name + '_docker_security_opts_custom', default=lgsm_docker_security_opts_custom) }}"

# Restart Policy
lgsm_docker_restart_policy: unless-stopped

# State
lgsm_docker_state: started
31 changes: 31 additions & 0 deletions roles/lgsm/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
########################################################################
# Title: Sandbox: LGSM | Multi-instance Tasks #
# Author(s): scarabyte #
# URL: https://github.com/saltyorg/Sandbox #
# -- #
########################################################################
# GNU General Public License v3.0 #
########################################################################
---
- name: Ensure we have instances for lgsm to install
ansible.builtin.assert:
that:
- lgsm_instances is defined
- lgsm_instances is not string
- lgsm_instances is not mapping
- lgsm_instances is iterable
- lgsm_instances | length > 1
fail_msg: >-
LGSM was designed to use multi-instance configuration to install game servers properly. Check out https://docs.saltbox.dev/reference/multiple-instances/
success_msg: >-
Detected multi-instance configuration.
DevScarabyte marked this conversation as resolved.
Show resolved Hide resolved

- name: "Execute lgsm roles"
ansible.builtin.include_tasks: main2.yml
vars:
lgsm_name: "{{ role }}"
with_items: "{{ lgsm_instances }}"
loop_control:
loop_var: role
when:
- role != "lgsm"
DevScarabyte marked this conversation as resolved.
Show resolved Hide resolved
24 changes: 24 additions & 0 deletions roles/lgsm/tasks/main2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
########################################################################
# Title: Sandbox: LGSM | Deployment Tasks #
# Author(s): scarabyte #
# URL: https://github.com/saltyorg/Sandbox #
# -- #
########################################################################
# GNU General Public License v3.0 #
########################################################################
---
- name: Add DNS record
ansible.builtin.include_tasks: "{{ resources_tasks_path }}/dns/tasker.yml"
vars:
dns_record: "{{ lookup('vars', role_name + '_dns_record') }}"
dns_zone: "{{ lookup('vars', role_name + '_dns_zone') }}"
dns_proxy: "{{ lookup('vars', role_name + '_dns_proxy') }}"

- name: Remove existing Docker container
ansible.builtin.include_tasks: "{{ resources_tasks_path }}/docker/remove_docker_container.yml"

- name: Create directories
ansible.builtin.include_tasks: "{{ resources_tasks_path }}/directories/create_directories.yml"

- name: Create Docker container
ansible.builtin.include_tasks: "{{ resources_tasks_path }}/docker/create_docker_container.yml"
1 change: 1 addition & 0 deletions sandbox.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
- { role: komga, tags: ['komga'] }
- { role: krusader, tags: ['krusader'] }
- { role: lazylibrarian, tags: ['lazylibrarian'] }
- { role: lgsm, tags: ['lgsm'] }
- { role: linkding, tags: ['linkding'] }
- { role: logarr, tags: ['logarr'] }
- { role: lunasea, tags: ['lunasea'] }
Expand Down
Loading