initial commit
This commit is contained in:
13
tasks/00-check-requirements.yml
Normal file
13
tasks/00-check-requirements.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
|
||||
- name: "Check Distribution"
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- "ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'"
|
||||
- "ansible_architecture == 'x86_64'"
|
||||
|
||||
- name: "Install packages"
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- "rsync"
|
||||
update_cache: "yes"
|
||||
15
tasks/00-get-latest-version.yml
Normal file
15
tasks/00-get-latest-version.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
|
||||
- name: "Get latest version (raw)"
|
||||
ansible.builtin.uri:
|
||||
url: "https://www.teamspeak.com/versions/server.json"
|
||||
method: GET
|
||||
return_content: yes
|
||||
status_code: 200
|
||||
body_format: json
|
||||
register: ts3_version_info
|
||||
|
||||
- name: "Extract relevant info from result"
|
||||
ansible.builtin.set_fact:
|
||||
ts3_version: "{{ ts3_version_info.json.linux.x86_64.version }}"
|
||||
ts3_download_mirror: "{{ ts3_version_info.json.linux.x86_64.mirrors | first }}"
|
||||
22
tasks/01-set-download-url.yml
Normal file
22
tasks/01-set-download-url.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
- name: "Set download url for latest version"
|
||||
ansible.builtin.set_fact:
|
||||
ts3_download_url: "{{ ts3_version_info['json']['linux']['x86_64']['mirrors'][ts3_download_mirror] }}"
|
||||
when:
|
||||
- "ts3_version is defined"
|
||||
- "ts3_version != 'latest'"
|
||||
- "ts3_download_mirror is defined"
|
||||
|
||||
- name: "Set download url if version was specified"
|
||||
ansible.builtin.set_fact:
|
||||
ts3_download_url: "https://files.teamspeak-services.com/releases/server/{{ ts3_version }}/teamspeak3-server_linux_amd64-{{ ts3_version }}.tar.bz2"
|
||||
when:
|
||||
- "ts3_version != 'latest'"
|
||||
- "ts3_download_url is undefined"
|
||||
|
||||
- name: "Assert gathered data is valid"
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- "ts3_version is defined"
|
||||
- "ts3_version != 'latest'"
|
||||
- "ts3_download_url is defined"
|
||||
21
tasks/02-get-installed-version.yml
Normal file
21
tasks/02-get-installed-version.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
|
||||
- name: "check if version file exists"
|
||||
ansible.builtin.stat:
|
||||
path: "{{ ts3_base_dir }}/installed-version.txt"
|
||||
register: ts3_installed_version_file
|
||||
|
||||
- name: "get installed version file"
|
||||
ansible.builtin.slurp:
|
||||
src: "{{ ts3_base_dir }}/installed-version.txt"
|
||||
when:
|
||||
- "ts3_installed_version_file.stat.exists"
|
||||
register: ts3_installed_version_raw
|
||||
|
||||
- name: "set installed version"
|
||||
ansible.builtin.set_fact:
|
||||
ts3_installed_version: "{{ ts3_installed_version_raw.content | b64decode }}"
|
||||
ts3_initial_installation: false
|
||||
when:
|
||||
- "ts3_installed_version_raw is defined"
|
||||
- "ts3_installed_version_file.stat.exists"
|
||||
7
tasks/10-user-setup.yml
Normal file
7
tasks/10-user-setup.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
|
||||
- name: "create system user"
|
||||
ansible.builtin.user:
|
||||
name: "{{ ts3_user }}"
|
||||
shell: "/bin/false"
|
||||
state: "present"
|
||||
17
tasks/11-setup-dirs.yml
Normal file
17
tasks/11-setup-dirs.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
- name: "Create directories"
|
||||
ansible.builtin.file:
|
||||
path: "{{ ts3_user_home_dir }}/{{ item }}"
|
||||
state: "directory"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
loop:
|
||||
- "temp"
|
||||
- "backup"
|
||||
- "teamspeak3-server_linux_amd64"
|
||||
|
||||
- name: "Create license accept file"
|
||||
ansible.builtin.file:
|
||||
path: "{{ ts3_base_dir }}/.ts3server_license_accepted"
|
||||
state: "touch"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
0
tasks/20-backup.yml
Normal file
0
tasks/20-backup.yml
Normal file
48
tasks/30-install-ts3.yml
Normal file
48
tasks/30-install-ts3.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
|
||||
- name: "Create service"
|
||||
ansible.builtin.template:
|
||||
src: "teamspeak3.service.j2"
|
||||
dest: "/etc/systemd/system/teamspeak3.service"
|
||||
notify:
|
||||
- "Reload systemd"
|
||||
|
||||
- name: "Stop service"
|
||||
ansible.builtin.systemd:
|
||||
name: "teamspeak3"
|
||||
state: "stopped"
|
||||
|
||||
|
||||
- name: "Download Archive for version {{ ts3_version }}"
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ ts3_download_url }}"
|
||||
dest: "{{ ts3_user_home_dir }}/temp/ts3-{{ ts3_version }}.tar.bz2"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
|
||||
- name: "Extract archive"
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ ts3_user_home_dir }}/temp/ts3-{{ ts3_version }}.tar.bz2"
|
||||
dest: "{{ ts3_user_home_dir }}/temp/"
|
||||
remote_src: "yes"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
mode: "0700"
|
||||
|
||||
- name: "Install files"
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ ts3_user_home_dir }}/temp/teamspeak3-server_linux_amd64/"
|
||||
dest: "{{ ts3_base_dir }}/"
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: "Register installed version"
|
||||
ansible.builtin.template:
|
||||
src: "installed-version.txt.j2"
|
||||
dest: "{{ ts3_base_dir }}/installed-version.txt"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
|
||||
- name: "Remove temporary files"
|
||||
ansible.builtin.file:
|
||||
path: "{{ ts3_user_home_dir }}/temp/teamspeak3-server_linux_amd64/"
|
||||
state: "absent"
|
||||
41
tasks/31-set-query-password.yml
Normal file
41
tasks/31-set-query-password.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
|
||||
- name: "check if installed-file"
|
||||
ansible.builtin.stat:
|
||||
path: "{{ ts3_base_dir }}/.ts3_installed"
|
||||
register: ts3_installed_file
|
||||
|
||||
- name: "Set query password"
|
||||
when:
|
||||
- "ts3_installed_file.stat.exists == false"
|
||||
block:
|
||||
- name: "Ensure parameter passing is enabled"
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ ts3_base_dir }}/ts3server_startscript.sh"
|
||||
regexp: '^COMMANDLINE_PARAMETERS='
|
||||
line: 'COMMANDLINE_PARAMETERS="$2"'
|
||||
|
||||
- name: "Generate password"
|
||||
ansible.builtin.set_fact:
|
||||
ts3_query_password: "{{ lookup('ansible.builtin.password', '/dev/null chars=digits,ascii_letters length=32') }}"
|
||||
|
||||
- name: "Run teamspeak with modified password"
|
||||
become: true
|
||||
become_user: "{{ ts3_user }}"
|
||||
shell:
|
||||
cmd: "/bin/bash ts3server_startscript.sh start serveradmin_password={{ ts3_query_password }}"
|
||||
chdir: "{{ ts3_base_dir }}"
|
||||
|
||||
- name: "Stop teamspeak"
|
||||
become: true
|
||||
become_user: "{{ ts3_user }}"
|
||||
shell:
|
||||
cmd: "/bin/bash ts3server_startscript.sh stop"
|
||||
chdir: "{{ ts3_base_dir }}"
|
||||
|
||||
- name: "write tatoo file"
|
||||
ansible.builtin.template:
|
||||
src: "installed-version.txt.j2"
|
||||
dest: "{{ ts3_base_dir }}/.ts3_installed"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
15
tasks/32-get-admin-token.yml
Normal file
15
tasks/32-get-admin-token.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
|
||||
- name: "Get Admin Token on first installation"
|
||||
when: "ts3_initial_installation"
|
||||
block:
|
||||
- name: "get file content"
|
||||
shell: "grep '|token=' {{ ts3_base_dir }}/logs/*.log"
|
||||
register: ts3_log_content
|
||||
|
||||
- name: "search for token"
|
||||
ansible.builtin.set_fact:
|
||||
ts3_admin_token: "{{ item | regex_search('.*\\|token=(.*)$', '\\1') | first }}"
|
||||
when:
|
||||
- "'|token=' in item"
|
||||
loop: "{{ ts3_log_content.stdout_lines }}"
|
||||
7
tasks/33-start-service.yml
Normal file
7
tasks/33-start-service.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
|
||||
- name: "Start service"
|
||||
ansible.builtin.systemd:
|
||||
name: "teamspeak3"
|
||||
state: "started"
|
||||
enabled: "yes"
|
||||
21
tasks/99-output.yml
Normal file
21
tasks/99-output.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
- name: "Write vars to file"
|
||||
ansible.builtin.template:
|
||||
src: "ts3_credentials.j2"
|
||||
dest: "{{ ts3_base_dir }}/.ts3_credentials"
|
||||
owner: "{{ ts3_user }}"
|
||||
group: "{{ ts3_user }}"
|
||||
mode: "0600"
|
||||
when:
|
||||
- "ts3_query_password is defined"
|
||||
- "ts3_admin_token is defined"
|
||||
|
||||
- name: "Print Query Password"
|
||||
debug:
|
||||
msg: "Query password: {{ ts3_query_password }}"
|
||||
when: "ts3_query_password is defined"
|
||||
|
||||
- name: "Print Admin Token"
|
||||
debug:
|
||||
msg: "Serveradmin Token: {{ ts3_admin_token }}"
|
||||
when: "ts3_admin_token is defined"
|
||||
44
tasks/main.yml
Normal file
44
tasks/main.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
- name: "Setup requirements"
|
||||
include_tasks: "00-check-requirements.yml"
|
||||
|
||||
- name: "run version tasks"
|
||||
include_tasks: "00-get-latest-version.yml"
|
||||
when:
|
||||
- "ts3_version == 'latest'"
|
||||
|
||||
- name: "Set download url"
|
||||
include_tasks: "01-set-download-url.yml"
|
||||
|
||||
- name: "Get info of installed instance"
|
||||
include_tasks: "02-get-installed-version.yml"
|
||||
|
||||
- name: "Setup system"
|
||||
include_tasks: "{{ tasks_file }}"
|
||||
loop_control:
|
||||
loop_var: "tasks_file"
|
||||
loop:
|
||||
- "10-user-setup.yml"
|
||||
- "11-setup-dirs.yml"
|
||||
|
||||
- debug:
|
||||
var: ts3_version
|
||||
- debug:
|
||||
var: ts3_installed_version
|
||||
|
||||
- name: "Install TS3 {{ ts3_version }}"
|
||||
include_tasks: "{{ tasks_file }}"
|
||||
loop_control:
|
||||
loop_var: "tasks_file"
|
||||
loop:
|
||||
- "30-install-ts3.yml"
|
||||
- "31-set-query-password.yml"
|
||||
- "32-get-admin-token.yml"
|
||||
when:
|
||||
- "ts3_installed_version is version(ts3_version, '<')"
|
||||
|
||||
- name: "Start Service"
|
||||
include_tasks: "33-start-service.yml"
|
||||
|
||||
- name: "Show output"
|
||||
include_tasks: "99-output.yml"
|
||||
Reference in New Issue
Block a user