mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-11-21 04:26:39 +00:00
Compare commits
4 Commits
087175a3c7
...
6abf2629e0
| Author | SHA1 | Date | |
|---|---|---|---|
| 6abf2629e0 | |||
| 6a8e0f38d8 | |||
| ae618cbf19 | |||
| c835ca8f2c |
@@ -1,22 +1,53 @@
|
|||||||
|
- block:
|
||||||
|
- name: Include dependency 'sys-svc-webserver-core'
|
||||||
|
include_role:
|
||||||
|
name: sys-svc-webserver-core
|
||||||
|
when: run_once_sys_svc_webserver_core is not defined
|
||||||
|
- include_tasks: utils/run_once.yml
|
||||||
|
when: run_once_sys_front_inj_all is not defined
|
||||||
|
|
||||||
- name: Build inj_enabled
|
- name: Build inj_enabled
|
||||||
set_fact:
|
set_fact:
|
||||||
inj_enabled: "{{ applications | inj_enabled(application_id, SRV_WEB_INJ_COMP_FEATURES_ALL) }}"
|
inj_enabled: "{{ applications | inj_enabled(application_id, SRV_WEB_INJ_COMP_FEATURES_ALL) }}"
|
||||||
|
|
||||||
- name: "Load CDN Service for '{{ domain }}'"
|
- name: "Load CDN for '{{ domain }}'"
|
||||||
include_role:
|
include_role:
|
||||||
name: sys-svc-cdn
|
name: web-svc-cdn
|
||||||
public: true # Expose variables so that they can be used in all injection roles
|
public: false
|
||||||
|
when:
|
||||||
|
- application_id != 'web-svc-cdn'
|
||||||
|
- run_once_web_svc_cdn is not defined
|
||||||
|
|
||||||
- name: Reinitialize 'inj_enabled' for '{{ domain }}', after modification by CDN
|
- name: Load Logout for '{{ domain }}'
|
||||||
|
include_role:
|
||||||
|
name: web-svc-logout
|
||||||
|
public: false
|
||||||
|
when:
|
||||||
|
- run_once_web_svc_logout is not defined
|
||||||
|
- application_id != 'web-svc-logout'
|
||||||
|
- inj_enabled.logout
|
||||||
|
|
||||||
|
- name: Reinitialize 'inj_enabled' for '{{ domain }}', after loading the required webservices
|
||||||
set_fact:
|
set_fact:
|
||||||
inj_enabled: "{{ applications | inj_enabled(application_id, SRV_WEB_INJ_COMP_FEATURES_ALL) }}"
|
inj_enabled: "{{ applications | inj_enabled(application_id, SRV_WEB_INJ_COMP_FEATURES_ALL) }}"
|
||||||
inj_head_features: "{{ SRV_WEB_INJ_COMP_FEATURES_ALL | inj_features('head') }}"
|
inj_head_features: "{{ SRV_WEB_INJ_COMP_FEATURES_ALL | inj_features('head') }}"
|
||||||
inj_body_features: "{{ SRV_WEB_INJ_COMP_FEATURES_ALL | inj_features('body') }}"
|
inj_body_features: "{{ SRV_WEB_INJ_COMP_FEATURES_ALL | inj_features('body') }}"
|
||||||
|
|
||||||
|
- name: "Load CDN Service for '{{ domain }}'"
|
||||||
|
include_role:
|
||||||
|
name: sys-svc-cdn
|
||||||
|
public: true
|
||||||
|
|
||||||
|
- name: "Activate logout proxy for '{{ domain }}'"
|
||||||
|
include_role:
|
||||||
|
name: sys-front-inj-logout
|
||||||
|
public: true
|
||||||
|
when: inj_enabled.logout
|
||||||
|
|
||||||
- name: "Activate Desktop iFrame notifier for '{{ domain }}'"
|
- name: "Activate Desktop iFrame notifier for '{{ domain }}'"
|
||||||
include_role:
|
include_role:
|
||||||
name: sys-front-inj-desktop
|
name: sys-front-inj-desktop
|
||||||
public: true # Vars used in templates
|
public: true
|
||||||
when: inj_enabled.desktop
|
when: inj_enabled.desktop
|
||||||
|
|
||||||
- name: "Activate Corporate CSS for '{{ domain }}'"
|
- name: "Activate Corporate CSS for '{{ domain }}'"
|
||||||
@@ -33,17 +64,3 @@
|
|||||||
include_role:
|
include_role:
|
||||||
name: sys-front-inj-javascript
|
name: sys-front-inj-javascript
|
||||||
when: inj_enabled.javascript
|
when: inj_enabled.javascript
|
||||||
|
|
||||||
- name: "Activate logout proxy for '{{ domain }}'"
|
|
||||||
include_role:
|
|
||||||
name: sys-front-inj-logout
|
|
||||||
public: true # Vars used in templates
|
|
||||||
when: inj_enabled.logout
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- name: Include dependency 'sys-svc-webserver-core'
|
|
||||||
include_role:
|
|
||||||
name: sys-svc-webserver-core
|
|
||||||
when: run_once_sys_svc_webserver_core is not defined
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
when: run_once_sys_front_inj_all is not defined
|
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
- name: Include dependency 'sys-svc-webserver-core'
|
|
||||||
include_role:
|
|
||||||
name: sys-svc-webserver-core
|
|
||||||
when: run_once_sys_svc_webserver_core is not defined
|
|
||||||
|
|
||||||
- name: Generate color palette with colorscheme-generator
|
- name: Generate color palette with colorscheme-generator
|
||||||
set_fact:
|
set_fact:
|
||||||
color_palette: "{{ lookup('colorscheme', CSS_BASE_COLOR, count=CSS_COUNT, shades=CSS_SHADES) }}"
|
color_palette: "{{ lookup('colorscheme', CSS_BASE_COLOR, count=CSS_COUNT, shades=CSS_SHADES) }}"
|
||||||
@@ -19,3 +14,5 @@
|
|||||||
group: "{{ NGINX.USER }}"
|
group: "{{ NGINX.USER }}"
|
||||||
mode: '0644'
|
mode: '0644'
|
||||||
loop: "{{ CSS_FILES }}"
|
loop: "{{ CSS_FILES }}"
|
||||||
|
|
||||||
|
- include_tasks: utils/run_once.yml
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
- block:
|
- include_tasks: 01_core.yml
|
||||||
- include_tasks: 01_core.yml
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
when: run_once_sys_front_inj_css is not defined
|
when: run_once_sys_front_inj_css is not defined
|
||||||
|
|
||||||
- name: "Resolve optional app style.css source for '{{ application_id }}'"
|
- name: "Resolve optional app style.css source for '{{ application_id }}'"
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
{% for css_file in ['default.css','bootstrap.css'] %}
|
{% for css_file in ['default.css','bootstrap.css'] %}
|
||||||
<link rel="stylesheet" href="{{ [ cdn_urls.shared.css, css_file, lookup('local_mtime_qs', [__css_tpl_dir, css_file ~ '.j2'] | path_join)] | url_join }}">
|
<link rel="stylesheet" href="{{ [ cdn_urls.shared.css, css_file, lookup('local_mtime_qs', [__css_tpl_dir, css_file ~ '.j2'] | path_join)] | url_join }}">
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if app_style_present | bool %}
|
{% if app_style_present | default(false) | bool %}
|
||||||
<link rel="stylesheet" href="{{ [ cdn_urls.role.release.css, 'style.css', lookup('local_mtime_qs', app_style_src)] | url_join }}">
|
<link rel="stylesheet" href="{{ [ cdn_urls.role.release.css, 'style.css', lookup('local_mtime_qs', app_style_src)] | url_join }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
- block:
|
- block:
|
||||||
- name: Include dependency 'sys-svc-webserver-core'
|
|
||||||
include_role:
|
|
||||||
name: sys-svc-webserver-core
|
|
||||||
when: run_once_sys_svc_webserver_core is not defined
|
|
||||||
- include_tasks: 01_deploy.yml
|
- include_tasks: 01_deploy.yml
|
||||||
- include_tasks: utils/run_once.yml
|
- include_tasks: utils/run_once.yml
|
||||||
when: run_once_sys_front_inj_desktop is not defined
|
when: run_once_sys_front_inj_desktop is not defined
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
- block:
|
# run_once_sys_front_inj_javascript: deactivated
|
||||||
|
|
||||||
- name: Include dependency 'sys-svc-webserver-core'
|
|
||||||
include_role:
|
|
||||||
name: sys-svc-webserver-core
|
|
||||||
when: run_once_sys_svc_webserver_core is not defined
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
when: run_once_sys_front_inj_javascript is not defined
|
|
||||||
|
|
||||||
- name: "Load JavaScript code for '{{ application_id }}'"
|
- name: "Load JavaScript code for '{{ application_id }}'"
|
||||||
set_fact:
|
set_fact:
|
||||||
|
|||||||
@@ -1,9 +1,3 @@
|
|||||||
- name: Include dependency 'web-svc-logout'
|
|
||||||
include_role:
|
|
||||||
name: web-svc-logout
|
|
||||||
when:
|
|
||||||
- run_once_web_svc_logout is not defined
|
|
||||||
|
|
||||||
- name: "deploy the logout.js"
|
- name: "deploy the logout.js"
|
||||||
include_tasks: "02_deploy.yml"
|
include_tasks: "02_deploy.yml"
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
- name: Deploy logout.js
|
- name: Deploy logout.js
|
||||||
template:
|
copy:
|
||||||
src: logout.js.j2
|
src: logout.js
|
||||||
dest: "{{ INJ_LOGOUT_JS_DESTINATION }}"
|
dest: "{{ INJ_LOGOUT_JS_DESTINATION }}"
|
||||||
owner: "{{ NGINX.USER }}"
|
owner: "{{ NGINX.USER }}"
|
||||||
group: "{{ NGINX.USER }}"
|
group: "{{ NGINX.USER }}"
|
||||||
mode: '0644'
|
mode: '0644'
|
||||||
|
|
||||||
- name: Get stat for logout.js
|
- name: Get stat for logout.js
|
||||||
stat:
|
stat:
|
||||||
|
|||||||
@@ -5,10 +5,12 @@
|
|||||||
- name: "Load logout code for '{{ application_id }}'"
|
- name: "Load logout code for '{{ application_id }}'"
|
||||||
set_fact:
|
set_fact:
|
||||||
logout_code: "{{ lookup('template', 'logout_one_liner.js.j2') }}"
|
logout_code: "{{ lookup('template', 'logout_one_liner.js.j2') }}"
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
- name: "Collapse logout code into one-liner for '{{ application_id }}'"
|
- name: "Collapse logout code into one-liner for '{{ application_id }}'"
|
||||||
set_fact:
|
set_fact:
|
||||||
logout_code_one_liner: "{{ logout_code | to_one_liner }}"
|
logout_code_one_liner: "{{ logout_code | to_one_liner }}"
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
- name: "Append logout CSP hash for '{{ application_id }}'"
|
- name: "Append logout CSP hash for '{{ application_id }}'"
|
||||||
set_fact:
|
set_fact:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<script src="{{ cdn_urls.shared.js }}/{{ INJ_LOGOUT_JS_FILE_NAME }}{{ lookup('local_mtime_qs', [playbook_dir, 'roles', 'sys-front-inj-logout', 'templates', INJ_LOGOUT_JS_FILE_NAME ~ '.j2'] | path_join) }}"></script>
|
<script src="{{ cdn_urls.shared.js }}/{{ INJ_LOGOUT_JS_FILE_NAME }}{{ lookup('local_mtime_qs', [playbook_dir, 'roles', 'sys-front-inj-logout', 'files', INJ_LOGOUT_JS_FILE_NAME] | path_join) }}"></script>
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
- block:
|
# run_once_sys_front_inj_matomo: deactivated
|
||||||
- name: Include dependency 'sys-svc-webserver-core'
|
|
||||||
include_role:
|
|
||||||
name: sys-svc-webserver-core
|
|
||||||
when: run_once_sys_svc_webserver_core is not defined
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
when: run_once_sys_front_inj_matomo is not defined
|
|
||||||
|
|
||||||
- name: "Relevant variables for role: {{ role_path | basename }}"
|
- name: "Relevant variables for role: {{ role_path | basename }}"
|
||||||
debug:
|
debug:
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
- name: "Load CDN for '{{ domain }}'"
|
|
||||||
include_role:
|
|
||||||
name: web-svc-cdn
|
|
||||||
public: false
|
|
||||||
when:
|
|
||||||
- application_id != 'web-svc-cdn'
|
|
||||||
- run_once_web_svc_cdn is not defined
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# Only-once creations (shared root and vendor)
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
- name: Ensure shared root and vendor exist (run once)
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: directory
|
|
||||||
owner: "{{ NGINX.USER }}"
|
|
||||||
group: "{{ NGINX.USER }}"
|
|
||||||
mode: "0755"
|
|
||||||
loop: "{{ CDN_DIRS_GLOBAL }}"
|
|
||||||
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
@@ -1,6 +1,14 @@
|
|||||||
---
|
---
|
||||||
- block:
|
- block:
|
||||||
- include_tasks: 01_core.yml
|
- name: Ensure shared root and vendor exist (run once)
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ NGINX.USER }}"
|
||||||
|
group: "{{ NGINX.USER }}"
|
||||||
|
mode: "0755"
|
||||||
|
loop: "{{ CDN_DIRS_GLOBAL }}"
|
||||||
|
- include_tasks: utils/run_once.yml
|
||||||
when:
|
when:
|
||||||
- run_once_sys_svc_cdn is not defined
|
- run_once_sys_svc_cdn is not defined
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
- name: "load docker, proxy for '{{ application_id }}'"
|
- name: "load docker, proxy for '{{ application_id }}'"
|
||||||
include_role:
|
include_role:
|
||||||
name: sys-stk-full-stateless
|
name: sys-stk-full-stateless
|
||||||
|
vars:
|
||||||
|
docker_compose_flush_handlers: false
|
||||||
|
|
||||||
- name: "Check if host-specific config.yaml exists in {{ DESKTOP_CONFIG_INV_PATH }}"
|
- name: "Check if host-specific config.yaml exists in {{ DESKTOP_CONFIG_INV_PATH }}"
|
||||||
stat:
|
stat:
|
||||||
@@ -57,8 +59,16 @@
|
|||||||
notify: docker compose up
|
notify: docker compose up
|
||||||
when: not config_file.stat.exists
|
when: not config_file.stat.exists
|
||||||
|
|
||||||
- name: add docker-compose.yml
|
- name: "Flush docker compose handlers"
|
||||||
template:
|
meta: flush_handlers
|
||||||
src: docker-compose.yml.j2
|
|
||||||
dest: "{{ docker_compose.directories.instance }}docker-compose.yml"
|
- name: Wait for Desktop HTTP endpoint (required so all logos can be downloaded during initialization)
|
||||||
notify: docker compose up
|
uri:
|
||||||
|
url: "http://127.0.0.1:{{ http_port }}/"
|
||||||
|
status_code: 200
|
||||||
|
register: desktop_http
|
||||||
|
retries: 60
|
||||||
|
delay: 5
|
||||||
|
until: desktop_http.status == 200
|
||||||
|
|
||||||
|
- include_tasks: utils/run_once.yml
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
---
|
---
|
||||||
- block:
|
- include_tasks: 01_core.yml
|
||||||
- include_tasks: 01_core.yml
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
when: run_once_web_app_desktop is not defined
|
when: run_once_web_app_desktop is not defined
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# General
|
# General
|
||||||
application_id: "web-app-desktop"
|
application_id: "web-app-desktop"
|
||||||
|
http_port: "{{ ports.localhost.http[application_id] }}"
|
||||||
|
|
||||||
## Webserver
|
## Webserver
|
||||||
proxy_extra_configuration: "{{ lookup('template', 'nginx/sso.html.conf.j2') }}"
|
proxy_extra_configuration: "{{ lookup('template', 'nginx/sso.html.conf.j2') }}"
|
||||||
|
|||||||
@@ -7,3 +7,5 @@
|
|||||||
|
|
||||||
- name: "Setup '{{ application_id }}' network"
|
- name: "Setup '{{ application_id }}' network"
|
||||||
include_tasks: 04_network.yml
|
include_tasks: 04_network.yml
|
||||||
|
|
||||||
|
- include_tasks: utils/run_once.yml
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
---
|
---
|
||||||
- name: "Setup {{ application_id }}"
|
- name: "Setup {{ application_id }}"
|
||||||
|
include_tasks: 01_core.yml
|
||||||
when: run_once_web_app_discourse is not defined
|
when: run_once_web_app_discourse is not defined
|
||||||
block:
|
|
||||||
- include_tasks: 01_core.yml
|
|
||||||
- include_tasks: utils/run_once.yml
|
|
||||||
@@ -17,9 +17,13 @@ docker:
|
|||||||
database:
|
database:
|
||||||
enabled: false
|
enabled: false
|
||||||
collabora:
|
collabora:
|
||||||
image: collabora/code
|
image: collabora/code
|
||||||
version: latest
|
version: latest
|
||||||
name: collabora
|
name: collabora
|
||||||
|
cpus: 2
|
||||||
|
mem_reservation: 1g
|
||||||
|
mem_limit: 2g
|
||||||
|
pids_limit: 2048
|
||||||
features:
|
features:
|
||||||
logout: false
|
logout: false
|
||||||
desktop: true # Just set to allow the iframe to load it
|
desktop: true # Just set to allow the iframe to load it
|
||||||
|
|||||||
@@ -4,6 +4,15 @@
|
|||||||
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
||||||
image: "{{ COLLABORA_IMAGE }}:{{ COLLABORA_VERSION }}"
|
image: "{{ COLLABORA_IMAGE }}:{{ COLLABORA_VERSION }}"
|
||||||
container_name: {{ COLLABORA_CONTAINER }}
|
container_name: {{ COLLABORA_CONTAINER }}
|
||||||
|
security_opt:
|
||||||
|
- seccomp=unconfined
|
||||||
|
- apparmor=unconfined
|
||||||
|
cap_add:
|
||||||
|
- MKNOD
|
||||||
|
- SYS_CHROOT
|
||||||
|
- SETUID
|
||||||
|
- SETGID
|
||||||
|
- FOWNER
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
||||||
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
|
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
|
||||||
|
|||||||
Reference in New Issue
Block a user