diff options
| -rw-r--r-- | README.md | 57 | ||||
| -rw-r--r-- | defaults/main.yml | 21 | ||||
| -rw-r--r-- | tasks/config.yml | 20 | ||||
| -rw-r--r-- | tasks/install.yml | 69 | ||||
| -rw-r--r-- | tasks/main.yml | 78 | ||||
| -rw-r--r-- | templates/teamspeak3-server.service.j2 | 4 | ||||
| -rw-r--r-- | templates/ts3server.ini.j2 | 26 | 
7 files changed, 139 insertions, 136 deletions
@@ -21,37 +21,42 @@ Tested on Ubuntu 16.04.1.  Role Variables  -------------- -<tt>defaults/main.yml</tt>: +Available variables to set for the TeamSpeak 3 Server installation: -* <tt>teamspeak.user</tt>: User to run the teamspeak server. Defaults to "teamspeak". -* <tt>teamspeak.comment</tt>: User comment field. Defaults to "Teamspeak 3 user". -* <tt>teamspeak.home</tt>: Home directory for the teamspeak user. Will also be used to install the teamspeak server in. Defaults to "/opt/teamspeak". -* <tt>teamspeak.shell</tt>: Shell for the teamspeak user. Defaults to "/usr/sbin/nologin". -* <tt>teamspeak.symlink</tt>: Name of symlink to point to current TeamSpeak 3 server directory. Defaults to "current". -* <tt>teamspeak.version</tt>: Version of Teamspeak 3 Server to install. Defaults to "3.0.12.4". -* <tt>teamspeak.checksum</tt>: SHA256 checksum of archive of TeamSpeak 3 server version for verification purposes. Example: "sha256:6bb0e8c8974fa5739b90e1806687128342b3ab36510944f576942e67df7a1bd9" -* <tt>teamspeak.keep</tt>: Amount of TeamSpeak 3 server versions to keep installed, includes current version. A setting of "2" keeps the current and one previous version installed. -* <tt>teamspeak.ini_file</tt>: Set the teamspeak ini file. If not set it will not generate.  +* `teamspeak.user`: User to run the teamspeak server. Defaults to "teamspeak". +* `teamspeak.comment`: User comment field. Defaults to "Teamspeak 3 user". +* `teamspeak.home`: Home directory for the teamspeak user. Will also be used to install the teamspeak server in. Defaults to "/opt/teamspeak". +* `teamspeak.shell`: Shell for the teamspeak user. Defaults to "/usr/sbin/nologin". +* `teamspeak.symlink`: Name of symlink to point to current TeamSpeak 3 server directory. Defaults to "current". +* `teamspeak.version`: Version of Teamspeak 3 Server to install. Defaults to "3.0.12.4". +* `teamspeak.checksum`: SHA256 checksum of archive of TeamSpeak 3 server version for verification purposes. Example: "sha256:6bb0e8c8974fa5739b90e1806687128342b3ab36510944f576942e67df7a1bd9" +* `teamspeak.keep`: Amount of TeamSpeak 3 server versions to keep installed, includes current version. A setting of "2" keeps the current and one previous version installed, which is the default. -* <tt>teamspeak_ini.machine_id</tt>: Teamspeak server machine ID, used for multiple instances on the save database. -* <tt>teamspeak.voice</tt>: Properties of the voice server -* <tt>teamspeak.voice.ip</tt>: Voice server bind IP -* <tt>teamspeak.voice.create_default</tt>: Let teamspeak3 server on first start create default server (TODO #7) -* <tt>teamspeak.voice.default_port</tt>: Default voice server port (TODO #7) -* <tt>teamspeak.filetransfer</tt>: Properties of the file transfer server -* <tt>teamspeak.filetransfer.ip</tt>: File transfer server bind IP -* <tt>teamspeak.filetransfer.port</tt>: File transfer server listen port -* <tt>teamspeak.query</tt>: Properties of the server query -* <tt>teamspeak.query.ip</tt>: Server query bind IP -* <tt>teamspeak.query.port</tt>: Server query listen port -* <tt>teamspeak.db_plugin</tt>: Teamspeak database system (TODO #4)  -* <tt>teamspeak.logpath</tt>: Teamspeak logpath. Must be absolute  -* <tt>teamspeak.logquerycommand</tt>: Teamspeak log all query command +If you need further configuration a INI file can be created for you. In such a case you should override the `teamspeak_ini_enabled` to `yes`. For example by defining it that way in host or group vars in your playbook. +* `teamspeak_ini_enabled`: Set to `yes` if you want use the configuration options listed below. It will create INI-style configuration file for the TeamSpeak 3 Server to use. Defaults to `no`. +* `teamspeak_ini_filename`: Name of the INI-style configuration file. Defaults to `ts3server.ini`. -<tt>vars/{debian,redhat}.yml</tt>: +The following configuration blocks can be used to configure the TeamSpeak 3 Server as you please. Make sure to override the complete blocks in full as they contain nested properties. Most reliable way is to copy a block from the `defaults/main.yml` into your own definitions file and edit accordingly. -* <tt>systemd_service_file_path</tt>: Path where Systemd service files are installed. +* `teamspeak_network.voice`: Contains nested properties of the voice server.  +* `teamspeak_network.voice.default_port`: UDP port for voice clients to connect to. Default at UDP port 9987. +* `teamspeak_network.voice.ip`: IP address to listen on for incoming voice connections. Default at 0.0.0.0, which binds any IP address. +* `teamspeak_network.filetransfer`: Contains nested properties of the file transfer server. +* `teamspeak_network.filetransfer.port`: TCP port to use for file transfers. Default at TCP port 30033. +* `teamspeak_network.filetransfer.ip`: IP address where file transfers are bound to. Default to 0.0.0.0, which binds any IP address. +* `teamspeak_network.query`: Contains nested properties for the ServerQueries part of the server. +* `teamspeak_network.query.port`: TCP port used for ServerQuery connections. Default at TCP port 10011. +* `teamspeak_network.query.ip`: IP address where to listen for inbound ServerQuery connections. Default at 0.0.0.0, which binds any IP address. + +Other TeamSpeak 3 Server options: + +* `teamspeak_ini_machine_id`: Teamspeak server machine ID. Used for running provide multiple instances on the same database with a unique ID. Default is empty. +* `teamspeak_create_default_virtualserver`: Defaults to `yes`. Normally one virtual server is created automatically when the TeamSpeak 3 Server process is started. If you set this to `no` a virtual server will not be started upon startup and you would have to start one manually using the ServerQuery interface.  + +Variables that differ across different Linux distributions have been set in `vars/{debian,redhat}.yml`: + +* `systemd_service_file_path`: Path where Systemd service files are installed.  Dependencies  ------------ diff --git a/defaults/main.yml b/defaults/main.yml index ca9739a..a4ff7e4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -10,21 +10,20 @@ teamspeak:    version: "3.0.12.4"    checksum: "sha256:6bb0e8c8974fa5739b90e1806687128342b3ab36510944f576942e67df7a1bd9"    keep: 2 -  ini_file: ts3server.ini -teamspeak_ini: -  disabled: true -  machine_id: "" +teamspeak_ini_enabled: no +teamspeak_ini_filename: ts3server.ini + +teamspeak_network:    voice: -    ip: 0.0.0.0 -    create_default: true       default_port: 9987 +    ip: 0.0.0.0    filetransfer: +    port: 30033       ip: 0.0.0.0 -    port: 10011     query: +    port: 10011      ip: 0.0.0.0 -    port: 33003 -  db_plugin: ts3db_sqlite3 -  logpath: /var/log/teamspeak3-server -  logquerycommands: false + +teamspeak_machine_id: +teamspeak_create_default_virtualserver: yes diff --git a/tasks/config.yml b/tasks/config.yml index 11e57ff..3e9f003 100644 --- a/tasks/config.yml +++ b/tasks/config.yml @@ -1,23 +1,15 @@  --- -# Config files and actions for teamspeak3 server -- name: Short facts +# configuration tasks for teamspeak +- name: Set TeamSpeak 3 Server directory fact    set_fact:      ts3server_dir: "{{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64" -- name: Create ts3server.ini  +- name: Create TeamSpeak 3 Server configuration file    template:      src: ts3server.ini.j2  -    dest: "{{ ts3server_dir }}/ts3server.ini" +    dest: "{{ ts3server_dir }}/{{ teamspeak_ini_filename }}"      mode: 0644      owner: "{{ teamspeak.user }}"      group: "{{ teamspeak.user }}" -  register: ts3server_ini - -- name: Create teamspeak 3 server logs folder  -  file:  -    path: "{{ teamspeak_ini.logpath }}" -    state: directory -    mode: 0755 -    owner: "{{ teamspeak.user }}" -    group: "{{ teamspeak.user }}" - +  notify: +    - Restart TeamSpeak 3 Server diff --git a/tasks/install.yml b/tasks/install.yml new file mode 100644 index 0000000..98d7253 --- /dev/null +++ b/tasks/install.yml @@ -0,0 +1,69 @@ +--- +# install tasks file for teamspeak + +# Start of installation +- name: Create Teamspeak user +  user: +    name: "{{ teamspeak.user }}" +    comment: "{{ teamspeak.comment }}" +    home: "{{ teamspeak.home }}" +    shell: "{{ teamspeak.shell }}" +    system: yes + +- name: Download TeamSpeak {{ teamspeak.version }} Server files +  get_url: +    url: "http://dl.4players.de/ts/releases/{{ teamspeak.version }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}.tar.bz2" +    dest: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}.tar.bz2" +    checksum: "{{ teamspeak.checksum }}" +    owner: "{{ teamspeak.user }}" +    group: "{{ teamspeak.user }}" + +- name: Create TeamSpeak {{ teamspeak.version }} Server directory +  file: +    path: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}" +    state: directory +    owner: "{{ teamspeak.user }}" +    group: "{{ teamspeak.user }}" +  register: mkdir + +# If a new directory has been created, check for (current) user data. +- name: Checking for a currently installed TeamSpeak 3 Server with user data +  stat: +    path: "{{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64/files" +  register: userdata +  when: mkdir.changed + +# If user data has been found, this is an upgrade situation. +- include: ts3update.yml +  when: userdata.stat.exists is defined and userdata.stat.exists == True + +# Created a new directory? Extract the files into it. Overwrites existing. +- name: Extract TeamSpeak {{ teamspeak.version }} Server files +  unarchive: +    copy: no +    src: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}.tar.bz2" +    dest: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}/" +    owner: "{{ teamspeak.user }}" +    group: "{{ teamspeak.user }}" +  when: mkdir.changed + +- name: Create/Update symlink to TeamSpeak {{ teamspeak.version }} Server +  file: +    src: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}" +    dest: "{{ teamspeak.home }}/{{ teamspeak.symlink }}" +    state: link +    owner: "{{ teamspeak.user }}" +    group: "{{ teamspeak.user }}" +  notify: +    - Restart TeamSpeak 3 Server + +- name: Install TeamSpeak 3 systemctl service file +  template: +    src: teamspeak3-server.service.j2 +    dest: "{{ systemd_service_file_path }}/teamspeak3-server.service" +    mode: 0644 +    owner: root +    group: root +  notify: +    - Reload systemd + diff --git a/tasks/main.yml b/tasks/main.yml index 4d93664..1b171df 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -12,79 +12,19 @@        paths:           - ../vars -- name: Create Teamspeak user -  user: -    name: "{{ teamspeak.user }}" -    comment: "{{ teamspeak.comment }}" -    home: "{{ teamspeak.home }}" -    shell: "{{ teamspeak.shell }}" -    system: yes - -- name: Download TeamSpeak {{ teamspeak.version }} server files -  get_url: -    url: "http://dl.4players.de/ts/releases/{{ teamspeak.version }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}.tar.bz2" -    dest: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}.tar.bz2" -    checksum: "{{ teamspeak.checksum }}" -    owner: "{{ teamspeak.user }}" -    group: "{{ teamspeak.user }}" - -- name: Create TeamSpeak {{ teamspeak.version }} server directory -  file: -    path: "{{ teamspeak.home}}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}" -    state: directory -    owner: "{{ teamspeak.user }}" -    group: "{{ teamspeak.user }}" -  register: mkdir - -# If a new directory has been created, check for (current) user data. -- name: Checking for a currently installed TeamSpeak 3 server with user data -  stat: -    path: "{{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64/files" -  register: userdata -  when: mkdir.changed - -# If user data has been found, this is an upgrade situation. -- include: ts3update.yml -  when: userdata.stat.exists is defined and userdata.stat.exists == True - -# Created a new directory? Extract the files into it. Overwrites existing. -- name: Extract TeamSpeak {{ teamspeak.version }} server files -  unarchive: -    copy: no -    src: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}.tar.bz2" -    dest: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}/" -    owner: "{{ teamspeak.user }}" -    group: "{{ teamspeak.user }}" -  when: mkdir.changed - -- name: Create/Update symlink to TeamSpeak {{ teamspeak.version }} server -  file: -    src: "{{ teamspeak.home }}/teamspeak3-server_linux_amd64-{{ teamspeak.version }}" -    dest: "{{ teamspeak.home }}/{{ teamspeak.symlink }}" -    state: link -    owner: "{{ teamspeak.user }}" -    group: "{{ teamspeak.user }}" -  notify: -    - Restart TeamSpeak 3 Server +# Installation of TeamSpeak 3 Server  +- include: install.yml +# Configuration of TeamSpeak 3 Server (if requested)  - include: config.yml -  when: teamspeak_ini is defined or teamspeak.ini_file is none and teamspeak_ini.disable is false  +  when: teamspeak_ini_enabled -- name: Install TeamSpeak 3 systemctl service file -  template: -    src: teamspeak3-server.service.j2 -    dest: "{{ systemd_service_file_path }}/teamspeak3-server.service" -    mode: 0644 -    owner: root -    group: root -  notify: -    - Reload systemd - -# Perform the "Reload systemd" (and possibly queued clean-up) handler now. -# Before we start using the new/changed .service file. +# Perform the running of handlers now +# So we can do "Reload systemd" (and possibly queued clean-up)  +# before we start using the new/changed .service file.  - meta: flush_handlers - -- name: Enable and start TeamSpeak 3 server +# Make sure TeamSpeak 3 Server is started and enabled +- name: Enable and start TeamSpeak 3 Server    service:      name: teamspeak3-server      state: started diff --git a/templates/teamspeak3-server.service.j2 b/templates/teamspeak3-server.service.j2 index 03a8be3..485084e 100644 --- a/templates/teamspeak3-server.service.j2 +++ b/templates/teamspeak3-server.service.j2 @@ -7,8 +7,8 @@ Type=simple  User={{ teamspeak.user }}  Group={{ teamspeak.user }}  WorkingDirectory={{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64 -{% if teamspeak.ini_file is not none %} -ExecStart={{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64/ts3server_minimal_runscript.sh inifile={{ teamspeak.ini_file }} +{% if teamspeak_ini_enabled %} +ExecStart={{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64/ts3server_minimal_runscript.sh inifile={{ teamspeak_ini_filename }}  {% else %}  ExecStart={{ teamspeak.home }}/{{ teamspeak.symlink }}/teamspeak3-server_linux_amd64/ts3server_minimal_runscript.sh  {% endif %} diff --git a/templates/ts3server.ini.j2 b/templates/ts3server.ini.j2 index ee6d6f3..6c3f341 100644 --- a/templates/ts3server.ini.j2 +++ b/templates/ts3server.ini.j2 @@ -1,17 +1,15 @@ -machine_id={{ teamspeak_ini.machine_id }} +{% if teamspeak_machine_id is not none %} +machine_id={{ teamspeak_machine_id }} +{% endif %} -default_voice_port={{teamspeak_ini.voice.default_port}} -voice_ip={{teamspeak_ini.voice.ip}} +default_voice_port={{ teamspeak_network.voice.default_port }} +voice_ip={{ teamspeak_network.voice.ip }} +filetransfer_port={{ teamspeak_network.filetransfer.port }} +filetransfer_ip={{ teamspeak_network.filetransfer.ip }} +query_port={{ teamspeak_network.query.port }} +query_ip={{ teamspeak_network.query.ip }} -query_port={{teamspeak_ini.query.port}} -query_ip={{teamspeak_ini.query.ip}} +{% if teamspeak_create_default_virtualserver %} +create_default_virtualserver=1 +{% endif %} -filetransfer_port={{teamspeak_ini.filetransfer.port}} -filetransfer_ip={{teamspeak_ini.filetransfer.ip}} - -dbplugin={{ teamspeak_ini.db_plugin }} -dbpluginparameter={{ 'ts3db_mysql.ini' if teamspeak_ini.db_plugin == 'ts3db_mysql' else ''  }} -dbsqlpath=sql/ -dbsqlcreatepath={{ 'create_mysql/' if teamspeak_ini.db_plugin == 'ts3db_mysql' else 'create_sqlite/'  }} -logpath={{ teamspeak_ini.logpath }} -logquerycommands={{ teamspeak_ini.logquerycommands }}  | 
