From 51a808e4a4ee53a04ecbd6f48d4205598552be52 Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Thu, 26 May 2016 10:25:01 +0200
Subject: [PATCH] Optimize installation such that limit_jail is already checked
 before include of install and mysql yml files

---
 tasks/install.yml | 380 +++++++++++++++++++++++-----------------------
 tasks/main.yml    |   2 +
 tasks/mysql.yml   | 106 +++++++------
 3 files changed, 241 insertions(+), 247 deletions(-)

diff --git a/tasks/install.yml b/tasks/install.yml
index 4b2c07e..e7d200e 100644
--- a/tasks/install.yml
+++ b/tasks/install.yml
@@ -20,90 +20,88 @@
   - set_fact: relativeRoot='{{ drupal.relativeRoot|default(drupal_links_relative_root) }}'
   tags: always
 
-- block:
-
-  - name: "Configure Apache"
-    include: apache.yml
-    tags: 'ApacheConfig'
-
-  - name: "Ensure Drupal Root Directory"
-    file:
-      path='{{ docRoot }}'
-      state='directory'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode=775
-
-  - name: "File Modes and Ownership"
-    file:
-      path='{{ docRoot }}'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='g+w'
-      recurse=yes
-    tags: 'deploy'
-
-  - name: "Check Installation Requirement"
-    shell: ls {{ drupalRoot }}/index.php
-    register: drupal_available
-    failed_when: false
-
-  - set_fact: drupal_first_installation=false
-  - set_fact: drupal_first_installation=true
-    when: drupal_install_drupal and drupal_available is defined and drupal_available.stdout != '{{ drupalRoot }}/index.php'
-
-  - include: install/{{ installSource.mode|default("none") }}.yml
-    when: drupal_first_installation
-
-  - include: install/{{ drupal.version|default("d7") }}.yml
-    when: drupal_first_installation
-
-  - include: deploy/{{ installSource.mode|default("none") }}.yml
-    when: drupal_install_drupal
-    tags: 'deploy'
-
-  - include: deploy/{{ drupal.version|default("d7") }}.yml
-    when: drupal_install_drupal
-    tags: 'deploy'
-
-  - name: "Ensure links"
-    file:
-      src: '{{ webRoot }}{{ item.src }}'
-      dest: '{{ drupalRoot }}{{ item.dest }}'
-      state: 'link'
-    with_items: '{{ drupal.links|default([]) }}'
-    tags: 'deploy'
-
-  - include: users/{{ installSource.mode|default("none") }}.yml
-    when: drupal_install_drupal and drupal.src.name is defined
-    tags: 'SetPermissions'
-
-  - name: "Configuration file"
-    template:
-      src='{{ item.src }}'
-      dest='{{ drupalRoot }}{{ item.dest }}'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='664'
-    with_items: '{{ drupal.templates|default([]) }}'
-
-  - name: "Ensure Settings Directory"
-    file:
-      dest='{{ webRoot }}/settings/{{ item.shortname|default("default") }}'
-      state='directory'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='755'
-    with_items: '{{ drupal.domains }}'
-
-  - name: "Ensure Site Directories"
-    file:
-      dest='{{ drupalRoot }}/sites/{{ item.shortname|default("default") }}'
-      state='directory'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='755'
-    with_items: '{{ drupal.domains }}'
+- name: "Configure Apache"
+  include: apache.yml
+  tags: 'ApacheConfig'
+
+- name: "Ensure Drupal Root Directory"
+  file:
+    path='{{ docRoot }}'
+    state='directory'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode=775
+
+- name: "File Modes and Ownership"
+  file:
+    path='{{ docRoot }}'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='g+w'
+    recurse=yes
+  tags: 'deploy'
+
+- name: "Check Installation Requirement"
+  shell: ls {{ drupalRoot }}/index.php
+  register: drupal_available
+  failed_when: false
+
+- set_fact: drupal_first_installation=false
+- set_fact: drupal_first_installation=true
+  when: drupal_install_drupal and drupal_available is defined and drupal_available.stdout != '{{ drupalRoot }}/index.php'
+
+- include: install/{{ installSource.mode|default("none") }}.yml
+  when: drupal_first_installation
+
+- include: install/{{ drupal.version|default("d7") }}.yml
+  when: drupal_first_installation
+
+- include: deploy/{{ installSource.mode|default("none") }}.yml
+  when: drupal_install_drupal
+  tags: 'deploy'
+
+- include: deploy/{{ drupal.version|default("d7") }}.yml
+  when: drupal_install_drupal
+  tags: 'deploy'
+
+- name: "Ensure links"
+  file:
+    src: '{{ webRoot }}{{ item.src }}'
+    dest: '{{ drupalRoot }}{{ item.dest }}'
+    state: 'link'
+  with_items: '{{ drupal.links|default([]) }}'
+  tags: 'deploy'
+
+- include: users/{{ installSource.mode|default("none") }}.yml
+  when: drupal_install_drupal and drupal.src.name is defined
+  tags: 'SetPermissions'
+
+- name: "Configuration file"
+  template:
+    src='{{ item.src }}'
+    dest='{{ drupalRoot }}{{ item.dest }}'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='664'
+  with_items: '{{ drupal.templates|default([]) }}'
+
+- name: "Ensure Settings Directory"
+  file:
+    dest='{{ webRoot }}/settings/{{ item.shortname|default("default") }}'
+    state='directory'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='755'
+  with_items: '{{ drupal.domains }}'
+
+- name: "Ensure Site Directories"
+  file:
+    dest='{{ drupalRoot }}/sites/{{ item.shortname|default("default") }}'
+    state='directory'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='755'
+  with_items: '{{ drupal.domains }}'
 
 # TODO: The following should be working as soon as Ansible 2.1 is out
 #  - include: files.yml
