From 188ed74cc909bae0cbdcad128e4c807b1497c81c Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Tue, 24 Dec 2019 09:34:22 +0100
Subject: [PATCH] Add support for files root not being outside Drupal root,
 mainly required for D7 sites

---
 tasks/files.yml       |  7 +++++--
 tasks/files_mount.yml |  2 +-
 tasks/install.yml     | 39 +++++++++++++++++++++++++--------------
 3 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/tasks/files.yml b/tasks/files.yml
index 36c39cf..44446ee 100644
--- a/tasks/files.yml
+++ b/tasks/files.yml
@@ -5,7 +5,7 @@
 
     - name: Set facts
       set_fact:
-        dir: '{{ webRoot }}/files/{{ drupal_domain.0.shortname|default("default") }}/{{ drupal_domain.1 }}'
+        dir: '{{ filesRoot }}/{{ drupal_domain.0.shortname|default("default") }}/{{ drupal_domain.1 }}'
         src: '{{ relativeRoot }}/files/{{ drupal_domain.0.shortname|default("default") }}/{{ drupal_domain.1 }}'
         dest: '{{ drupalRoot }}/sites/{{ drupal_domain.0.shortname|default("default") }}/{{ drupal_domain.1 }}'
 
@@ -20,15 +20,17 @@
         group: '{{ apacheUser }}'
         mode: 0755
       ignore_errors: yes
+      when: drupal.files_outside_root|default(true)
 
     - name: Check the status of the File Directory
       stat:
         path: '{{ dest }}'
       register: directory
+      when: drupal.files_outside_root|default(true)
 
     - name: Move existing File Directory
       shell: rm -rf {{ dir }} && mv {{ dest }} {{ dir }}
-      when: directory.stat.exists and directory.stat.isdir
+      when: drupal.files_outside_root|default(true) and directory.stat.exists and directory.stat.isdir
 
     - name: Link Site Directory to File Directory
       file:
@@ -38,6 +40,7 @@
         owner: '{{ apacheUser }}'
         group: '{{ apacheUser }}'
         mode: 0755
+      when: drupal.files_outside_root|default(true)
 
     - name: Ensure .htaccess
       template:
diff --git a/tasks/files_mount.yml b/tasks/files_mount.yml
index aefaed2..bf8f236 100644
--- a/tasks/files_mount.yml
+++ b/tasks/files_mount.yml
@@ -14,7 +14,7 @@
     - name: Link webroot to mounted directory
       file:
         src: '{{ drupal_domain.0.mountpoint }}/{{ drupal.id }}/{{ drupal_domain.0.shortname|default("default") }}'
-        dest: '{{ webRoot }}/files/{{ drupal_domain.0.shortname|default("default") }}'
+        dest: '{{ filesRoot }}/{{ drupal_domain.0.shortname|default("default") }}'
         state: link
         owner: '{{ apacheUser }}'
         group: '{{ apacheUser }}'
diff --git a/tasks/install.yml b/tasks/install.yml
index b75c810..f894b2c 100644
--- a/tasks/install.yml
+++ b/tasks/install.yml
@@ -26,6 +26,17 @@
         relativeRoot: '{{ drupal.relativeRoot|default(drupal_links_relative_root) }}'
         drupalRoot: '{{ webRoot }}{{ drupal.root|default("") }}'
         docRoot: '{{ webRoot }}{{ drupal.docroot|default(drupal.root|default("")) }}'
+    - name: Set files facts
+      set_fact:
+        configRoot: '{{ webRoot }}/config'
+        filesRoot: '{{ webRoot }}/files'
+        settingsRoot: '{{ webRoot }}/settings'
+    - name: Set files facts when files not outside root
+      set_fact:
+        configRoot: '{{ drupalRoot }}/sites'
+        filesRoot: '{{ drupalRoot }}/sites'
+        settingsRoot: '{{ drupalRoot }}/sites'
+      when: not drupal.files_outside_root|default(true)
   tags:
     - always
 
@@ -143,7 +154,7 @@
 
 - name: Ensure Files Directory
   file:
