From cf4c5a3c2b4f5e5291c63498fdb0a2d7d16fd58d Mon Sep 17 00:00:00 2001
From: Thomas Schneider <thomas@fsmpi.rwth-aachen.de>
Date: Thu, 13 May 2021 17:22:56 +0200
Subject: [PATCH] hedgedoc: WIP

---
 hedgedoc/defaults/main.yml  |  16 +++++
 hedgedoc/handlers/main.yml  |  10 +++
 hedgedoc/tasks/main.yml     | 133 ++++++++++++++++++++++++++++++++++++
 hedgedoc/tasks/postgres.yml |  20 ++++++
 4 files changed, 179 insertions(+)
 create mode 100644 hedgedoc/defaults/main.yml
 create mode 100644 hedgedoc/handlers/main.yml
 create mode 100644 hedgedoc/tasks/main.yml
 create mode 100644 hedgedoc/tasks/postgres.yml

diff --git a/hedgedoc/defaults/main.yml b/hedgedoc/defaults/main.yml
new file mode 100644
index 0000000..160642c
--- /dev/null
+++ b/hedgedoc/defaults/main.yml
@@ -0,0 +1,16 @@
+---
+
+hedgedoc_data_root: /var/lib/hedgedoc
+hedgedoc_install_root: /opt/hedgedoc
+hedgedoc_version: "1.8.2"
+hedgedoc_db:
+  dialect: sqlite
+  storage: "{{ hedgedoc_data_root }}/db.sqlite"
+
+# hedgedoc_db:
+#   dialect: postgres
+#   host: /run/postgresql
+#   username: ""
+#   password: ""
+#   database: hedgedoc
+#   port: "5432"
diff --git a/hedgedoc/handlers/main.yml b/hedgedoc/handlers/main.yml
new file mode 100644
index 0000000..f3b4244
--- /dev/null
+++ b/hedgedoc/handlers/main.yml
@@ -0,0 +1,10 @@
+---
+
+- name: Reload systemd
+  systemd:
+    daemon_reload: true
+
+- name: Restart hedgedoc
+  systemd:
+    name: hedgedoc.service
+    state: restarted
diff --git a/hedgedoc/tasks/main.yml b/hedgedoc/tasks/main.yml
new file mode 100644
index 0000000..aafb0d4
--- /dev/null
+++ b/hedgedoc/tasks/main.yml
@@ -0,0 +1,133 @@
+---
+
+- name: Install required packages
+  apt:
+    name:
+      - nodejs
+      - yarnpkg
+      - npm
+
+- name: Create system group
+  group:
+    name: hedgedoc
+    system: true
+    state: present
+
+- name: Create system user
+  user:
+    name: hedgedoc
+    group: hedgedoc
+    system: true
+    home: "{{ hedgedoc_data_root }}"
+    shell: /usr/bin/nologin
+    state: present
+
+- import_tasks: postgres.yml
+  when: hedgedoc_db.dialect == "postgres"
+  tags:
+    - postgresql
+
+- name: Get installed version package.json
+  slurp:
+    src: "{{ hedgedoc_install_root }}/package.json"
+  register: installed_package_json
+  ignore_errors: true
+
+- name: Install config
+  template:
+    src: "{{ item }}.j2"
+    dest: "{{ hedgedoc_install_root }}/{{ item }}"
+  loop:
+    - config.json
+    - .sequelizerc
+  when:
+    - not installed_package_json.failed
+    - installed_package_json.content|b64decode|json_query('version')|trim ==
+      hedgedoc_version
+  notify:
+    - Restart hedgedoc
+
+- when: >-
+    installed_package_json.failed or
+    installed_package_json.content|b64decode|json_query('version')|trim !=
+    hedgedoc_version
+  block:
+    - name: Stop service for upgrade
+      systemd:
+        name: hedgedoc.service
+        state: stopped
+      # when this is the initial installation, the service does not exist yet
+      ignore_errors: true
+
+    - name: Create temporary directory
+      tempfile:
+        state: directory
+      register: tempdir
+
+    - name: Fetch and extract HedgeDoc
+      unarchive:
+        # yamllint disable-line rule:line-length
+        src: "https://github.com/hedgedoc/hedgedoc/releases/download/{{ hedgedoc_version }}/hedgedoc-{{ hedgedoc_version }}.tar.gz"
+        dest: "{{ tempdir.path }}"
+        remote_src: true
+
+    - name: Move HedgeDoc to target directory
+      copy:
+        src: "{{ tempdir.path }}/hedgedoc/"
+        dest: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}"
+        remote_src: true
+
+    - name: Install config
+      template:
+        src: "{{ item }}.j2"
+        dest: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}/{{ item }}"
+      loop:
+        - config.json
+        - .sequelizerc
+
+    - name: yarn install
+      command:
+        cmd: yarn install --production=true --pure-lockfile
+        chdir: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}"
+
+    - name: Get old install target
+      stat:
+        path: "{{ hedgedoc_install_root }}"
+      register: install_root
+
+    - name: Replace install root symlink
+      file:
+        src: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}"
+        dest: "{{ hedgedoc_install_root }}"
+        state: link
+        follow: false
+        force: true
+
+    - name: Install systemd service file
+      template:
+        src: hedgedoc.service.j2
+        dest: /etc/systemd/system/hedgedoc.service
+        owner: root
+        group: root
+        mode: "0644"
+      notify:
+        - Reload systemd
+
+    - meta: flush_handlers
+
+    - name: Enable and start service
+      systemd:
+        name: hedgedoc.service
+        state: started
+        enabled: true
+
+    - name: Remove old version
+      file:
+        path: "{{ install_root.stat.lnk_source }}"
+        state: absent
+      when: install_root.stat.islnk is defined and install_root.stat.islnk
+
+    - name: Remove temporary directory
+      file:
+        path: "{{ tempdir.path }}"
+        state: absent
diff --git a/hedgedoc/tasks/postgres.yml b/hedgedoc/tasks/postgres.yml
new file mode 100644
index 0000000..750701c
--- /dev/null
+++ b/hedgedoc/tasks/postgres.yml
@@ -0,0 +1,20 @@
+---
+
+- become: true
+  become_user: postgres
+  block:
+    - name: Create the postgres user
+      postgresql_user:
+        name: hedgedoc
+        state: present
+    - name: Create the database
+      postgresql_db:
+        name: "{{ hedgedoc_db.database }}"
+        owner: hedgedoc
+        state: present
+
+- name: Ensure postgres is running
+  service:
+    name: postgresql
+    state: started
+    enabled: true
-- 
GitLab