@@ -111,111 +109,109 @@
 #      - '{{ drupal.domains }}'
 #      - ['files', 'private']
 
-  - name: "Ensure File Directories"
-    file:
-      dest='{{ webRoot }}/files/{{ item.0.shortname|default("default") }}/{{ item.1 }}'
-      state='directory'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='755'
-    with_nested:
-      - '{{ drupal.domains }}'
-      - ['files', 'private']
-
-  - name: "Check the status of the File Directory"
-    stat: path='{{ drupalRoot }}/sites/{{ item.shortname|default("default") }}/files'
-    register: directory
-    with_items: '{{ drupal.domains }}'
-
-  - name: "Move existing File Directory"
-    shell: rm -rf {{ webRoot }}/files/{{ item.shortname|default("default") }}/files && mv {{ drupalRoot }}/sites/{{ item.shortname|default("default") }}/files {{ webRoot }}/files/{{ item.shortname|default("default") }}/files
-    with_items: '{{ drupal.domains }}'
-    when: directory.results.0.stat.exists and directory.results.0.stat.isdir
-
-  - name: "Link Site Directory to File Directory"
-    file:
-      src='{{ relativeRoot }}/files/{{ item.0.shortname|default("default") }}/{{ item.1 }}'
-      dest='{{ drupalRoot }}/sites/{{ item.0.shortname|default("default") }}/{{ item.1 }}'
-      state='link'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='755'
-    with_nested:
-      - '{{ drupal.domains }}'
-      - ['files', 'private']
-
-  - name: "Ensure .htaccess"
-    template:
-      src='.htaccess'
-      dest='{{ webRoot }}/files/{{ item.0.shortname|default("default") }}/{{ item.1 }}/.htaccess'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='444'
-    with_nested:
-      - '{{ drupal.domains }}'
-      - ['files', 'private']
-
-  - name: "Create symbolic links"
-    file:
-      src='{{ item.shortname|default("default") }}'
-      path='{{ drupalRoot }}/sites/{{ item.1 }}'
-      state='link'
-      force=yes
-    with_subelements:
-      - '{{ drupal.domains }}'
-      - aliases
-    when: drupal.version|default("d7") == "d6"
-
-  - name: "Create the settings.php files"
-    template:
-      src='{{ drupal.template_dir|default('') }}{{ drupal.version|default("d7") }}_settings.php'
-      dest='{{ webRoot }}/settings/{{ item.shortname|default("default") }}/settings.php'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='444'
-    with_items: '{{ drupal.domains }}'
-
-  - name: "Create symbolic links"
-    file:
-      src='{{ relativeRoot }}/settings/{{ item.shortname|default("default") }}/settings.php'
-      path='{{ drupalRoot }}/sites/{{ item.shortname|default("default") }}/settings.php'
-      state='link'
-      force=yes
-    with_items: '{{ drupal.domains }}'
-
-  - name: "File Modes and Ownership"
-    file:
-      path='{{ item }}'
-      owner='{{ apacheUser }}'
-      group='{{ apacheUser }}'
-      mode='a-w'
-      recurse=yes
-    with_items:
-      - '{{ docRoot }}'
-      - '{{ webRoot }}/settings'
-
-  - name: "Make site directories writeable"
-    file:
-      path='{{ webRoot }}/files'
-      mode='ug+w'
-      recurse=yes
-
-  - name: "Setup Crontabs for each domain"
-    cron:
-      name='Drupal {{ item.1.name }}'
-      month='{{ item.1.month|default(omit) }}'
-      day='{{ item.1.day|default(omit) }}'
-      weekday='{{ item.1.weekday|default(omit) }}'
-      hour='{{ item.1.hour|default(omit) }}'
-      minute='{{ item.1.minute|default(omit) }}'
-      job='{{ item.1.job }} >/dev/null 2>&1'
-      user='{{ cronUser }}'
-    with_subelements:
-      - '{{ drupal.domains }}'
-      - crontabs
-    tags: 'cron'
-
-  - name: "Set Extended Permissions"
-    command: setfacl -dRm u:{{ apacheUser }}:rwX,g:{{ apacheUser }}:rwX,o::rX {{ webRoot }}/files
-
-  when: limit_jail is not defined or limit_jail == drupal.jail.name
+- name: "Ensure File Directories"
+  file:
+    dest='{{ webRoot }}/files/{{ item.0.shortname|default("default") }}/{{ item.1 }}'
+    state='directory'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='755'
+  with_nested:
+    - '{{ drupal.domains }}'
+    - ['files', 'private']
+
+- name: "Check the status of the File Directory"
+  stat: path='{{ drupalRoot }}/sites/{{ item.shortname|default("default") }}/files'
+  register: directory
+  with_items: '{{ drupal.domains }}'
+
+- name: "Move existing File Directory"
+  shell: rm -rf {{ webRoot }}/files/{{ item.shortname|default("default") }}/files && mv {{ drupalRoot }}/sites/{{ item.shortname|default("default") }}/files {{ webRoot }}/files/{{ item.shortname|default("default") }}/files
+  with_items: '{{ drupal.domains }}'
+  when: directory.results.0.stat.exists and directory.results.0.stat.isdir
+
+- name: "Link Site Directory to File Directory"
+  file:
+    src='{{ relativeRoot }}/files/{{ item.0.shortname|default("default") }}/{{ item.1 }}'
+    dest='{{ drupalRoot }}/sites/{{ item.0.shortname|default("default") }}/{{ item.1 }}'
+    state='link'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='755'
+  with_nested:
+    - '{{ drupal.domains }}'
+    - ['files', 'private']
+
+- name: "Ensure .htaccess"
+  template:
+    src='.htaccess'
+    dest='{{ webRoot }}/files/{{ item.0.shortname|default("default") }}/{{ item.1 }}/.htaccess'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='444'
+  with_nested:
+    - '{{ drupal.domains }}'
+    - ['files', 'private']
+
+- name: "Create symbolic links"
+  file:
+    src='{{ item.shortname|default("default") }}'
+    path='{{ drupalRoot }}/sites/{{ item.1 }}'
+    state='link'
+    force=yes
+  with_subelements:
+    - '{{ drupal.domains }}'
+    - aliases
+  when: drupal.version|default("d7") == "d6"
+
+- name: "Create the settings.php files"
+  template:
+    src='{{ drupal.template_dir|default('') }}{{ drupal.version|default("d7") }}_settings.php'
+    dest='{{ webRoot }}/settings/{{ item.shortname|default("default") }}/settings.php'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='444'
+  with_items: '{{ drupal.domains }}'
+
+- name: "Create symbolic links"
+  file:
+    src='{{ relativeRoot }}/settings/{{ item.shortname|default("default") }}/settings.php'
+    path='{{ drupalRoot }}/sites/{{ item.shortname|default("default") }}/settings.php'
+    state='link'
+    force=yes
+  with_items: '{{ drupal.domains }}'
+
+- name: "File Modes and Ownership"
+  file:
+    path='{{ item }}'
+    owner='{{ apacheUser }}'
+    group='{{ apacheUser }}'
+    mode='a-w'
+    recurse=yes
+  with_items:
+    - '{{ docRoot }}'
+    - '{{ webRoot }}/settings'
+
+- name: "Make site directories writeable"
+  file:
+    path='{{ webRoot }}/files'
+    mode='ug+w'
+    recurse=yes
+
+- name: "Setup Crontabs for each domain"
+  cron:
+    name='Drupal {{ item.1.name }}'
+    month='{{ item.1.month|default(omit) }}'
+    day='{{ item.1.day|default(omit) }}'
+    weekday='{{ item.1.weekday|default(omit) }}'
+    hour='{{ item.1.hour|default(omit) }}'
+    minute='{{ item.1.minute|default(omit) }}'
+    job='{{ item.1.job }} >/dev/null 2>&1'
+    user='{{ cronUser }}'
+  with_subelements:
+    - '{{ drupal.domains }}'
+    - crontabs
+  tags: 'cron'
+
+- name: "Set Extended Permissions"
+  command: setfacl -dRm u:{{ apacheUser }}:rwX,g:{{ apacheUser }}:rwX,o::rX {{ webRoot }}/files
diff --git a/tasks/main.yml b/tasks/main.yml
index 5c43364..9ec2302 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -18,11 +18,13 @@
   - name: "Install Drupal"
     include: install.yml
     with_items: '{{ drupal_settings }}'
