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..ec9d640c --- /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: + # 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. + 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..ec9d640c --- /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: + # 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. + 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/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) 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..3cd5a186 --- /dev/null +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/offline.yml @@ -0,0 +1,17 @@ +--- +- name: Pause 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..63663630 --- /dev/null +++ b/roles/maintenance_mode/maintenance_mode-statuscake/tasks/online.yml @@ -0,0 +1,17 @@ +--- +- name: Resume 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