From 114e951c047c70d053d872992a08e5eca60d3cb6 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Thu, 4 Apr 2024 17:37:55 +0200 Subject: [PATCH 01/11] New StatusCake check handling role. --- docs/_Sidebar.md | 1 + docs/roles/maintenance_mode.md | 26 +++++++++++++++++++ roles/maintenance_mode/README.md | 26 +++++++++++++++++++ .../maintenance_mode-nginx/defaults/main.yml | 2 +- .../defaults/main.yml | 5 ++++ .../tasks/main.yml | 8 ++++++ .../tasks/offline.yml | 17 ++++++++++++ .../tasks/online.yml | 17 ++++++++++++ 8 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 docs/roles/maintenance_mode.md create mode 100644 roles/maintenance_mode/README.md create mode 100644 roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml create mode 100644 roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml create mode 100644 roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml create mode 100644 roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml diff --git a/docs/_Sidebar.md b/docs/_Sidebar.md index 3d47469a..a58673b3 100644 --- a/docs/_Sidebar.md +++ b/docs/_Sidebar.md @@ -34,6 +34,7 @@ - [Deploy container](/roles/deploy_container) - [Init](/roles/_init) - [LHCI run](/roles/lhci_run) + - [Maintenance Mode](/roles/maintenance_mode) - ["Meta"](/roles/_meta) - [Drupal 7](/roles/_meta/deploy-drupal7) - [Drupal 8](/roles/_meta/deploy-drupal8) diff --git a/docs/roles/maintenance_mode.md b/docs/roles/maintenance_mode.md new file mode 100644 index 00000000..a9c7f044 --- /dev/null +++ b/docs/roles/maintenance_mode.md @@ -0,0 +1,26 @@ +# Maintenance Mode +This role and its sub-roles handle various methods for putting applications into an offline maintenance state. See each sub-role's own defaults for additional variables. + + + + + +## Default variables +```yaml +--- +# Puts site(s) offline. +maintenance_mode: + # What level do we operate. + # - nginx: serves a static maintenance page. + # - drupal_core: application level + # - mautic: application level + # @todo - haproxy: serves a static maintenance page. + # @todo - drupal_read_only: application level via readonly module. + mode: "nginx" + # - offline: puts the site offline + # @todo - restricted: put the site offline except for whitelist (nginx/haproxy only) + # - online: brings the site back online. + operation: "offline" +``` + + diff --git a/roles/maintenance_mode/README.md b/roles/maintenance_mode/README.md new file mode 100644 index 00000000..a9c7f044 --- /dev/null +++ b/roles/maintenance_mode/README.md @@ -0,0 +1,26 @@ +# Maintenance Mode +This role and its sub-roles handle various methods for putting applications into an offline maintenance state. See each sub-role's own defaults for additional variables. + + + + + +## Default variables +```yaml +--- +# Puts site(s) offline. +maintenance_mode: + # What level do we operate. + # - nginx: serves a static maintenance page. + # - drupal_core: application level + # - mautic: application level + # @todo - haproxy: serves a static maintenance page. + # @todo - drupal_read_only: application level via readonly module. + mode: "nginx" + # - offline: puts the site offline + # @todo - restricted: put the site offline except for whitelist (nginx/haproxy only) + # - online: brings the site back online. + operation: "offline" +``` + + diff --git a/roles/maintenance_mode/maintenance_mode-nginx/defaults/main.yml b/roles/maintenance_mode/maintenance_mode-nginx/defaults/main.yml index 94e4737a..193e6a4d 100644 --- a/roles/maintenance_mode/maintenance_mode-nginx/defaults/main.yml +++ b/roles/maintenance_mode/maintenance_mode-nginx/defaults/main.yml @@ -2,4 +2,4 @@ maintenance_mode_nginx: domains: - server_name: "{{ domain_name }}" - maintenance_page: "index.html" \ No newline at end of file + maintenance_page: "index.html" diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml b/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml new file mode 100644 index 00000000..097a55bd --- /dev/null +++ b/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml @@ -0,0 +1,5 @@ +--- +maintenance_mode_statuscake: + domains: + - statuscake_check_id: "" # Your StatusCake Test ID + statuscake_api_key: "abcdef123456" # Your StatusCake API key - create one on your user page - https://app.statuscake.com/User.php diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml new file mode 100644 index 00000000..15b5cac8 --- /dev/null +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- ansible.builtin.include_tasks: "{{ maintenance_mode.operation }}.yml" + with_items: "{{ maintenance_mode_statuscake.domains }}" + loop_control: + loop_var: domain + run_once: true + when: + - maintenance_mode_statuscake.domains | length > 0 \ No newline at end of file diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml new file mode 100644 index 00000000..16ff26e7 --- /dev/null +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml @@ -0,0 +1,17 @@ +--- +- name: Disable StatusCake check. + ansible.builtin.uri: + url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" + method: PUT + body: + paused: true + headers: + Authorization: "Bearer {{ domain.statuscake_api_key }}" + status_code: + - 200 + - 204 + when: + - domain.statuscake_check_id is defined + - domain.statuscake_check_id | length > 0 + - domain.statuscake_api_key is defined + - domain.statuscake_api_key | length > 0 diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml new file mode 100644 index 00000000..774b12c7 --- /dev/null +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml @@ -0,0 +1,17 @@ +--- +- name: Disable StatusCake check. + ansible.builtin.uri: + url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" + method: PUT + body: + paused: false + headers: + Authorization: "Bearer {{ domain.statuscake_api_key }}" + status_code: + - 200 + - 204 + when: + - domain.statuscake_check_id is defined + - domain.statuscake_check_id | length > 0 + - domain.statuscake_api_key is defined + - domain.statuscake_api_key | length > 0 From e98127a361cf1f486c1abaa91cab5e485ae98eb3 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Thu, 4 Apr 2024 17:40:58 +0200 Subject: [PATCH 02/11] Updating maintenance mode defaults and options. --- docs/roles/maintenance_mode.md | 10 +++++----- roles/maintenance_mode/README.md | 10 +++++----- roles/maintenance_mode/defaults/main.yml | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/roles/maintenance_mode.md b/docs/roles/maintenance_mode.md index a9c7f044..ec9d640c 100644 --- a/docs/roles/maintenance_mode.md +++ b/docs/roles/maintenance_mode.md @@ -10,12 +10,12 @@ This role and its sub-roles handle various methods for putting applications into --- # Puts site(s) offline. maintenance_mode: - # What level do we operate. - # - nginx: serves a static maintenance page. - # - drupal_core: application level - # - mautic: application level + # Where do we apply maintenance - can be invoked more than one time for different purposes. + # - nginx: serves a static maintenance page + # - drupal-core: application level + # - statuscake: disables a StatusCake check # @todo - haproxy: serves a static maintenance page. - # @todo - drupal_read_only: application level via readonly module. + # @todo - drupal-read-only: application level via readonly module. mode: "nginx" # - offline: puts the site offline # @todo - restricted: put the site offline except for whitelist (nginx/haproxy only) diff --git a/roles/maintenance_mode/README.md b/roles/maintenance_mode/README.md index a9c7f044..ec9d640c 100644 --- a/roles/maintenance_mode/README.md +++ b/roles/maintenance_mode/README.md @@ -10,12 +10,12 @@ This role and its sub-roles handle various methods for putting applications into --- # Puts site(s) offline. maintenance_mode: - # What level do we operate. - # - nginx: serves a static maintenance page. - # - drupal_core: application level - # - mautic: application level + # Where do we apply maintenance - can be invoked more than one time for different purposes. + # - nginx: serves a static maintenance page + # - drupal-core: application level + # - statuscake: disables a StatusCake check # @todo - haproxy: serves a static maintenance page. - # @todo - drupal_read_only: application level via readonly module. + # @todo - drupal-read-only: application level via readonly module. mode: "nginx" # - offline: puts the site offline # @todo - restricted: put the site offline except for whitelist (nginx/haproxy only) diff --git a/roles/maintenance_mode/defaults/main.yml b/roles/maintenance_mode/defaults/main.yml index ab895227..15c050e9 100644 --- a/roles/maintenance_mode/defaults/main.yml +++ b/roles/maintenance_mode/defaults/main.yml @@ -1,12 +1,12 @@ --- # Puts site(s) offline. maintenance_mode: - # What level do we operate. - # - nginx: serves a static maintenance page. - # - drupal_core: application level - # - mautic: application level + # Where do we apply maintenance - can be invoked more than one time for different purposes. + # - nginx: serves a static maintenance page + # - drupal-core: application level + # - statuscake: disables a StatusCake check # @todo - haproxy: serves a static maintenance page. - # @todo - drupal_read_only: application level via readonly module. + # @todo - drupal-read-only: application level via readonly module. mode: "nginx" # - offline: puts the site offline # @todo - restricted: put the site offline except for whitelist (nginx/haproxy only) From 5bc2a970c7211779b52149c83a0340f55f51594d Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Thu, 4 Apr 2024 17:46:29 +0200 Subject: [PATCH 03/11] Following StatusCake task naming conventions. --- .../maintenance_mode-statuscake/tasks/offline.yml | 2 +- .../maintenance_mode-statuscake/tasks/online.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml index 16ff26e7..3cd5a186 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml @@ -1,5 +1,5 @@ --- -- name: Disable StatusCake check. +- name: Pause StatusCake check. ansible.builtin.uri: url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" method: PUT diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml index 774b12c7..63663630 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml @@ -1,5 +1,5 @@ --- -- name: Disable StatusCake check. +- name: Resume StatusCake check. ansible.builtin.uri: url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" method: PUT From d2df826dc3acdd90b296a0782f21401cb1590805 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Thu, 4 Apr 2024 19:12:57 +0200 Subject: [PATCH 04/11] Missed the body_format param in StatusCake URI call. --- .../maintenance_mode-statuscake/defaults/main.yml | 2 +- .../maintenance_mode-statuscake/tasks/offline.yml | 1 + .../maintenance_mode-statuscake/tasks/online.yml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml b/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml index 097a55bd..57240d01 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/defaults/main.yml @@ -1,5 +1,5 @@ --- maintenance_mode_statuscake: domains: - - statuscake_check_id: "" # Your StatusCake Test ID + - statuscake_check_id: "" # Your StatusCake Test ID - must always be surrounded by double-quotes statuscake_api_key: "abcdef123456" # Your StatusCake API key - create one on your user page - https://app.statuscake.com/User.php diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml index 3cd5a186..62081308 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml @@ -3,6 +3,7 @@ ansible.builtin.uri: url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" method: PUT + body_format: form-urlencoded body: paused: true headers: diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml index 63663630..5818ed33 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml @@ -3,6 +3,7 @@ ansible.builtin.uri: url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" method: PUT + body_format: form-urlencoded body: paused: false headers: From 469645d685434921d3fe9b760b904a96c6f5fa53 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 15:49:36 +0200 Subject: [PATCH 05/11] Ensuring we pass the test ID as a string to the StatusCake URI call. --- .../maintenance_mode-statuscake/tasks/offline.yml | 2 +- .../maintenance_mode-statuscake/tasks/online.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml index 62081308..1aeb574f 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml @@ -1,7 +1,7 @@ --- - name: Pause StatusCake check. ansible.builtin.uri: - url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" + url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id | string }}" method: PUT body_format: form-urlencoded body: diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml index 5818ed33..1bed8ec3 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml @@ -1,7 +1,7 @@ --- - name: Resume StatusCake check. ansible.builtin.uri: - url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id }}" + url: "https://api.statuscake.com/v1/uptime/{{ domain.statuscake_check_id | string }}" method: PUT body_format: form-urlencoded body: From a677c2c34e7c026c3ac41775b0548389b38d1777 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 15:50:37 +0200 Subject: [PATCH 06/11] Fixing namespaces. --- roles/maintenance_mode/maintenance_mode-nginx/tasks/main.yml | 4 ++-- .../maintenance_mode/maintenance_mode-nginx/tasks/offline.yml | 4 ++-- .../maintenance_mode/maintenance_mode-nginx/tasks/online.yml | 4 ++-- .../maintenance_mode-statuscake/tasks/main.yml | 2 +- roles/maintenance_mode/tasks/main.yml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/roles/maintenance_mode/maintenance_mode-nginx/tasks/main.yml b/roles/maintenance_mode/maintenance_mode-nginx/tasks/main.yml index 65531755..5f5377da 100644 --- a/roles/maintenance_mode/maintenance_mode-nginx/tasks/main.yml +++ b/roles/maintenance_mode/maintenance_mode-nginx/tasks/main.yml @@ -1,8 +1,8 @@ --- -- include_tasks: "{{ maintenance_mode.operation }}.yml" +- ansible.builtin.include_tasks: "{{ maintenance_mode.operation }}.yml" - name: Reload Nginx. - service: + ansible.builtin.service: name: nginx state: reloaded become: true diff --git a/roles/maintenance_mode/maintenance_mode-nginx/tasks/offline.yml b/roles/maintenance_mode/maintenance_mode-nginx/tasks/offline.yml index abcd2246..78fe1df5 100644 --- a/roles/maintenance_mode/maintenance_mode-nginx/tasks/offline.yml +++ b/roles/maintenance_mode/maintenance_mode-nginx/tasks/offline.yml @@ -1,6 +1,6 @@ --- - name: Disable active vhost. - file: + ansible.builtin.file: path: "/etc/nginx/sites-enabled/{{ domain.server_name }}.conf" state: absent with_items: "{{ maintenance_mode_nginx.domains }}" @@ -9,7 +9,7 @@ become: true - name: Enable maintenance vhost. - file: + ansible.builtin.file: src: "/etc/nginx/sites-available/{{ domain.server_name }}-maintenance.conf" dest: "/etc/nginx/sites-enabled/{{ domain.server_name }}-maintenance.conf" state: link diff --git a/roles/maintenance_mode/maintenance_mode-nginx/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-nginx/tasks/online.yml index 59d59c5d..7ad26114 100644 --- a/roles/maintenance_mode/maintenance_mode-nginx/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-nginx/tasks/online.yml @@ -1,6 +1,6 @@ --- - name: Disable maintenance vhost. - file: + ansible.builtin.file: path: "/etc/nginx/sites-enabled/{{ domain.server_name }}-maintenance.conf" state: absent with_items: "{{ maintenance_mode_nginx.domains }}" @@ -9,7 +9,7 @@ become: true - name: Enable active vhost. - file: + ansible.builtin.file: src: "/etc/nginx/sites-available/{{ domain.server_name }}.conf" dest: "/etc/nginx/sites-enabled/{{ domain.server_name }}.conf" state: link diff --git a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml index 15b5cac8..ea8de053 100644 --- a/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/main.yml @@ -5,4 +5,4 @@ loop_var: domain run_once: true when: - - maintenance_mode_statuscake.domains | length > 0 \ No newline at end of file + - maintenance_mode_statuscake.domains | length > 0 diff --git a/roles/maintenance_mode/tasks/main.yml b/roles/maintenance_mode/tasks/main.yml index 2fbf77ee..ed0ef7f0 100644 --- a/roles/maintenance_mode/tasks/main.yml +++ b/roles/maintenance_mode/tasks/main.yml @@ -1,5 +1,5 @@ --- -- include_role: +- ansible.builtin.include_role: name: "maintenance_mode/maintenance_mode-{{ maintenance_mode.mode }}" when: - deploy_operation != 'cleanup' From 6296befe1ec877ada076ca2dd49b22c017938163 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 15:51:04 +0200 Subject: [PATCH 07/11] Stashing the original deploy_path in initial_deploy_path for squashfs builds. --- roles/_init/tasks/main.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/roles/_init/tasks/main.yml b/roles/_init/tasks/main.yml index f57be10e..3b04b4ec 100644 --- a/roles/_init/tasks/main.yml +++ b/roles/_init/tasks/main.yml @@ -53,6 +53,10 @@ ansible.builtin.set_fact: live_symlink_build_dest: "{{ live_symlink_build_dest | default('{{ build_base_path }}/live.{{ project_name }}_{{ build_type }}') }}" + - name: Stash current deploy path for later use where we need to manipulate the live site. + ansible.builtin.set_fact: + initial_deploy_path: "{{ deploy_path }}" + - name: Overwrite deploy and live_symlink paths if SquashFS deploy. ansible.builtin.set_fact: deploy_path: "{{ build_path | default('{{ build_path_prefix }}{{ build_number }}') }}" From e6505a63f543c463c5da7beb35c0c9941991ece5 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 15:51:47 +0200 Subject: [PATCH 08/11] Adding a double online step for Drupal builds using SquashFS so both the new site and the currently live site come out of maintenance mode. --- .../tasks/online.yml | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml index 6b127f89..ab548596 100644 --- a/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml @@ -7,7 +7,20 @@ become: "{{ 'no' if www_user == deploy_user else 'yes' }}" become_user: "{{ www_user }}" when: - - project_type == 'drupal8' + - project_type == "drupal8" + +# We want to also bring up the 'current' site with squashfs builds +- name: Disable live site maintenance mode if this is a squashfs build. + ansible.builtin.command: + cmd: "{{ drush_bin }} -l {{ site.folder }} state:set system.maintenance_mode 0 --input-format=integer --root {{ initial_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + args: + chdir: "{{ initial_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + become: "{{ 'no' if www_user == deploy_user else 'yes' }}" + become_user: "{{ www_user }}" + when: + - project_type == "drupal8" + - deploy_code.mount_type is defined + - deploy_code.mount_type == "squashfs" # For some reason D7 drush doesn't respect 'chdir' with command, using shell instead. - name: Disable maintenance mode D7. @@ -17,4 +30,16 @@ become: "{{ 'no' if www_user == deploy_user else 'yes' }}" become_user: "{{ www_user }}" when: - - project_type == 'drupal7' + - project_type == "drupal7" + +# We want to also bring up the 'current' site with squashfs builds +- name: Disable maintenance mode D7 if this is a squashfs build. + ansible.builtin.shell: + cmd: "{{ drush_bin }} -l {{ site.folder }} vset maintenance_mode 0" + chdir: "{{ initial_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + become: "{{ 'no' if www_user == deploy_user else 'yes' }}" + become_user: "{{ www_user }}" + when: + - project_type == "drupal7" + - deploy_code.mount_type is defined + - deploy_code.mount_type == "squashfs" From dd19332bb162befd39d84fb46b0267cde5d08b46 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 16:04:54 +0200 Subject: [PATCH 09/11] We need the path to the previous build for maintenance mode online. --- roles/_init/tasks/main.yml | 4 ++-- .../maintenance_mode-drupal-core/tasks/online.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/roles/_init/tasks/main.yml b/roles/_init/tasks/main.yml index 3b04b4ec..9f109361 100644 --- a/roles/_init/tasks/main.yml +++ b/roles/_init/tasks/main.yml @@ -53,9 +53,9 @@ ansible.builtin.set_fact: live_symlink_build_dest: "{{ live_symlink_build_dest | default('{{ build_base_path }}/live.{{ project_name }}_{{ build_type }}') }}" - - name: Stash current deploy path for later use where we need to manipulate the live site. + - name: Set the previous deploy's path for later use where we need to manipulate the live site. ansible.builtin.set_fact: - initial_deploy_path: "{{ deploy_path }}" + previous_deploy_path: "{{ initial_deploy_path | default('{{ deploy_path_prefix }}{{ previous_build_number }}') }}" - name: Overwrite deploy and live_symlink paths if SquashFS deploy. ansible.builtin.set_fact: diff --git a/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml index ab548596..0f420c8d 100644 --- a/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml @@ -12,9 +12,9 @@ # We want to also bring up the 'current' site with squashfs builds - name: Disable live site maintenance mode if this is a squashfs build. ansible.builtin.command: - cmd: "{{ drush_bin }} -l {{ site.folder }} state:set system.maintenance_mode 0 --input-format=integer --root {{ initial_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + cmd: "{{ drush_bin }} -l {{ site.folder }} state:set system.maintenance_mode 0 --input-format=integer --root {{ previous_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" args: - chdir: "{{ initial_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + chdir: "{{ previous_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" become: "{{ 'no' if www_user == deploy_user else 'yes' }}" become_user: "{{ www_user }}" when: @@ -36,7 +36,7 @@ - name: Disable maintenance mode D7 if this is a squashfs build. ansible.builtin.shell: cmd: "{{ drush_bin }} -l {{ site.folder }} vset maintenance_mode 0" - chdir: "{{ initial_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + chdir: "{{ previous_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" become: "{{ 'no' if www_user == deploy_user else 'yes' }}" become_user: "{{ www_user }}" when: From f2b757c932db1bd1d682e5484ff85ef1a2bf8794 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 16:13:54 +0200 Subject: [PATCH 10/11] Changing order of tasks so previous_build_number is set earlier. --- roles/_init/tasks/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/roles/_init/tasks/main.yml b/roles/_init/tasks/main.yml index 9f109361..68eef579 100644 --- a/roles/_init/tasks/main.yml +++ b/roles/_init/tasks/main.yml @@ -16,6 +16,11 @@ ansible.builtin.set_fact: webroot: "{{ webroot | default('web') }}" +# This is passed from caller. +- name: Gather last known good build number. + ansible.builtin.set_fact: + previous_build_number: "{{ previous_known_build_number }}" + - name: Define build deploy path prefix. ansible.builtin.set_fact: deploy_path_prefix: "{{ deploy_base_path }}/{{ project_name }}_{{ build_type }}_build_" @@ -93,11 +98,6 @@ # register: last_build # when: last_build_symlink.stat.exists -# This is passed from caller. -- name: Gather last known good build number. - ansible.builtin.set_fact: - previous_build_number: "{{ previous_known_build_number }}" - # - set_fact: # previous_build_number: "{{ last_build.stdout }}" # when: From ecab2fa1880456cffcf6a93ce4dcf013382f3e9d Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Fri, 5 Apr 2024 17:04:29 +0200 Subject: [PATCH 11/11] We also need a previous_drush_bin. --- roles/_init/tasks/drupal8.yml | 4 ++++ roles/_init/tasks/main.yml | 2 +- .../maintenance_mode-drupal-core/tasks/online.yml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/roles/_init/tasks/drupal8.yml b/roles/_init/tasks/drupal8.yml index 7c64719e..eb3bdae9 100644 --- a/roles/_init/tasks/drupal8.yml +++ b/roles/_init/tasks/drupal8.yml @@ -3,6 +3,10 @@ set_fact: drush_bin: "{{ drush_bin | default('{{ deploy_path }}/vendor/bin/drush') }}" +- name: Define path to drush for previous build. + set_fact: + previous_drush_bin: "{{ previous_drush_bin | default('{{ previous_deploy_path }}/vendor/bin/drush') }}" + - name: Define path to drush for currently live build. set_fact: drush_live_bin: "{{ drush_live_bin | default('{{ live_symlink_dest }}/vendor/bin/drush') }}" diff --git a/roles/_init/tasks/main.yml b/roles/_init/tasks/main.yml index 68eef579..75523e18 100644 --- a/roles/_init/tasks/main.yml +++ b/roles/_init/tasks/main.yml @@ -60,7 +60,7 @@ - name: Set the previous deploy's path for later use where we need to manipulate the live site. ansible.builtin.set_fact: - previous_deploy_path: "{{ initial_deploy_path | default('{{ deploy_path_prefix }}{{ previous_build_number }}') }}" + previous_deploy_path: "{{ previous_deploy_path | default('{{ deploy_path_prefix }}{{ previous_build_number }}') }}" - name: Overwrite deploy and live_symlink paths if SquashFS deploy. ansible.builtin.set_fact: diff --git a/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml b/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml index 0f420c8d..47a925f6 100644 --- a/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml +++ b/roles/maintenance_mode/maintenance_mode-drupal-core/tasks/online.yml @@ -12,7 +12,7 @@ # We want to also bring up the 'current' site with squashfs builds - name: Disable live site maintenance mode if this is a squashfs build. ansible.builtin.command: - cmd: "{{ drush_bin }} -l {{ site.folder }} state:set system.maintenance_mode 0 --input-format=integer --root {{ previous_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" + cmd: "{{ previous_drush_bin }} -l {{ site.folder }} state:set system.maintenance_mode 0 --input-format=integer --root {{ previous_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" args: chdir: "{{ previous_deploy_path }}/{{ webroot }}/sites/{{ site.folder }}" become: "{{ 'no' if www_user == deploy_user else 'yes' }}"