+    when: limit_jail is not defined or item.jail is not defined or limit_jail == item.jail.name
 
   - name: "Install Drupal Databases and Users"
     include: mysql.yml
     with_subelements:
       - '{{ drupal_settings }}'
       - domains
+    when: limit_jail is not defined or item.0.jail is not defined or limit_jail == item.0.jail.name
 
   when: '"drupal" not in excluded_roles and drupal_install_drupal'
diff --git a/tasks/mysql.yml b/tasks/mysql.yml
index 55c89e8..c1ba1b1 100644
--- a/tasks/mysql.yml
+++ b/tasks/mysql.yml
@@ -7,61 +7,57 @@
   - set_fact: extra={{ db.extra|default([]) }}
   tags: always
 
-- block:
-
-  - name: "Ensure Database"
-    mysql_db:
-      name='{{ db.name }}'
-      login_user='root'
-      login_password='{{ mysql_root_password|default("root") }}'
-      login_host='127.0.0.1'
-      login_port='{{ db.port|default('3306') }}'
-      state='present'
-
-  - name: "Ensure extra Databases"
-    mysql_db:
-      name='{{ item.name }}'
-      login_user='root'
-      login_password='{{ mysql_root_password|default("root") }}'
-      login_host='127.0.0.1'
-      login_port='{{ item.port|default('3306') }}'
-      state='present'
-    with_items: '{{ extra }}'
+- name: "Ensure Database"
+  mysql_db:
+    name='{{ db.name }}'
+    login_user='root'
+    login_password='{{ mysql_root_password|default("root") }}'
+    login_host='127.0.0.1'
+    login_port='{{ db.port|default('3306') }}'
+    state='present'
 
