From a82884ee15f5f5662fb16bed7349f3d8ca2533a9 Mon Sep 17 00:00:00 2001 From: meaz Date: Sat, 2 Sep 2023 05:55:02 +0000 Subject: [PATCH] Update how modules are deployed (#13) From last deployment, I discovered that you can not loop with `npm install --no-save --legacy-peer-deps ep_whatever` like we used to do, because it removes every other installed modules for some reason. So you have to do all at once like `npm install --no-save --legacy-peer-deps ep_whatever ep_whatever1 ep_whatever2 ep_whatever3`. This fixes this. Co-authored-by: meaz Reviewed-on: https://git.disroot.org/Disroot-Ansible/etherpad/pulls/13 Reviewed-by: muppeth --- defaults/main.yml | 57 +++++++------------ tasks/configure.yml | 2 + tasks/main.yml | 1 + tasks/modules.yml | 32 ++++------- .../var/www/etherpad-lite/settings.json.j2 | 22 +++---- 5 files changed, 44 insertions(+), 70 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 4ff4039..1545c42 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -56,43 +56,26 @@ etherpad_apt: - nodejs - git -etherpad_plugins: - - name: ep_adminpads2 - install: true - - name: ep_comments_page - install: true - - name: ep_desktop_notifications - install: true - - name: ep_font_color - install: true - - name: ep_headings2 - install: true - - name: ep_markdown - install: true - - name: ep_previewimages - install: true - - name: ep_spellcheck - install: true - - name: ep_real_time_chat - install: true - - name: ep_delete_after_delay - install: true - - name: ep_align - install: true - - name: ep_font_size - install: true - - name: ep_table_of_contents - install: true - - name: ep_author_follow - install: true - - name: ep_cursortrace - install: true - - name: ep_prompt_for_name - install: true - - name: ep_user_fontsize_version_2 - install: true - - name: ep_author_hover - install: true +etherpad_plugins_list: + ep_adminpads2: enabled + ep_comments_page: enabled + ep_desktop_notifications: enabled + ep_font_color: enabled + ep_headings2: enabled + ep_markdown: enabled + ep_previewimages: enabled + ep_spellcheck: enabled + ep_real_time_chat: enabled + ep_delete_after_delay: enabled + ep_align: enabled + ep_font_size: enabled + ep_table_of_contents: enabled + ep_author_follow: enabled + ep_cursortrace: enabled + ep_prompt_for_name: enabled + ep_user_fontsize_version_2: enabled + ep_author_hover: enabled + # ep_delete_after_delay # Etherpad-Lite plugin that deletes your pads after a configured delay delay: '7776000' # one day, in seconds Default is 86400 diff --git a/tasks/configure.yml b/tasks/configure.yml index f52eb70..563558a 100644 --- a/tasks/configure.yml +++ b/tasks/configure.yml @@ -7,6 +7,7 @@ owner: "{{ etherpad_username }}" group: "{{ etherpad_group }}" mode: 0755 + tags: configuration - name: '[CONFIGURE] - Deploy config' template: @@ -17,3 +18,4 @@ mode: 0644 notify: restart etherpad + tags: configuration diff --git a/tasks/main.yml b/tasks/main.yml index 89149aa..635aa20 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -11,6 +11,7 @@ - name: Deploy configuration include_tasks: configure.yml + tags: configuration - name: Install Modules include_tasks: modules.yml diff --git a/tasks/modules.yml b/tasks/modules.yml index 7a191f6..d987bb6 100644 --- a/tasks/modules.yml +++ b/tasks/modules.yml @@ -1,40 +1,28 @@ --- -#- name: '[Modules] - Install modules' -# npm: -# name: "{{ item.name }}" -# path: "{{ etherpad_app_dir }}/app" -# state: latest -# with_items: "{{ etherpad_plugins }}" -# become: yes -# become_user: "{{ etherpad_username }}" -# when: item.install|lower == 'true' -# notify: -# restart etherpad -# tags: modules - +# The following command get the etherpad_plugins_list dictionnary +# selects only the enabled plugins +# then uses filter to get all plugins names in one line, without comas or quotes as needed for npm - name: '[Modules] - Install modules' shell: - cmd: "npm install --no-save --legacy-peer-deps {{ item.name }}" + cmd: "npm install --no-save --legacy-peer-deps {{ etherpad_plugins_list| dict2items | selectattr('value', 'eq', 'enabled') | map(attribute='key') |join(',') | replace(\",\", \" \") }}" args: chdir: "{{ etherpad_app_dir }}/app" - with_items: "{{ etherpad_plugins }}" become: yes become_user: "{{ etherpad_username }}" - when: item.install|lower == 'true' + when: etherpad_plugins_list| dict2items | selectattr('value', 'eq', 'enabled') |length > 0 notify: restart etherpad tags: modules - name: '[Modules] - Uninstall modules' - npm: - name: "{{ item.name }}" - path: "{{ etherpad_app_dir }}/app" - state: absent - with_items: "{{ etherpad_plugins }}" + shell: + cmd: "npm uninstall {{ etherpad_plugins_list| dict2items | selectattr('value', 'eq', 'disabled') | map(attribute='key') |join(',') | replace(\",\", \" \") }}" + args: + chdir: "{{ etherpad_app_dir }}/app" become: yes become_user: "{{ etherpad_username }}" - when: item.install|lower == 'false' + when: etherpad_plugins_list| dict2items | selectattr('value', 'eq', 'disabled') |length > 0 notify: restart etherpad tags: modules \ No newline at end of file diff --git a/templates/var/www/etherpad-lite/settings.json.j2 b/templates/var/www/etherpad-lite/settings.json.j2 index af6c358..5159beb 100644 --- a/templates/var/www/etherpad-lite/settings.json.j2 +++ b/templates/var/www/etherpad-lite/settings.json.j2 @@ -532,20 +532,20 @@ */ }, - {% for item in etherpad_plugins %} - {% if item.name == 'ep_delete_after_delay' and item.install %} - /* This adds delete_after_delay config vars - */ - "ep_delete_after_delay": { - "delay": {{ delay }}, // one day, in seconds - "loop": {{ loopdeletion }}, - "loopDelay": {{ loopDelay }}, // one hour, in seconds - "deleteAtStart": {{ deleteAtStart }}, - "text": "{{ text }}" + {% for key, value in etherpad_plugins_list.items() %} + {% if key == "ep_delete_after_delay" and value == "enabled" %} + "ep_delete_after_delay": { + "delay": {{ delay }}, // one day, in seconds + "loop": {{ loopdeletion }}, + "loopDelay": {{ loopDelay }}, // one hour, in seconds + "deleteAtStart": {{ deleteAtStart }}, + "text": "{{ text }}" }, - {% endif %} + {% endif %} {% endfor %} + + /* * Restrict socket.io transport methods */