From 03f83ef7fd69336c7735202bd36e9b5955c0cc9c Mon Sep 17 00:00:00 2001 From: Tobias Reisinger Date: Sat, 16 Dec 2023 05:06:10 +0100 Subject: [PATCH] Add teamspeak-fallback service --- node002.yml | 2 ++ .../files/docker-compose.yml | 19 ++++++++++ roles/teamspeak_fallback/tasks/main.yml | 36 +++++++++++++++++++ .../templates/conditional-start.sh.j2 | 18 ++++++++++ .../templates/teamspeak-fallback.service.j2 | 13 +++++++ roles/teamspeak_fallback/vars/main.yml | 6 ++++ 6 files changed, 94 insertions(+) create mode 100644 roles/teamspeak_fallback/files/docker-compose.yml create mode 100644 roles/teamspeak_fallback/tasks/main.yml create mode 100644 roles/teamspeak_fallback/templates/conditional-start.sh.j2 create mode 100644 roles/teamspeak_fallback/templates/teamspeak-fallback.service.j2 create mode 100644 roles/teamspeak_fallback/vars/main.yml diff --git a/node002.yml b/node002.yml index b607ac7..6d4ddc3 100644 --- a/node002.yml +++ b/node002.yml @@ -44,6 +44,8 @@ tags: [synapse, matrix, communication] - role: tandoor tags: [tandoor, recipes] + - role: teamspeak_fallback + tags: [teamspeak-fallback, communication] - role: telegraf tags: [telegraf, monitoring] - role: tinytinyrss diff --git a/roles/teamspeak_fallback/files/docker-compose.yml b/roles/teamspeak_fallback/files/docker-compose.yml new file mode 100644 index 0000000..32ff3d2 --- /dev/null +++ b/roles/teamspeak_fallback/files/docker-compose.yml @@ -0,0 +1,19 @@ +services: + teamspeak: + image: teamspeak + restart: always + ports: + - 9987:9987/udp + - 10011:10011 + - 30033:30033 + environment: + TS3SERVER_DB_PLUGIN: ts3db_sqlite3 + TS3SERVER_DB_SQLCREATEPATH: create_sqlite + TS3SERVER_LICENSE: accept + volumes: + - data:/var/ts3server/ + +volumes: + data: + external: true + name: teamspeak-fallback-data diff --git a/roles/teamspeak_fallback/tasks/main.yml b/roles/teamspeak_fallback/tasks/main.yml new file mode 100644 index 0000000..9aae8c9 --- /dev/null +++ b/roles/teamspeak_fallback/tasks/main.yml @@ -0,0 +1,36 @@ +--- +- name: Set common facts + ansible.builtin.import_tasks: tasks/set-default-facts.yml + +- name: Deploy {{ svc.name }} + vars: + svc: "{{ teamspeak_fallback_svc }}" + block: + - name: Import tasks to create service directory + ansible.builtin.import_tasks: tasks/steps/create-service-directory.yml + + - name: Copy the docker-compose file + ansible.builtin.copy: + src: docker-compose.yml + dest: "{{ (service_path, 'docker-compose.yml') | path_join }}" + mode: "0644" + + - name: Template the conditional-start script + ansible.builtin.template: + src: conditional-start.sh.j2 + dest: "{{ (service_path, 'conditional-start.sh') | path_join }}" + mode: "0755" + + - name: Copy the system service + ansible.builtin.template: + src: teamspeak-fallback.service.j2 + dest: /etc/systemd/system/teamspeak-fallback.service + mode: "0644" + become: true + - name: Enable the system service + ansible.builtin.systemd_service: + name: teamspeak-fallback.service + state: started + enabled: true + daemon_reload: true + become: true diff --git a/roles/teamspeak_fallback/templates/conditional-start.sh.j2 b/roles/teamspeak_fallback/templates/conditional-start.sh.j2 new file mode 100644 index 0000000..f0ac6a6 --- /dev/null +++ b/roles/teamspeak_fallback/templates/conditional-start.sh.j2 @@ -0,0 +1,18 @@ +#!/usr/bin/env sh + +while true +do + if nc -z "{{ teamspeak_fallback_check_server }}" "{{ teamspeak_fallback_check_port }}" + then + if docker compose ps --services | grep teamspeak >/dev/null; then + echo "Stopping Server" + docker compose down + fi + else + if ! docker compose ps --services | grep teamspeak >/dev/null; then + echo "Starting Server" + docker compose up -d --pull=always + fi + fi + sleep 5 +done diff --git a/roles/teamspeak_fallback/templates/teamspeak-fallback.service.j2 b/roles/teamspeak_fallback/templates/teamspeak-fallback.service.j2 new file mode 100644 index 0000000..6420535 --- /dev/null +++ b/roles/teamspeak_fallback/templates/teamspeak-fallback.service.j2 @@ -0,0 +1,13 @@ +[Service] +[Unit] +Description=Teamspeak Fallback Starter +After=network.target + +[Service] +Type=simple +ExecStart={{ service_path }}/conditional-start.sh +WorkingDirectory={{ service_path }} +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/roles/teamspeak_fallback/vars/main.yml b/roles/teamspeak_fallback/vars/main.yml new file mode 100644 index 0000000..154cf00 --- /dev/null +++ b/roles/teamspeak_fallback/vars/main.yml @@ -0,0 +1,6 @@ +--- +teamspeak_fallback_check_server: ts.sneiso.eu +teamspeak_fallback_check_port: 30033 + +teamspeak_fallback_svc: + name: teamspeak-fallback