-  - name: "Create MySQL User"
-    mysql_user:
-      user='{{ db.username|default("root") }}'
-      password='{{ db.password|default(mysql_root_password|default("root")) }}'
-      host='{{ item }}'
-      check_implicit_admin=yes
-      priv='{{ db.name }}.*:ALL'
-      login_user='root'
-      login_password='{{ mysql_root_password|default("root") }}'
-      login_host='127.0.0.1'
-      login_port='{{ db.port|default('3306') }}'
-    with_items:
-      - 'localhost'
-      - '127.0.0.1'
-      - '::1'
-      - '{{ inventory_hostname }}'
-    when: db.username is defined and db.username != 'root'
-    notify: "MySQL | Restart MySQL"
+- name: "Ensure extra Databases"
+  mysql_db:
+    name='{{ item.name }}'
+    login_user='root'
+    login_password='{{ mysql_root_password|default("root") }}'
+    login_host='127.0.0.1'
+    login_port='{{ item.port|default('3306') }}'
+    state='present'
+  with_items: '{{ extra }}'
 
-  - name: "Create MySQL User for extra Databases"
-    mysql_user:
-      user='{{ item.0.username|default("root") }}'
-      password='{{ item.0.password|default(mysql_root_password|default("root")) }}'
-      host='{{ item.1 }}'
-      check_implicit_admin=yes
-      priv='{{ item.0.name }}.*:ALL'
-      login_user='root'
-      login_password='{{ mysql_root_password|default("root") }}'
-      login_host='127.0.0.1'
-      login_port='{{ item.0.port|default('3306') }}'
-    with_nested:
-      - '{{ extra }}'
-      - ['localhost', '127.0.0.1', '::1', '{{ inventory_hostname }}']
-    when: item.0.username is defined and item.0.username != 'root'
-    notify: "MySQL | Restart MySQL"
+- name: "Create MySQL User"
+  mysql_user:
+    user='{{ db.username|default("root") }}'
+    password='{{ db.password|default(mysql_root_password|default("root")) }}'
+    host='{{ item }}'
+    check_implicit_admin=yes
+    priv='{{ db.name }}.*:ALL'
+    login_user='root'
+    login_password='{{ mysql_root_password|default("root") }}'
+    login_host='127.0.0.1'
+    login_port='{{ db.port|default('3306') }}'
+  with_items:
+    - 'localhost'
+    - '127.0.0.1'
+    - '::1'
+    - '{{ inventory_hostname }}'
+  when: db.username is defined and db.username != 'root'
+  notify: "MySQL | Restart MySQL"
 
-  when: limit_jail is not defined or limit_jail == drupal.jail.name
+- name: "Create MySQL User for extra Databases"
+  mysql_user:
+    user='{{ item.0.username|default("root") }}'
+    password='{{ item.0.password|default(mysql_root_password|default("root")) }}'
+    host='{{ item.1 }}'
+    check_implicit_admin=yes
+    priv='{{ item.0.name }}.*:ALL'
+    login_user='root'
+    login_password='{{ mysql_root_password|default("root") }}'
+    login_host='127.0.0.1'
+    login_port='{{ item.0.port|default('3306') }}'
+  with_nested:
+    - '{{ extra }}'
+    - ['localhost', '127.0.0.1', '::1', '{{ inventory_hostname }}']
+  when: item.0.username is defined and item.0.username != 'root'
+  notify: "MySQL | Restart MySQL"
-- 
GitLab