From 114e951c047c70d053d872992a08e5eca60d3cb6 Mon Sep 17 00:00:00 2001 From: Greg Harvey Date: Thu, 4 Apr 2024 17:37:55 +0200 Subject: [PATCH 1/4] 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 2/4] 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 3/4] 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 4/4] 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: