diff --git a/roles/lgsm/defaults/main.yml b/roles/lgsm/defaults/main.yml new file mode 100644 index 0000000000..262d1cf2e7 --- /dev/null +++ b/roles/lgsm/defaults/main.yml @@ -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"] + +################################ +# 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 diff --git a/roles/lgsm/tasks/main.yml b/roles/lgsm/tasks/main.yml new file mode 100644 index 0000000000..b84091cf88 --- /dev/null +++ b/roles/lgsm/tasks/main.yml @@ -0,0 +1,32 @@ +######################################################################## +# 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. + +- 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" + diff --git a/roles/lgsm/tasks/main2.yml b/roles/lgsm/tasks/main2.yml new file mode 100644 index 0000000000..13d45a0ac0 --- /dev/null +++ b/roles/lgsm/tasks/main2.yml @@ -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" diff --git a/sandbox.yml b/sandbox.yml index aaf608fc92..ae364c03cf 100644 --- a/sandbox.yml +++ b/sandbox.yml @@ -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'] }