-    path: '{{ webRoot }}/files'
+    path: '{{ filesRoot }}'
     state: directory
     owner: '{{ apacheUser }}'
     group: '{{ apacheUser }}'
@@ -180,7 +191,7 @@
 - name: Create the settings.php files
   template:
     src: '{{ drupal.template_dir|default("") }}{{ drupal.version|default("d7") }}_settings.php.jinja2'
-    dest: '{{ webRoot }}/settings/{{ item.shortname|default("default") }}/settings.php'
+    dest: '{{ settingsRoot }}/{{ item.shortname|default("default") }}/settings.php'
     backup: yes
   with_items: '{{ drupal.domains }}'
   tags:
@@ -190,7 +201,7 @@
 
 - name: Add deploy info to settings.local.php files
   lineinfile:
-    path: '{{ webRoot }}/settings/{{ item.0.shortname|default("default") }}/settings.local.php'
+    path: '{{ settingsRoot }}/{{ item.0.shortname|default("default") }}/settings.local.php'
     create: yes
     regex: '{{ item.1.regex }}'
     line: '{{ item.1.line }}'
@@ -219,14 +230,14 @@
     state: link
     force: yes
   with_items: '{{ drupal.domains }}'
-  when: item.install|default(true)
+  when: drupal.files_outside_root|default(true) and item.install|default(true)
 
 - block:
 
     - name: Create the drush.yml files
       template:
         src: drush-9.yml.jinja2
-        dest: '{{ webRoot }}/settings/{{ item.shortname|default("default") }}/drush.yml'
+        dest: '{{ settingsRoot }}/{{ item.shortname|default("default") }}/drush.yml'
       with_items: '{{ drupal.domains }}'
       when: item.install|default(true)
 
@@ -237,7 +248,7 @@
         state: link
         force: yes
       with_items: '{{ drupal.domains }}'
-      when: item.install|default(true)
+      when: drupal.files_outside_root|default(true) and item.install|default(true)
 
   tags:
     - deploy
@@ -259,9 +270,9 @@
     follow: no
   with_items:
     - '{{ docRoot }}'
-    - '{{ webRoot }}/config'
-    - '{{ webRoot }}/files'
-    - '{{ webRoot }}/settings'
+    - '{{ configRoot }}'
+    - '{{ filesRoot }}'
+    - '{{ settingsRoot }}'
   tags:
     - deploy
     - SetPermissions
@@ -275,8 +286,8 @@
     recurse: yes
     follow: no
   with_items:
-    - '{{ webRoot }}/config'
-    - '{{ webRoot }}/files'
+    - '{{ configRoot }}'
+    - '{{ filesRoot }}'
   tags:
     - deploy
     - SetPermissions
@@ -315,14 +326,14 @@
   when: item.0.install|default(true)
 
 - name: Set Extended Default Permissions
-  command: 'setfacl -dRm u:{{ apacheUser }}:rwX,g:{{ apacheUser }}:rwX,o::rX {{ webRoot }}/files'
+  command: 'setfacl -dRm u:{{ apacheUser }}:rwX,g:{{ apacheUser }}:rwX,o::rX {{ filesRoot }}'
   tags:
     - deploy
     - SetPermissions
   when: drupal.install_extra_dirs|default(true)
 
 - name: Set Extended Permissions
-  command: 'setfacl -Rm u:{{ apacheUser }}:rwX,g:{{ apacheUser }}:rwX,o::rX {{ webRoot }}/files'
+  command: 'setfacl -Rm u:{{ apacheUser }}:rwX,g:{{ apacheUser }}:rwX,o::rX {{ filesRoot }}'
   tags:
     - deploy
     - SetPermissions
@@ -330,7 +341,7 @@
 
 - name: Make htaccess read-only
   file:
-    path: '{{ webRoot }}/files/{{ drupal_domain.0.shortname|default("default") }}/{{ drupal_domain.1 }}/.htaccess'
+    path: '{{ filesRoot }}/{{ drupal_domain.0.shortname|default("default") }}/{{ drupal_domain.1 }}/.htaccess'
     mode: 0444
   with_nested:
     - '{{ drupal.domains }}'
-- 
GitLab