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