diff --git a/README.md b/README.md index 9df87fb..ac2052d 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,16 @@ Requirements Role Variables -------------- -| Variable | Description | Default | -| --------------------------- | ------------------------------------------------------------------------------- | ------------------ | -| docker_user | The user who is going to manage/run the Docker Compose services | deploy | -| collabora_virtual_host | The host under which CODE is available from the outside (e.g. collabora.example.org) | localhost | -| collabora_domain_regex_pattern | A regular expression to match hosts that should be allowed to access CODE | localhost | -| collabora_admin_user | Used to access to the Admin UI: https:///loleaflet/dist/admin/admin.html | | -| collabora_admin_password | | | +| Variable | Description | Default | +| --------------------------- | ------------------------------------------------------------------------------- | ------------------ | +| collabora_install_user | The user who is going to manage/run the Docker Compose services | {{ ansible_user }} | +| collabora_install_path | The location where the service should be deployed | /home/{{ collabora_install_user }} | +| collabora_multitenant_label | A label (unique accross all instances on this host) identifying the tenant | | +| collabora_virtual_host | The host under which CODE is available from the outside (e.g. collabora.example.org) | localhost | +| collabora_exposed_port | The port under which the Collabora instance is available | 9980 | +| collabora_domain_regex_pattern | A regular expression to match hosts that should be allowed to access CODE | localhost | +| collabora_admin_user | Used to access to the Admin UI: https:///loleaflet/dist/admin/admin.html | | +| collabora_admin_password | | | Dependencies ------------ diff --git a/defaults/main.yml b/defaults/main.yml index db7156e..68a7838 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,7 +1,11 @@ --- # defaults file for Collabora Online -docker_user: deploy +collabora_install_user: '{{ ansible_user }}' # This user must be present on the host +collabora_install_path: '/home/{{ collabora_install_user }}' +collabora_multitenant_label: collabora_exposed_port: 9980 collabora_virtual_host: localhost collabora_public_url: http://{{ collabora_virtual_host }} collabora_domain_regex_pattern: localhost +# Internal variables +collabora_multitenant_postfix: "{{ '_' + collabora_multitenant_label if (collabora_multitenant_label) else '' }}" diff --git a/tasks/main.yml b/tasks/main.yml index 4990153..e3c1664 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -2,23 +2,23 @@ # tasks file for Collabora Online - name: Ensure Collabora Online config directory exists file: - path: /home/{{ docker_user }}/collabora-online + path: "{{ collabora_install_path }}/collabora-online" state: directory - owner: '{{ docker_user }}' - group: '{{ docker_user }}' + owner: '{{ collabora_install_user }}' + group: '{{ collabora_install_user }}' tags: config - name: Provide docker-compose.yml template: src: templates/docker-compose.collabora-online.yml.j2 - dest: /home/{{ docker_user }}/collabora-online/docker-compose.yml - owner: "{{ docker_user }}" - group: "{{ docker_user }}" + dest: "{{ collabora_install_path }}/collabora-online/docker-compose.yml" + owner: "{{ collabora_install_user }}" + group: "{{ collabora_install_user }}" mode: '0644' tags: config - name: Output docker-compose.yml - shell: cat /home/{{ docker_user }}/collabora-online/docker-compose.yml + shell: cat {{ collabora_install_path }}/collabora-online/docker-compose.yml register: output tags: config @@ -28,21 +28,21 @@ - name: Provide Collabora env vars template: src: templates/env.collabora-online.j2 - dest: /home/{{ docker_user }}/collabora-online/.env - owner: "{{ docker_user }}" - group: "{{ docker_user }}" + dest: "{{ collabora_install_path }}/collabora-online/.env" + owner: "{{ collabora_install_user }}" + group: "{{ collabora_install_user }}" mode: '0640' tags: config - name: "docker-compose: Teardown existing Collabora service" docker_compose: - project_src: "/home/{{ docker_user }}/collabora-online/" + project_src: "{{ collabora_install_path }}/collabora-online/" state: absent tags: ['never', 'teardown'] - name: "docker-compose: Bootstrap Collabora service" docker_compose: - project_src: "/home/{{ docker_user }}/collabora-online/" + project_src: "{{ collabora_install_path }}/collabora-online/" register: output - debug: @@ -50,7 +50,7 @@ - assert: that: - - "output.ansible_facts['collabora']['collabora-online_collabora_1'].state.running" + - output['services']['collabora']['collabora-online_collabora_1'].state.running - name: "Test whether Collabora is healthy from the public internet" become: false diff --git a/templates/docker-compose.collabora-online.yml.j2 b/templates/docker-compose.collabora-online.yml.j2 index f63b7c0..4d15b41 100644 --- a/templates/docker-compose.collabora-online.yml.j2 +++ b/templates/docker-compose.collabora-online.yml.j2 @@ -3,10 +3,13 @@ version: '3' services: collabora: image: collabora/code + container_name: collabora{{ collabora_multitenant_postfix }} + hostname: collabora{{ collabora_multitenant_postfix }} restart: unless-stopped environment: - extra_params - domain + - aliasgroup1 {% if collabora_admin_user is defined and collabora_admin_password is defined %} - username - password @@ -15,11 +18,11 @@ services: labels: - "traefik.enable=true" - "traefik.docker.network=traefik_public" - - "traefik.http.routers.collabora.rule=Host(`{{ collabora_virtual_host }}`)" - - "traefik.port=9980" - - "traefik.http.routers.collabora.entrypoints=websecure" - - "traefik.http.routers.collabora.tls=true" - - "traefik.http.routers.collabora.tls.certresolver=defaultresolver" + - "traefik.http.routers.collabora{{ collabora_multitenant_postfix }}.rule=Host(`{{ collabora_virtual_host }}`)" + - "traefik.port={{ collabora_exposed_port }}" + - "traefik.http.routers.collabora{{ collabora_multitenant_postfix }}.entrypoints=websecure" + - "traefik.http.routers.collabora{{ collabora_multitenant_postfix }}.tls=true" + - "traefik.http.routers.collabora{{ collabora_multitenant_postfix }}.tls.certresolver=defaultresolver" networks: public: cap_add: diff --git a/templates/env.collabora-online.j2 b/templates/env.collabora-online.j2 index 8c4446d..07a4bc3 100644 --- a/templates/env.collabora-online.j2 +++ b/templates/env.collabora-online.j2 @@ -1,5 +1,6 @@ extra_params=--o:ssl.enable=false --o:ssl.termination=true domain={{collabora_domain_regex_pattern|replace('\\', '\\\\')}} +aliasgroup1={{ collabora_virtual_host }} {% if collabora_admin_user is defined and collabora_admin_password is defined %} username={{ collabora_admin_user }} password={{ collabora_admin_password }}