From 4e6da1dd6d490d4fcc4fca74dd8c8a16212e8eac Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 27 Feb 2023 09:55:06 +0100 Subject: [PATCH 01/25] US1b - Add role for updating single-node systems. --- .../version_update_single_node_role.yml | 4 ++ .../version_update_single_node/tasks/main.yml | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 changelogs/fragments/version_update_single_node_role.yml create mode 100644 roles/version_update_single_node/tasks/main.yml diff --git a/changelogs/fragments/version_update_single_node_role.yml b/changelogs/fragments/version_update_single_node_role.yml new file mode 100644 index 00000000..432b80f7 --- /dev/null +++ b/changelogs/fragments/version_update_single_node_role.yml @@ -0,0 +1,4 @@ +--- +major_changes: + - Added a role for updating single_node systems. + (https://github.com/ScaleComputing/HyperCoreAnsibleCollection/pull/136) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml new file mode 100644 index 00000000..2b3aa513 --- /dev/null +++ b/roles/version_update_single_node/tasks/main.yml @@ -0,0 +1,48 @@ +--- +- environment: + SC_HOST: "{{ sc_host }}" + SC_USERNAME: "{{ sc_username }}" + SC_PASSWORD: "{{ sc_password }}" + SC_TIMEOUT: "{{ sc_timeout }}" + +- name: Connect to cluster host + ansible.builtin.uri: + url: "{{ sc_host }}" + timeout: 5 + validate_certs: false + +- name: Get all available VMs + scale_computing.hypercore.vm_info: + register: vms +- ansible.builtin.debug: + var: vms + +- name: Shutdown VMs + scale_computing.hypercore.vm: + vm_name: "{{ item.vm_name }}" + power_state: shutdown + loop: "{{ vms }}" + register: vm_shutdown_result + +- name: Get available updates + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates + +- name: Update HC3 + scale_computing.hypercore.api: + action: post + endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" + when: available_updates + loop: "{{ available_updates }}" + +- name: Start VMs + scale_computing.hypercore.vm: + vm_name: "{{ item.vm_name }}" + power_state: start + loop: "{{ vms }}" + register: vm_start_result + + + # TODO: (integration) test for this role From 08fdc454d49ad35f93651443458f1c9e9a868951 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 27 Feb 2023 10:26:23 +0100 Subject: [PATCH 02/25] Update role. --- .../version_update_single_node/tasks/main.yml | 78 +++++++++---------- 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index 2b3aa513..5c8e9fce 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -5,44 +5,40 @@ SC_PASSWORD: "{{ sc_password }}" SC_TIMEOUT: "{{ sc_timeout }}" -- name: Connect to cluster host - ansible.builtin.uri: - url: "{{ sc_host }}" - timeout: 5 - validate_certs: false - -- name: Get all available VMs - scale_computing.hypercore.vm_info: - register: vms -- ansible.builtin.debug: - var: vms - -- name: Shutdown VMs - scale_computing.hypercore.vm: - vm_name: "{{ item.vm_name }}" - power_state: shutdown - loop: "{{ vms }}" - register: vm_shutdown_result - -- name: Get available updates - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update - register: available_updates - -- name: Update HC3 - scale_computing.hypercore.api: - action: post - endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" - when: available_updates - loop: "{{ available_updates }}" - -- name: Start VMs - scale_computing.hypercore.vm: - vm_name: "{{ item.vm_name }}" - power_state: start - loop: "{{ vms }}" - register: vm_start_result - - - # TODO: (integration) test for this role + block: + - name: Get all available VMs + scale_computing.hypercore.vm_info: + register: vms + - ansible.builtin.debug: + var: vms + + - name: Shutdown VMs + scale_computing.hypercore.vm: + vm_name: "{{ item.vm_name }}" + power_state: shutdown + loop: "{{ vms }}" + register: vm_shutdown_result + + - name: Get available updates + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates + + - name: Update HC3 + scale_computing.hypercore.api: + action: post + endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" + when: available_updates + loop: "{{ available_updates }}" + + - name: Start VMs + scale_computing.hypercore.vm: + vm_name: "{{ item.vm_name }}" + power_state: start + loop: "{{ vms }}" + register: vm_start_result + + # ----------------------------------------- + + # TODO: (integration) test for this role From ae79e0cbffafd779b69252370385644928b95308 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 27 Feb 2023 15:05:39 +0100 Subject: [PATCH 03/25] Fix some of the requests. --- .../version_update_single_node/tasks/main.yml | 69 +++++++++---------- .../tasks/main.yml | 16 +++++ 2 files changed, 49 insertions(+), 36 deletions(-) create mode 100644 tests/integration/targets/version_update_single_node_role/tasks/main.yml diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index 5c8e9fce..c2887419 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -1,44 +1,41 @@ --- -- environment: - SC_HOST: "{{ sc_host }}" - SC_USERNAME: "{{ sc_username }}" - SC_PASSWORD: "{{ sc_password }}" - SC_TIMEOUT: "{{ sc_timeout }}" +- name: Get all available running VMs + scale_computing.hypercore.vm_info: + register: vms - block: - - name: Get all available VMs - scale_computing.hypercore.vm_info: - register: vms - - ansible.builtin.debug: - var: vms +- name: Show all VMs + ansible.builtin.debug: + var: vms - - name: Shutdown VMs - scale_computing.hypercore.vm: - vm_name: "{{ item.vm_name }}" - power_state: shutdown - loop: "{{ vms }}" - register: vm_shutdown_result +- name: Shutdown VMs + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: shutdown + when: item.power_state == running + loop: "{{ vms }}" + register: vm_shutdown_result - - name: Get available updates - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update - register: available_updates +- name: Get available updates + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates - - name: Update HC3 - scale_computing.hypercore.api: - action: post - endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" - when: available_updates - loop: "{{ available_updates }}" +- name: Update HC3 + scale_computing.hypercore.api: + action: post + endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" + when: available_updates + loop: "{{ available_updates }}" - - name: Start VMs - scale_computing.hypercore.vm: - vm_name: "{{ item.vm_name }}" - power_state: start - loop: "{{ vms }}" - register: vm_start_result +- name: Start VMs + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: start + when: item.power_state == running # if the initial power_state == running + loop: "{{ vms }}" + register: vm_start_result - # ----------------------------------------- +# ----------------------------------------- - # TODO: (integration) test for this role +# TODO: (integration) test for this role diff --git a/tests/integration/targets/version_update_single_node_role/tasks/main.yml b/tests/integration/targets/version_update_single_node_role/tasks/main.yml new file mode 100644 index 00000000..2203a45b --- /dev/null +++ b/tests/integration/targets/version_update_single_node_role/tasks/main.yml @@ -0,0 +1,16 @@ +--- +- environment: + SC_HOST: "{{ sc_host }}" + SC_USERNAME: "{{ sc_username }}" + SC_PASSWORD: "{{ sc_password }}" + SC_TIMEOUT: "{{ sc_timeout }}" + +# Quick debugging, then tests + block: + - name: Get available updates + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates + - ansible.builtin.debug: + var: available_updates From 684d501387270eb42665d827e739e9464ef157dd Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Tue, 28 Feb 2023 10:05:27 +0100 Subject: [PATCH 04/25] Update role, add integration tests. --- .../version_update_single_node/tasks/main.yml | 41 +++-------- .../tasks/update.yml | 44 ++++++++++++ .../tasks/01_update.yml | 49 +++++++++++++ .../tasks/02_update_idempotence.yml | 49 +++++++++++++ .../tasks/debugging.yml | 72 +++++++++++++++++++ .../tasks/main.yml | 13 ++-- 6 files changed, 227 insertions(+), 41 deletions(-) create mode 100644 roles/version_update_single_node/tasks/update.yml create mode 100644 tests/integration/targets/version_update_single_node_role/tasks/01_update.yml create mode 100644 tests/integration/targets/version_update_single_node_role/tasks/02_update_idempotence.yml create mode 100644 tests/integration/targets/version_update_single_node_role/tasks/debugging.yml diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index c2887419..b05fd4c6 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -1,41 +1,16 @@ --- -- name: Get all available running VMs - scale_computing.hypercore.vm_info: - register: vms - -- name: Show all VMs - ansible.builtin.debug: - var: vms - -- name: Shutdown VMs - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: shutdown - when: item.power_state == running - loop: "{{ vms }}" - register: vm_shutdown_result - - name: Get available updates scale_computing.hypercore.api: action: get endpoint: /rest/v1/Update register: available_updates +- ansible.builtin.debug: + var: available_updates -- name: Update HC3 - scale_computing.hypercore.api: - action: post - endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" - when: available_updates - loop: "{{ available_updates }}" - -- name: Start VMs - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: start - when: item.power_state == running # if the initial power_state == running - loop: "{{ vms }}" - register: vm_start_result - -# ----------------------------------------- +- name: Show available updates + ansible.builtin.debug: + var: available_updates -# TODO: (integration) test for this role +- name: Update single-node system + include_tasks: update.yml + when: available_updates \ No newline at end of file diff --git a/roles/version_update_single_node/tasks/update.yml b/roles/version_update_single_node/tasks/update.yml new file mode 100644 index 00000000..31a474b9 --- /dev/null +++ b/roles/version_update_single_node/tasks/update.yml @@ -0,0 +1,44 @@ +--- +- name: Get all available running VMs + scale_computing.hypercore.vm_info: + register: vms + +# -------------SHUTDOWN-ALL-RUNNING------------------ + +- name: Show all running VMs + ansible.builtin.debug: + msg: "{{ item.vm_name }}" + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: running_vms + +- name: Shutdown running VMs + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: stop + when: item.power_state == 'started' or item.power_state == 'started' + loop: "{{ vms.records }}" + register: vm_shutdown_result +- ansible.builtin.debug: + var: vm_shutdown_result + +# ---------------------UPDATE----------------------- + +#- name: Update HC3 +# scale_computing.hypercore.api: +# action: post +# endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" +# when: available_updates +# loop: "{{ available_updates.records }}" + +# -------------------RESTART-VMS-------------------- + +- name: Start all VMs that were initially started + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: start + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: vm_start_result +- ansible.builtin.debug: + var: vm_start_result diff --git a/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml b/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml new file mode 100644 index 00000000..9f3de497 --- /dev/null +++ b/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml @@ -0,0 +1,49 @@ +--- +- name: Get state before update + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates_before +- ansible.builtin.debug: + var: available_updates_before + +- name: Get cluster HC3 API version before update + scale_computing.hypercore.cluster_info: + register: api_version_before +- ansible.builtin.debug: + var: api_version_before + +# -------------------------------------------------------------- + +- name: Run single-system update role + ansible.builtin.include_role: + name: version_update_single_node + +# -------------------------------------------------------------- + +- name: Get state after update + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates_after +- ansible.builtin.debug: + var: available_updates_after + +- name: Get cluster HC3 API version after update + scale_computing.hypercore.cluster_info: + register: api_version_after +- ansible.builtin.debug: + var: api_version_after + +# -------------------------------------------------------------- + +- name: Assert that updates are not available anymore + ansible.builtin.assert: + that: + - available_updates_after != available_updates_before + - available_updates_after == [] + +- name: Assert that api_version_after != api_version_before + ansible.builtin.assert: + that: + - api_version_after != api_version_before diff --git a/tests/integration/targets/version_update_single_node_role/tasks/02_update_idempotence.yml b/tests/integration/targets/version_update_single_node_role/tasks/02_update_idempotence.yml new file mode 100644 index 00000000..ac72e291 --- /dev/null +++ b/tests/integration/targets/version_update_single_node_role/tasks/02_update_idempotence.yml @@ -0,0 +1,49 @@ +--- +- name: Get state before update + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates_before +- ansible.builtin.debug: + var: available_updates_before + +- name: Get cluster HC3 API version before update + scale_computing.hypercore.cluster_info: + register: api_version_before +- ansible.builtin.debug: + var: api_version_before + +# -------------------------------------------------------------- + +- name: Run single-system update role - idempotence + ansible.builtin.include_role: + name: version_update_single_node + +# -------------------------------------------------------------- + +- name: Get state after update + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates_after +- ansible.builtin.debug: + var: available_updates_after + +- name: Get cluster HC3 API version after update + scale_computing.hypercore.cluster_info: + register: api_version_after +- ansible.builtin.debug: + var: api_version_after + +# -------------------------------------------------------------- + +- name: Assert that updates are still no available updates + ansible.builtin.assert: + that: + - available_updates_after == available_updates_before + - available_updates_after == [] + +- name: Assert that api_version_after == api_version_before + ansible.builtin.assert: + that: + - api_version_after == api_version_before diff --git a/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml b/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml new file mode 100644 index 00000000..0621c5aa --- /dev/null +++ b/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml @@ -0,0 +1,72 @@ +--- +# +# REMOVE THIS FILE WHEN FINISHED +# +- environment: + SC_HOST: "{{ sc_host }}" + SC_USERNAME: "{{ sc_username }}" + SC_PASSWORD: "{{ sc_password }}" + SC_TIMEOUT: "{{ sc_timeout }}" + +# Quick debugging, then tests + block: + - name: Get available updates + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: available_updates + - ansible.builtin.debug: + var: available_updates + + - name: Get available updates UUIDs + ansible.builtin.debug: + msg: "{{ item.uuid }}" + when: available_updates + loop: "{{ available_updates.record }}" + + - name: Get all available running VMs + scale_computing.hypercore.vm_info: + register: vms + + - name: Show all running VMs + ansible.builtin.debug: + msg: "{{ item.vm_name }}" + when: item.power_state == 'running' + loop: "{{ vms.records }}" + register: running_vms + + - name: Shutdown running VMs + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: shutdown + when: item.power_state == 'started' or item.power_state == 'running' + loop: "{{ vms.records }}" + register: vm_shutdown_result + - ansible.builtin.debug: + var: vm_shutdown_result + + - name: Show all otherwise running VMs - blocked, paused, crashed + ansible.builtin.debug: + msg: "{{ item.vm_name }}" + when: item.power_state != 'stopped' + loop: "{{ vms.records }}" + + - name: Stop otherwise running VMs - blocked, paused, crashed + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: stop + when: item.power_state != 'stopped' and item.power_state != 'running' + loop: "{{ vms.records }}" + register: vm_stop_result + - ansible.builtin.debug: + var: vm_stop_result + + - name: Start all VMs that were initially not stopped + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: start + when: item.power_state != 'stopped' + loop: "{{ vms.records }}" + register: vm_start_result + - ansible.builtin.debug: + var: vm_start_result diff --git a/tests/integration/targets/version_update_single_node_role/tasks/main.yml b/tests/integration/targets/version_update_single_node_role/tasks/main.yml index 2203a45b..c40975cb 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/main.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/main.yml @@ -5,12 +5,9 @@ SC_PASSWORD: "{{ sc_password }}" SC_TIMEOUT: "{{ sc_timeout }}" -# Quick debugging, then tests block: - - name: Get available updates - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update - register: available_updates - - ansible.builtin.debug: - var: available_updates + - name: Test role version_update_single_node + include_tasks: 01_update.yml + + - name: Test role version_update_single_node - idempotence + include_tasks: 02_update_idempotence.yml From 9d0cda091196fcc81411178280277c6f0ef3cec0 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Tue, 28 Feb 2023 10:21:45 +0100 Subject: [PATCH 05/25] Fix for sanity. --- .../version_update_single_node/tasks/main.yml | 4 +--- .../tasks/update.yml | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index b05fd4c6..19660b6c 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -4,8 +4,6 @@ action: get endpoint: /rest/v1/Update register: available_updates -- ansible.builtin.debug: - var: available_updates - name: Show available updates ansible.builtin.debug: @@ -13,4 +11,4 @@ - name: Update single-node system include_tasks: update.yml - when: available_updates \ No newline at end of file + when: available_updates diff --git a/roles/version_update_single_node/tasks/update.yml b/roles/version_update_single_node/tasks/update.yml index 31a474b9..7a6bbee5 100644 --- a/roles/version_update_single_node/tasks/update.yml +++ b/roles/version_update_single_node/tasks/update.yml @@ -19,17 +19,19 @@ when: item.power_state == 'started' or item.power_state == 'started' loop: "{{ vms.records }}" register: vm_shutdown_result -- ansible.builtin.debug: + +- name: Show shutdown results + ansible.builtin.debug: var: vm_shutdown_result # ---------------------UPDATE----------------------- -#- name: Update HC3 -# scale_computing.hypercore.api: -# action: post -# endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" -# when: available_updates -# loop: "{{ available_updates.records }}" +# - name: Update HC3 +# scale_computing.hypercore.api: +# action: post +# endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" +# when: available_updates +# loop: "{{ available_updates.records }}" # -------------------RESTART-VMS-------------------- @@ -40,5 +42,7 @@ when: item.power_state == 'started' loop: "{{ vms.records }}" register: vm_start_result -- ansible.builtin.debug: + +- name: Show restart results + ansible.builtin.debug: var: vm_start_result From 57a6562a3b77df4771e2cc60fed34c189e2caa85 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Tue, 28 Feb 2023 10:36:18 +0100 Subject: [PATCH 06/25] Update integration tests. --- ...idempotence.yml => 02_update_not_available.yml} | 0 .../version_update_single_node_role/tasks/main.yml | 14 +++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) rename tests/integration/targets/version_update_single_node_role/tasks/{02_update_idempotence.yml => 02_update_not_available.yml} (100%) diff --git a/tests/integration/targets/version_update_single_node_role/tasks/02_update_idempotence.yml b/tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml similarity index 100% rename from tests/integration/targets/version_update_single_node_role/tasks/02_update_idempotence.yml rename to tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml diff --git a/tests/integration/targets/version_update_single_node_role/tasks/main.yml b/tests/integration/targets/version_update_single_node_role/tasks/main.yml index c40975cb..6712d8b0 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/main.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/main.yml @@ -6,8 +6,20 @@ SC_TIMEOUT: "{{ sc_timeout }}" block: + - name: Get available updates + scale_computing.hypercore.api: + action: get + endpoint: /rest/v1/Update + register: updates + + - name: Test role version_update_single_node - no updates available + include_tasks: 02_update_not_available.yml + when: updates == [] + - name: Test role version_update_single_node include_tasks: 01_update.yml + when: updates != [] - name: Test role version_update_single_node - idempotence - include_tasks: 02_update_idempotence.yml + include_tasks: 02_update_not_available.yml + when: updates != [] From b29fdd022e609121c052f56d51135458ebd45e21 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Tue, 28 Feb 2023 11:04:02 +0100 Subject: [PATCH 07/25] Update task in role. --- roles/version_update_single_node/tasks/update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/version_update_single_node/tasks/update.yml b/roles/version_update_single_node/tasks/update.yml index 7a6bbee5..fd8a8759 100644 --- a/roles/version_update_single_node/tasks/update.yml +++ b/roles/version_update_single_node/tasks/update.yml @@ -16,7 +16,7 @@ scale_computing.hypercore.vm_params: vm_name: "{{ item.vm_name }}" power_state: stop - when: item.power_state == 'started' or item.power_state == 'started' + when: item.power_state == 'started' loop: "{{ vms.records }}" register: vm_shutdown_result From e5db0c766b229435a0a92e8275c52d9afa232d96 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Fri, 3 Mar 2023 10:57:14 +0100 Subject: [PATCH 08/25] Prepare for using the version_update module. --- .../version_update_single_node/tasks/main.yml | 24 +++++- .../tasks/restart_vms.yml | 11 +++ .../tasks/shutdown_vms.yml | 18 +++++ .../tasks/update.yml | 67 +++++------------ .../tasks/update.yml.old | 58 +++++++++++++++ .../tasks/01_update.yml | 8 +- .../tasks/02_update_not_available.yml | 10 +-- .../tasks/debugging.yml | 74 ++++--------------- .../tasks/main.yml | 10 +-- .../tasks/testing_tasks.yml | 5 ++ 10 files changed, 159 insertions(+), 126 deletions(-) create mode 100644 roles/version_update_single_node/tasks/restart_vms.yml create mode 100644 roles/version_update_single_node/tasks/shutdown_vms.yml create mode 100644 roles/version_update_single_node/tasks/update.yml.old create mode 100644 tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index 19660b6c..b8e7fb18 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -9,6 +9,26 @@ ansible.builtin.debug: var: available_updates -- name: Update single-node system - include_tasks: update.yml +- name: Get all available running VMs + scale_computing.hypercore.vm_info: + register: vms + +- name: Update + block: + - name: Shutdown all running VMs + include_tasks: shutdown_vms.yml + + - name: Update single-node system + include_tasks: update.my + loop: "{{ available_updates }}" + + - name: Restart previously running VMs + include_tasks: restart_vms.yml when: available_updates + +# - name: Shutdown all running VMs +# include_tasks: +# +# - name: Update single-node system +# include_tasks: update.yml +# when: available_updates diff --git a/roles/version_update_single_node/tasks/restart_vms.yml b/roles/version_update_single_node/tasks/restart_vms.yml new file mode 100644 index 00000000..6658095c --- /dev/null +++ b/roles/version_update_single_node/tasks/restart_vms.yml @@ -0,0 +1,11 @@ +- name: Start all VMs that were initially started + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: start + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: vm_start_result + +- name: Show restart results + ansible.builtin.debug: + var: vm_start_result \ No newline at end of file diff --git a/roles/version_update_single_node/tasks/shutdown_vms.yml b/roles/version_update_single_node/tasks/shutdown_vms.yml new file mode 100644 index 00000000..a4499849 --- /dev/null +++ b/roles/version_update_single_node/tasks/shutdown_vms.yml @@ -0,0 +1,18 @@ +- name: Show all running VMs + ansible.builtin.debug: + msg: "{{ item.vm_name }}" + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: running_vms + +- name: Shutdown running VMs + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: stop + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: vm_shutdown_result + +- name: Show shutdown results + ansible.builtin.debug: + var: vm_shutdown_result \ No newline at end of file diff --git a/roles/version_update_single_node/tasks/update.yml b/roles/version_update_single_node/tasks/update.yml index fd8a8759..bb683b9d 100644 --- a/roles/version_update_single_node/tasks/update.yml +++ b/roles/version_update_single_node/tasks/update.yml @@ -1,48 +1,21 @@ --- -- name: Get all available running VMs - scale_computing.hypercore.vm_info: - register: vms - -# -------------SHUTDOWN-ALL-RUNNING------------------ - -- name: Show all running VMs - ansible.builtin.debug: - msg: "{{ item.vm_name }}" - when: item.power_state == 'started' - loop: "{{ vms.records }}" - register: running_vms - -- name: Shutdown running VMs - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: stop - when: item.power_state == 'started' - loop: "{{ vms.records }}" - register: vm_shutdown_result - -- name: Show shutdown results - ansible.builtin.debug: - var: vm_shutdown_result - -# ---------------------UPDATE----------------------- - -# - name: Update HC3 -# scale_computing.hypercore.api: -# action: post -# endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" -# when: available_updates -# loop: "{{ available_updates.records }}" - -# -------------------RESTART-VMS-------------------- - -- name: Start all VMs that were initially started - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: start - when: item.power_state == 'started' - loop: "{{ vms.records }}" - register: vm_start_result - -- name: Show restart results - ansible.builtin.debug: - var: vm_start_result +# With future version_update module +- name: Update HC3 + block: + - name: Check progress + scale_computing.hypercore.version_update_status_info: + register: update_status + + - name: Update one + scale_computing.hypercore.version_update: + icos_version: "{{ item.uuid }}" + when: update_status != "COMPLETE" + + - name: Show update status + ansible.builtin.debub: + var: update_status + when: available_updates + always: + # loop: "{{ available_updates.records }}" + # TODO: Add progress check + # - wait for update to finish, then move on to next update diff --git a/roles/version_update_single_node/tasks/update.yml.old b/roles/version_update_single_node/tasks/update.yml.old new file mode 100644 index 00000000..2ad5f93d --- /dev/null +++ b/roles/version_update_single_node/tasks/update.yml.old @@ -0,0 +1,58 @@ +--- +- name: Get all available running VMs + scale_computing.hypercore.vm_info: + register: vms + +# -------------SHUTDOWN-ALL-RUNNING------------------ + +- name: Show all running VMs + ansible.builtin.debug: + msg: "{{ item.vm_name }}" + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: running_vms + +- name: Shutdown running VMs + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: stop + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: vm_shutdown_result + +- name: Show shutdown results + ansible.builtin.debug: + var: vm_shutdown_result + +# ---------------------UPDATE----------------------- + +# - name: Update HC3 +# scale_computing.hypercore.api: +# action: post +# endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" +# when: available_updates +# loop: "{{ available_updates.records }}" + +# With future version_update module +- name: Update HC3 + block: + scale_computing.hypercore.version_update: + icos_version: "{{ item.uuid }}" + when: available_updates + # loop: "{{ available_updates.records }}" + # TODO: Add progress check + # - wait for update to finish, then move on to next update + +# -------------------RESTART-VMS-------------------- + +- name: Start all VMs that were initially started + scale_computing.hypercore.vm_params: + vm_name: "{{ item.vm_name }}" + power_state: start + when: item.power_state == 'started' + loop: "{{ vms.records }}" + register: vm_start_result + +- name: Show restart results + ansible.builtin.debug: + var: vm_start_result diff --git a/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml b/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml index 9f3de497..60ed765d 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml @@ -1,8 +1,6 @@ --- - name: Get state before update - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update + scale_computing.hypercore.version_update_info: register: available_updates_before - ansible.builtin.debug: var: available_updates_before @@ -22,9 +20,7 @@ # -------------------------------------------------------------- - name: Get state after update - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update + scale_computing.hypercore.version_update_info: register: available_updates_after - ansible.builtin.debug: var: available_updates_after diff --git a/tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml b/tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml index ac72e291..938faca2 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml @@ -1,8 +1,6 @@ --- - name: Get state before update - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update + scale_computing.hypercore.version_update_info: register: available_updates_before - ansible.builtin.debug: var: available_updates_before @@ -22,9 +20,7 @@ # -------------------------------------------------------------- - name: Get state after update - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update + scale_computing.hypercore.version_update_info: register: available_updates_after - ansible.builtin.debug: var: available_updates_after @@ -37,7 +33,7 @@ # -------------------------------------------------------------- -- name: Assert that updates are still no available updates +- name: Assert that updates are still not available ansible.builtin.assert: that: - available_updates_after == available_updates_before diff --git a/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml b/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml index 0621c5aa..39cce421 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml @@ -2,71 +2,29 @@ # # REMOVE THIS FILE WHEN FINISHED # +# Quick debugging, then tests - environment: SC_HOST: "{{ sc_host }}" SC_USERNAME: "{{ sc_username }}" SC_PASSWORD: "{{ sc_password }}" - SC_TIMEOUT: "{{ sc_timeout }}" -# Quick debugging, then tests + vars: + test_list: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + block: - name: Get available updates - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update - register: available_updates - - ansible.builtin.debug: - var: available_updates - - - name: Get available updates UUIDs - ansible.builtin.debug: - msg: "{{ item.uuid }}" - when: available_updates - loop: "{{ available_updates.record }}" - - - name: Get all available running VMs - scale_computing.hypercore.vm_info: - register: vms - - - name: Show all running VMs ansible.builtin.debug: - msg: "{{ item.vm_name }}" - when: item.power_state == 'running' - loop: "{{ vms.records }}" - register: running_vms - - - name: Shutdown running VMs - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: shutdown - when: item.power_state == 'started' or item.power_state == 'running' - loop: "{{ vms.records }}" - register: vm_shutdown_result - - ansible.builtin.debug: - var: vm_shutdown_result - - - name: Show all otherwise running VMs - blocked, paused, crashed + msg: "{{ item }}" + always: + - name: Always print ansible.builtin.debug: - msg: "{{ item.vm_name }}" - when: item.power_state != 'stopped' - loop: "{{ vms.records }}" - - - name: Stop otherwise running VMs - blocked, paused, crashed - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: stop - when: item.power_state != 'stopped' and item.power_state != 'running' - loop: "{{ vms.records }}" - register: vm_stop_result - - ansible.builtin.debug: - var: vm_stop_result + msg: "always!" + when: item != 6 + loop: "{{ test_list }}" - - name: Start all VMs that were initially not stopped - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: start - when: item.power_state != 'stopped' - loop: "{{ vms.records }}" - register: vm_start_result - - ansible.builtin.debug: - var: vm_start_result diff --git a/tests/integration/targets/version_update_single_node_role/tasks/main.yml b/tests/integration/targets/version_update_single_node_role/tasks/main.yml index 6712d8b0..40a128d1 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/main.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/main.yml @@ -7,19 +7,17 @@ block: - name: Get available updates - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update + scale_computing.hypercore.version_update_info: register: updates - name: Test role version_update_single_node - no updates available include_tasks: 02_update_not_available.yml - when: updates == [] + when: updates.records == [] - name: Test role version_update_single_node include_tasks: 01_update.yml - when: updates != [] + when: updates.records != [] - name: Test role version_update_single_node - idempotence include_tasks: 02_update_not_available.yml - when: updates != [] + when: updates.records != [] diff --git a/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml b/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml new file mode 100644 index 00000000..432e75ab --- /dev/null +++ b/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml @@ -0,0 +1,5 @@ +- block: + - name: Get available updates + ansible.builtin.debug: + msg: "{{ item }}" + when: item != 6 \ No newline at end of file From 481ef596452a0cb9a1c2fb5ae74a37bb0c085136 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Fri, 3 Mar 2023 11:19:32 +0100 Subject: [PATCH 09/25] Temporarily comment out Update task in role. --- roles/version_update_single_node/tasks/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index b8e7fb18..2f977121 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -18,9 +18,9 @@ - name: Shutdown all running VMs include_tasks: shutdown_vms.yml - - name: Update single-node system - include_tasks: update.my - loop: "{{ available_updates }}" + # - name: Update single-node system + # include_tasks: update.my + # loop: "{{ available_updates }}" - name: Restart previously running VMs include_tasks: restart_vms.yml From f60ab59c3c15de36f495ac7237796014fa87dc30 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Fri, 3 Mar 2023 11:51:41 +0100 Subject: [PATCH 10/25] Fix for sanity, minor changes to role. --- roles/version_update_single_node/tasks/main.yml | 17 ++++++++++++++--- .../tasks/restart_vms.yml | 3 ++- .../tasks/shutdown_vms.yml | 3 ++- .../version_update_single_node/tasks/update.yml | 8 ++------ .../tasks/debugging.yml | 1 - 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index 2f977121..ee0f14d2 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -1,8 +1,19 @@ --- +# ------------ +# | Pseudocode +# ------------ +# 1. available_updates = get_available_updates() +# 2. next_update_index = 0 +# 3. while available_updates: +# 4. update = available_updates[next_update_index] +# 5. status = get_update_status(update) +# 6. if status != "IN PROGRESS" +# 7. apply_update(update) +# 8. if status == "COMPLETE": +# 9. next_update_index += 1 + - name: Get available updates - scale_computing.hypercore.api: - action: get - endpoint: /rest/v1/Update + scale_computing.hypercore.update_version_info: register: available_updates - name: Show available updates diff --git a/roles/version_update_single_node/tasks/restart_vms.yml b/roles/version_update_single_node/tasks/restart_vms.yml index 6658095c..eb18668f 100644 --- a/roles/version_update_single_node/tasks/restart_vms.yml +++ b/roles/version_update_single_node/tasks/restart_vms.yml @@ -1,3 +1,4 @@ +--- - name: Start all VMs that were initially started scale_computing.hypercore.vm_params: vm_name: "{{ item.vm_name }}" @@ -8,4 +9,4 @@ - name: Show restart results ansible.builtin.debug: - var: vm_start_result \ No newline at end of file + var: vm_start_result diff --git a/roles/version_update_single_node/tasks/shutdown_vms.yml b/roles/version_update_single_node/tasks/shutdown_vms.yml index a4499849..e69cf3cf 100644 --- a/roles/version_update_single_node/tasks/shutdown_vms.yml +++ b/roles/version_update_single_node/tasks/shutdown_vms.yml @@ -1,3 +1,4 @@ +--- - name: Show all running VMs ansible.builtin.debug: msg: "{{ item.vm_name }}" @@ -15,4 +16,4 @@ - name: Show shutdown results ansible.builtin.debug: - var: vm_shutdown_result \ No newline at end of file + var: vm_shutdown_result diff --git a/roles/version_update_single_node/tasks/update.yml b/roles/version_update_single_node/tasks/update.yml index bb683b9d..1bdf79e7 100644 --- a/roles/version_update_single_node/tasks/update.yml +++ b/roles/version_update_single_node/tasks/update.yml @@ -6,16 +6,12 @@ scale_computing.hypercore.version_update_status_info: register: update_status - - name: Update one + - name: Update one # next on the list scale_computing.hypercore.version_update: - icos_version: "{{ item.uuid }}" + icos_version: "{{ item.uuid }}" when: update_status != "COMPLETE" - name: Show update status ansible.builtin.debub: var: update_status when: available_updates - always: - # loop: "{{ available_updates.records }}" - # TODO: Add progress check - # - wait for update to finish, then move on to next update diff --git a/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml b/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml index 39cce421..fbb91af5 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml @@ -27,4 +27,3 @@ msg: "always!" when: item != 6 loop: "{{ test_list }}" - From b235c6024fc18df41c4f12d1a89dc736c74fa286 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Fri, 3 Mar 2023 13:44:04 +0100 Subject: [PATCH 11/25] Test how ansible include_tasks work. --- .../tasks/testing_tasks.yml | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml b/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml index 432e75ab..6db54c49 100644 --- a/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml +++ b/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml @@ -1,5 +1,22 @@ +--- +# This doesn't work +- tasks: &some_tasks + - name: Some task 1 + ansible.builtin.debug: + msg: "asdf" + + - name: Some task 2 + ansible.builtin.debug: + msg: "asdf" + + - name: Some task 3 + ansible.builtin.debug: + msg: "asdf" + + - name: Some task 4 + ansible.builtin.debug: + msg: "asdf" + - block: - - name: Get available updates - ansible.builtin.debug: - msg: "{{ item }}" - when: item != 6 \ No newline at end of file + - name: Include some tasks + include_tasks: *some_tasks From 5545e36c57f73d24c45171f424c2ada6e30ba99d Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 09:21:40 +0100 Subject: [PATCH 12/25] Update role. --- .../version_update_single_node/tasks/main.yml | 93 +++++++++++++------ .../tasks/update.yml | 17 ---- .../tasks/update.yml.old | 58 ------------ .../tasks/update_status_check.yml | 28 ++++++ 4 files changed, 92 insertions(+), 104 deletions(-) delete mode 100644 roles/version_update_single_node/tasks/update.yml delete mode 100644 roles/version_update_single_node/tasks/update.yml.old create mode 100644 roles/version_update_single_node/tasks/update_status_check.yml diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index ee0f14d2..fcff375c 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -1,45 +1,80 @@ --- -# ------------ -# | Pseudocode -# ------------ -# 1. available_updates = get_available_updates() -# 2. next_update_index = 0 -# 3. while available_updates: -# 4. update = available_updates[next_update_index] -# 5. status = get_update_status(update) -# 6. if status != "IN PROGRESS" -# 7. apply_update(update) -# 8. if status == "COMPLETE": -# 9. next_update_index += 1 - -- name: Get available updates - scale_computing.hypercore.update_version_info: +- name: Check if there is already an update in progress + scale_computing.hypercore.version_update_status_info: + register: update_status_before_update + +- name: Current update status + ansible.builtin.debug: + var: update_status_before_update + +- name: Get cluster info + scale_computing.hypercore.cluster_info: + register: cluster_info + +- name: Show cluster info + ansible.builtin.debug: + var: cluster_info + +- name: Get node info + scale_computing.hypercore.node_info: + register: node_info + +- name: Show node info + ansible.builtin.debug: + var: node_info + +- name: Check if single-node system - end host if True + ansible.builtin.meta: end_host + when: node_info.records | length > 1 + +- name: Check if already on desired version - end host if True + ansible.builtin.meta: end_host + when: cluster_info.record.icos_version == desired_version + +- name: Check if desired version available + scale_computing.hypercore.version_update_info: register: available_updates - name: Show available updates ansible.builtin.debug: var: available_updates -- name: Get all available running VMs - scale_computing.hypercore.vm_info: - register: vms +- name: End host if no update available + ansible.builtin.meta: end_host + when: available_updates.records == [] - name: Update block: + - name: Get all available running VMs + scale_computing.hypercore.vm_info: + register: vms + - name: Shutdown all running VMs include_tasks: shutdown_vms.yml + when: vms.records != [] + + # ----------------- UPDATE -------------------- - # - name: Update single-node system - # include_tasks: update.my - # loop: "{{ available_updates }}" + - name: Update single-node system + scale_computing.hypercore.version_update: + icos_version: "{{ desired_version }}" + register: update_result + + - name: Check update status + include_tasks: update_status_check.yml + + - name: Show update result + ansible.builtin.debug: + var: update_result + + # --------------------------------------------- - name: Restart previously running VMs include_tasks: restart_vms.yml - when: available_updates - -# - name: Shutdown all running VMs -# include_tasks: -# -# - name: Update single-node system -# include_tasks: update.yml -# when: available_updates + when: vms.records != [] + + - name: Check if updating to desired version failed + ansible.builtin.fail: + msg: Update to version "{{ desired_version }}" failed. + when: update_result.record.uuid != desired_version + when: update_status_before_update.record.update_status == "COMPLETED" or update_status_before_update_record.update_status != "IN PROGRESS" diff --git a/roles/version_update_single_node/tasks/update.yml b/roles/version_update_single_node/tasks/update.yml deleted file mode 100644 index 1bdf79e7..00000000 --- a/roles/version_update_single_node/tasks/update.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# With future version_update module -- name: Update HC3 - block: - - name: Check progress - scale_computing.hypercore.version_update_status_info: - register: update_status - - - name: Update one # next on the list - scale_computing.hypercore.version_update: - icos_version: "{{ item.uuid }}" - when: update_status != "COMPLETE" - - - name: Show update status - ansible.builtin.debub: - var: update_status - when: available_updates diff --git a/roles/version_update_single_node/tasks/update.yml.old b/roles/version_update_single_node/tasks/update.yml.old deleted file mode 100644 index 2ad5f93d..00000000 --- a/roles/version_update_single_node/tasks/update.yml.old +++ /dev/null @@ -1,58 +0,0 @@ ---- -- name: Get all available running VMs - scale_computing.hypercore.vm_info: - register: vms - -# -------------SHUTDOWN-ALL-RUNNING------------------ - -- name: Show all running VMs - ansible.builtin.debug: - msg: "{{ item.vm_name }}" - when: item.power_state == 'started' - loop: "{{ vms.records }}" - register: running_vms - -- name: Shutdown running VMs - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: stop - when: item.power_state == 'started' - loop: "{{ vms.records }}" - register: vm_shutdown_result - -- name: Show shutdown results - ansible.builtin.debug: - var: vm_shutdown_result - -# ---------------------UPDATE----------------------- - -# - name: Update HC3 -# scale_computing.hypercore.api: -# action: post -# endpoint: "/rest/v1/Update/{{ item.uuid }}/apply" -# when: available_updates -# loop: "{{ available_updates.records }}" - -# With future version_update module -- name: Update HC3 - block: - scale_computing.hypercore.version_update: - icos_version: "{{ item.uuid }}" - when: available_updates - # loop: "{{ available_updates.records }}" - # TODO: Add progress check - # - wait for update to finish, then move on to next update - -# -------------------RESTART-VMS-------------------- - -- name: Start all VMs that were initially started - scale_computing.hypercore.vm_params: - vm_name: "{{ item.vm_name }}" - power_state: start - when: item.power_state == 'started' - loop: "{{ vms.records }}" - register: vm_start_result - -- name: Show restart results - ansible.builtin.debug: - var: vm_start_result diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml new file mode 100644 index 00000000..cbefc4e5 --- /dev/null +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -0,0 +1,28 @@ +- name: Check update status on HC3 + block: + - name: Increment retry count for outer loop + ansible.builtin.set_fact: + retries: "{{ 0 if retries is undefined else retries | int + 1 }}" + + - name: Pause before checking update status - checks will report FAILED-RETRYING until update COMPLETE/TERMINATED + ansible.builtin.wait_for: + timeout: 60 + delegate_to: localhost + + - name: Check update status - will report FAILED-RETRYING until update COMPLETE/TERMINATED + scale_computing.hypercore.version_update_status_info: + register: update_status + until: update_status.record.update_status == "COMPLETE" | default(omit) or update_status.record.update_status == "TERMINATING" | default(omit) + retries: 100 + delay: 30 + ignore_unreachable: true + + rescue: + - fail: + msg: "Maximum retries of grouped tasks reached" + when: retries | int == 20 + + - debug: + msg: "Update status check failed due to server down / restart - retrying" + + - include_tasks: update_status_check.yml From f322c8d03db82aa3fe420e77d0b2af292214d16f Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 09:26:00 +0100 Subject: [PATCH 13/25] Fix for sanity. --- .../tasks/update_status_check.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml index cbefc4e5..f0488652 100644 --- a/roles/version_update_single_node/tasks/update_status_check.yml +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -17,12 +17,12 @@ delay: 30 ignore_unreachable: true - rescue: - - fail: - msg: "Maximum retries of grouped tasks reached" - when: retries | int == 20 + rescue: + - fail: + msg: "Maximum retries of grouped tasks reached" + when: retries | int == 20 - - debug: - msg: "Update status check failed due to server down / restart - retrying" + - debug: + msg: "Update status check failed due to server down / restart - retrying" - - include_tasks: update_status_check.yml + - include_tasks: update_status_check.yml From 405de16ead4de1b6ce92bf1f12bd491e2987bfae Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 09:31:21 +0100 Subject: [PATCH 14/25] Fix for sanity again. --- .../tasks/update_status_check.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml index f0488652..c124c314 100644 --- a/roles/version_update_single_node/tasks/update_status_check.yml +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -18,11 +18,13 @@ ignore_unreachable: true rescue: - - fail: + - name: Fail if retries reached 20 + ansible.builtin.fail: msg: "Maximum retries of grouped tasks reached" when: retries | int == 20 - - debug: + - name: Log + ansible.builtin.debug: msg: "Update status check failed due to server down / restart - retrying" - include_tasks: update_status_check.yml From 3390c64b470ca0ed5b43feeeefb311cb2562b416 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 09:40:15 +0100 Subject: [PATCH 15/25] Test commit. --- roles/version_update_single_node/tasks/update_status_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml index c124c314..2207ceb5 100644 --- a/roles/version_update_single_node/tasks/update_status_check.yml +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -28,3 +28,4 @@ msg: "Update status check failed due to server down / restart - retrying" - include_tasks: update_status_check.yml + From 5daaaa05cf365a37812c0bb60fac1cd595a68779 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 09:46:09 +0100 Subject: [PATCH 16/25] Remove blank new line. --- roles/version_update_single_node/tasks/update_status_check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml index 2207ceb5..c124c314 100644 --- a/roles/version_update_single_node/tasks/update_status_check.yml +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -28,4 +28,3 @@ msg: "Update status check failed due to server down / restart - retrying" - include_tasks: update_status_check.yml - From 9ac766d5b266ab55eecf41df1abb5cb606113261 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 09:59:50 +0100 Subject: [PATCH 17/25] Add argument_specs for role. --- .../meta/argument_specs.yml | 18 ++++++++++++++++++ .../tasks/01_update.yml | 0 .../tasks/02_update_not_available.yml | 0 .../tasks/debugging.yml | 0 .../tasks/main.yml | 0 .../tasks/testing_tasks.yml | 0 6 files changed, 18 insertions(+) create mode 100644 roles/version_update_single_node/meta/argument_specs.yml rename tests/integration/targets/{version_update_single_node_role => role_version_update_single_node}/tasks/01_update.yml (100%) rename tests/integration/targets/{version_update_single_node_role => role_version_update_single_node}/tasks/02_update_not_available.yml (100%) rename tests/integration/targets/{version_update_single_node_role => role_version_update_single_node}/tasks/debugging.yml (100%) rename tests/integration/targets/{version_update_single_node_role => role_version_update_single_node}/tasks/main.yml (100%) rename tests/integration/targets/{version_update_single_node_role => role_version_update_single_node}/tasks/testing_tasks.yml (100%) diff --git a/roles/version_update_single_node/meta/argument_specs.yml b/roles/version_update_single_node/meta/argument_specs.yml new file mode 100644 index 00000000..d60d3b8f --- /dev/null +++ b/roles/version_update_single_node/meta/argument_specs.yml @@ -0,0 +1,18 @@ +argument_specs: + + main: + short_description: Update single-node systems + description: + - Role version_update_single_node can be use to + to update a single-node HyperCore system to a + desired HyperCore version. + options: + scale_computing_hypercore_desired_version: + description: + - The desired HyperCore version we wish to update to. + - If already on desired version, the updates will not be applied. + - If there is no desired version present in the list of available + updates, no updates will be applied. + - If multi-node system was detected, no update will be applied. + required: true + type: str diff --git a/tests/integration/targets/version_update_single_node_role/tasks/01_update.yml b/tests/integration/targets/role_version_update_single_node/tasks/01_update.yml similarity index 100% rename from tests/integration/targets/version_update_single_node_role/tasks/01_update.yml rename to tests/integration/targets/role_version_update_single_node/tasks/01_update.yml diff --git a/tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml b/tests/integration/targets/role_version_update_single_node/tasks/02_update_not_available.yml similarity index 100% rename from tests/integration/targets/version_update_single_node_role/tasks/02_update_not_available.yml rename to tests/integration/targets/role_version_update_single_node/tasks/02_update_not_available.yml diff --git a/tests/integration/targets/version_update_single_node_role/tasks/debugging.yml b/tests/integration/targets/role_version_update_single_node/tasks/debugging.yml similarity index 100% rename from tests/integration/targets/version_update_single_node_role/tasks/debugging.yml rename to tests/integration/targets/role_version_update_single_node/tasks/debugging.yml diff --git a/tests/integration/targets/version_update_single_node_role/tasks/main.yml b/tests/integration/targets/role_version_update_single_node/tasks/main.yml similarity index 100% rename from tests/integration/targets/version_update_single_node_role/tasks/main.yml rename to tests/integration/targets/role_version_update_single_node/tasks/main.yml diff --git a/tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml b/tests/integration/targets/role_version_update_single_node/tasks/testing_tasks.yml similarity index 100% rename from tests/integration/targets/version_update_single_node_role/tasks/testing_tasks.yml rename to tests/integration/targets/role_version_update_single_node/tasks/testing_tasks.yml From 25d6068e1eb0b3973b5912651352e45163db2b38 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 12:11:06 +0100 Subject: [PATCH 18/25] Update role, role integration tests, fix role argument specs. --- .../version_update_single_node_role.yml | 2 +- .../meta/argument_specs.yml | 9 ++---- .../version_update_single_node/tasks/main.yml | 20 ++++++++----- .../tasks/update_status_check.yml | 13 +++++---- .../tasks/01_update.yml | 22 ++------------ .../tasks/02_update_not_available.yml | 22 ++------------ .../tasks/debugging.yml | 29 ------------------- .../tasks/main.yml | 12 ++++++++ .../tasks/testing_tasks.yml | 22 -------------- 9 files changed, 42 insertions(+), 109 deletions(-) delete mode 100644 tests/integration/targets/role_version_update_single_node/tasks/debugging.yml delete mode 100644 tests/integration/targets/role_version_update_single_node/tasks/testing_tasks.yml diff --git a/changelogs/fragments/version_update_single_node_role.yml b/changelogs/fragments/version_update_single_node_role.yml index 432b80f7..be081ba0 100644 --- a/changelogs/fragments/version_update_single_node_role.yml +++ b/changelogs/fragments/version_update_single_node_role.yml @@ -1,4 +1,4 @@ --- major_changes: - - Added a role for updating single_node systems. + - Added a role for updating single-node systems. (https://github.com/ScaleComputing/HyperCoreAnsibleCollection/pull/136) diff --git a/roles/version_update_single_node/meta/argument_specs.yml b/roles/version_update_single_node/meta/argument_specs.yml index d60d3b8f..7a61afda 100644 --- a/roles/version_update_single_node/meta/argument_specs.yml +++ b/roles/version_update_single_node/meta/argument_specs.yml @@ -1,18 +1,15 @@ +--- argument_specs: - main: short_description: Update single-node systems description: - - Role version_update_single_node can be use to - to update a single-node HyperCore system to a - desired HyperCore version. + - Role version_update_single_node can be use to to update a single-node HyperCore system to a desired HyperCore version. options: scale_computing_hypercore_desired_version: description: - The desired HyperCore version we wish to update to. - If already on desired version, the updates will not be applied. - - If there is no desired version present in the list of available - updates, no updates will be applied. + - If there is no desired version present in the list of available updates, no updates will be applied. - If multi-node system was detected, no update will be applied. required: true type: str diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index fcff375c..d3367c7f 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -23,13 +23,13 @@ ansible.builtin.debug: var: node_info -- name: Check if single-node system - end host if True +- name: Check if single-node system - end host if False ansible.builtin.meta: end_host when: node_info.records | length > 1 - name: Check if already on desired version - end host if True ansible.builtin.meta: end_host - when: cluster_info.record.icos_version == desired_version + when: cluster_info.record.icos_version == scale_computing_hypercore_desired_version - name: Check if desired version available scale_computing.hypercore.version_update_info: @@ -43,21 +43,25 @@ ansible.builtin.meta: end_host when: available_updates.records == [] +# =================================================================== + - name: Update block: - name: Get all available running VMs scale_computing.hypercore.vm_info: - register: vms + register: vm_info - name: Shutdown all running VMs include_tasks: shutdown_vms.yml + vars: + vms: "{{ vm_info }}" when: vms.records != [] # ----------------- UPDATE -------------------- - name: Update single-node system scale_computing.hypercore.version_update: - icos_version: "{{ desired_version }}" + icos_version: "{{ scale_computing_hypercore_desired_version }}" register: update_result - name: Check update status @@ -71,10 +75,12 @@ - name: Restart previously running VMs include_tasks: restart_vms.yml + vars: + vms: "{{ vm_info }}" when: vms.records != [] - name: Check if updating to desired version failed ansible.builtin.fail: - msg: Update to version "{{ desired_version }}" failed. - when: update_result.record.uuid != desired_version - when: update_status_before_update.record.update_status == "COMPLETED" or update_status_before_update_record.update_status != "IN PROGRESS" + msg: Update to version "{{ scale_computing_hypercore_desired_version }}" failed. + when: update_result.record.uuid != scale_computing_hypercore_desired_version + when: update_status_before_update.record.update_status == "COMPLETED" or update_status_before_update.record.update_status != "IN PROGRESS" diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml index c124c314..487a7149 100644 --- a/roles/version_update_single_node/tasks/update_status_check.yml +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -1,8 +1,9 @@ +--- - name: Check update status on HC3 block: - - name: Increment retry count for outer loop + - name: Increment retry_count ansible.builtin.set_fact: - retries: "{{ 0 if retries is undefined else retries | int + 1 }}" + retry_count: "{{ 0 if retry_count is undefined else retries | int + 1 }}" - name: Pause before checking update status - checks will report FAILED-RETRYING until update COMPLETE/TERMINATED ansible.builtin.wait_for: @@ -20,11 +21,11 @@ rescue: - name: Fail if retries reached 20 ansible.builtin.fail: - msg: "Maximum retries of grouped tasks reached" - when: retries | int == 20 + msg: Maximum retries of grouped tasks reached + when: retry_count | int == 20 - name: Log ansible.builtin.debug: - msg: "Update status check failed due to server down / restart - retrying" + msg: Update status check failed due to server down / restart - retrying - - include_tasks: update_status_check.yml + - include_tasks: update_status_check.yml # Recursion diff --git a/tests/integration/targets/role_version_update_single_node/tasks/01_update.yml b/tests/integration/targets/role_version_update_single_node/tasks/01_update.yml index 60ed765d..4a4ec03f 100644 --- a/tests/integration/targets/role_version_update_single_node/tasks/01_update.yml +++ b/tests/integration/targets/role_version_update_single_node/tasks/01_update.yml @@ -1,10 +1,4 @@ --- -- name: Get state before update - scale_computing.hypercore.version_update_info: - register: available_updates_before -- ansible.builtin.debug: - var: available_updates_before - - name: Get cluster HC3 API version before update scale_computing.hypercore.cluster_info: register: api_version_before @@ -15,16 +9,12 @@ - name: Run single-system update role ansible.builtin.include_role: - name: version_update_single_node + name: scale_computing.hypercore.version_update_single_node + vars: + scale_computing_hypercore_desired_version: "{{ desired_version_apply }}" # -------------------------------------------------------------- -- name: Get state after update - scale_computing.hypercore.version_update_info: - register: available_updates_after -- ansible.builtin.debug: - var: available_updates_after - - name: Get cluster HC3 API version after update scale_computing.hypercore.cluster_info: register: api_version_after @@ -33,12 +23,6 @@ # -------------------------------------------------------------- -- name: Assert that updates are not available anymore - ansible.builtin.assert: - that: - - available_updates_after != available_updates_before - - available_updates_after == [] - - name: Assert that api_version_after != api_version_before ansible.builtin.assert: that: diff --git a/tests/integration/targets/role_version_update_single_node/tasks/02_update_not_available.yml b/tests/integration/targets/role_version_update_single_node/tasks/02_update_not_available.yml index 938faca2..0fbe13f3 100644 --- a/tests/integration/targets/role_version_update_single_node/tasks/02_update_not_available.yml +++ b/tests/integration/targets/role_version_update_single_node/tasks/02_update_not_available.yml @@ -1,10 +1,4 @@ --- -- name: Get state before update - scale_computing.hypercore.version_update_info: - register: available_updates_before -- ansible.builtin.debug: - var: available_updates_before - - name: Get cluster HC3 API version before update scale_computing.hypercore.cluster_info: register: api_version_before @@ -15,16 +9,12 @@ - name: Run single-system update role - idempotence ansible.builtin.include_role: - name: version_update_single_node + name: scale_computing.hypercore.version_update_single_node + vars: + scale_computing_hypercore_desired_version: "{{ desired_version_apply }}" # -------------------------------------------------------------- -- name: Get state after update - scale_computing.hypercore.version_update_info: - register: available_updates_after -- ansible.builtin.debug: - var: available_updates_after - - name: Get cluster HC3 API version after update scale_computing.hypercore.cluster_info: register: api_version_after @@ -33,12 +23,6 @@ # -------------------------------------------------------------- -- name: Assert that updates are still not available - ansible.builtin.assert: - that: - - available_updates_after == available_updates_before - - available_updates_after == [] - - name: Assert that api_version_after == api_version_before ansible.builtin.assert: that: diff --git a/tests/integration/targets/role_version_update_single_node/tasks/debugging.yml b/tests/integration/targets/role_version_update_single_node/tasks/debugging.yml deleted file mode 100644 index fbb91af5..00000000 --- a/tests/integration/targets/role_version_update_single_node/tasks/debugging.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -# -# REMOVE THIS FILE WHEN FINISHED -# -# Quick debugging, then tests -- environment: - SC_HOST: "{{ sc_host }}" - SC_USERNAME: "{{ sc_username }}" - SC_PASSWORD: "{{ sc_password }}" - - vars: - test_list: - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - block: - - name: Get available updates - ansible.builtin.debug: - msg: "{{ item }}" - always: - - name: Always print - ansible.builtin.debug: - msg: "always!" - when: item != 6 - loop: "{{ test_list }}" diff --git a/tests/integration/targets/role_version_update_single_node/tasks/main.yml b/tests/integration/targets/role_version_update_single_node/tasks/main.yml index 40a128d1..38a8b539 100644 --- a/tests/integration/targets/role_version_update_single_node/tasks/main.yml +++ b/tests/integration/targets/role_version_update_single_node/tasks/main.yml @@ -5,19 +5,31 @@ SC_PASSWORD: "{{ sc_password }}" SC_TIMEOUT: "{{ sc_timeout }}" + vars: + desired_version_new: 9.1.23.210897 + desired_version_current: 9.1.18.209840 + block: - name: Get available updates scale_computing.hypercore.version_update_info: register: updates + - ansible.builtin.debug: + var: updates - name: Test role version_update_single_node - no updates available include_tasks: 02_update_not_available.yml + vars: + desired_version_apply: "{{ desired_version_current }}" when: updates.records == [] - name: Test role version_update_single_node include_tasks: 01_update.yml + vars: + desired_version_apply: "{{ desired_version_new }}" when: updates.records != [] - name: Test role version_update_single_node - idempotence include_tasks: 02_update_not_available.yml + vars: + desired_version_apply: "{{ desired_version_new }}" when: updates.records != [] diff --git a/tests/integration/targets/role_version_update_single_node/tasks/testing_tasks.yml b/tests/integration/targets/role_version_update_single_node/tasks/testing_tasks.yml deleted file mode 100644 index 6db54c49..00000000 --- a/tests/integration/targets/role_version_update_single_node/tasks/testing_tasks.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -# This doesn't work -- tasks: &some_tasks - - name: Some task 1 - ansible.builtin.debug: - msg: "asdf" - - - name: Some task 2 - ansible.builtin.debug: - msg: "asdf" - - - name: Some task 3 - ansible.builtin.debug: - msg: "asdf" - - - name: Some task 4 - ansible.builtin.debug: - msg: "asdf" - -- block: - - name: Include some tasks - include_tasks: *some_tasks From b7e2bfba9adb332b0925fc5ee23912cce4a5145f Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 12:24:14 +0100 Subject: [PATCH 19/25] Fix argument specs. --- roles/version_update_single_node/meta/argument_specs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/version_update_single_node/meta/argument_specs.yml b/roles/version_update_single_node/meta/argument_specs.yml index 7a61afda..8f4193c3 100644 --- a/roles/version_update_single_node/meta/argument_specs.yml +++ b/roles/version_update_single_node/meta/argument_specs.yml @@ -1,4 +1,3 @@ ---- argument_specs: main: short_description: Update single-node systems From 73b85741fff609fed7822fd9315764a9c0d24c36 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 13:32:18 +0100 Subject: [PATCH 20/25] Update role as per requests. --- roles/version_update_single_node/tasks/main.yml | 4 ++++ .../version_update_single_node/tasks/update_status_check.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index d3367c7f..a7c37b78 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -43,6 +43,10 @@ ansible.builtin.meta: end_host when: available_updates.records == [] +- name: Check if desired update is available - end host if Not available + ansible.builtin.meta: end_host + when: not scale_computing_hypercore_desired_version in (available_updates.records | map(attribute='uuid') | list) + # =================================================================== - name: Update diff --git a/roles/version_update_single_node/tasks/update_status_check.yml b/roles/version_update_single_node/tasks/update_status_check.yml index 487a7149..6edce693 100644 --- a/roles/version_update_single_node/tasks/update_status_check.yml +++ b/roles/version_update_single_node/tasks/update_status_check.yml @@ -5,6 +5,7 @@ ansible.builtin.set_fact: retry_count: "{{ 0 if retry_count is undefined else retries | int + 1 }}" + # We might be able to remove this task - name: Pause before checking update status - checks will report FAILED-RETRYING until update COMPLETE/TERMINATED ansible.builtin.wait_for: timeout: 60 From eb4c4af033d461108adac501cdf1644e40bd1045 Mon Sep 17 00:00:00 2001 From: Ana Zobec Date: Mon, 6 Mar 2023 15:05:40 +0100 Subject: [PATCH 21/25] Add example for using this role. --- examples/version_update_single_node.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 examples/version_update_single_node.yml diff --git a/examples/version_update_single_node.yml b/examples/version_update_single_node.yml new file mode 100644 index 00000000..34a9fec9 --- /dev/null +++ b/examples/version_update_single_node.yml @@ -0,0 +1,15 @@ +--- +- name: Update a HyperCore single-node system + hosts: localhost + connection: local + gather_facts: false + + vars: + desired_version: 9.1.23.210897 + + tasks: + - name: Update HyperCore single-node system to a desired version + include_role: + name: scale_computing.hypercore.version_update_single_node + vars: + scale_computing_hypercore_desired_version: "{{ desired_version }}" From b35ecda2d368c407590af9041b2bb266cb6f2cbb Mon Sep 17 00:00:00 2001 From: Justin Cinkelj Date: Tue, 7 Mar 2023 07:44:58 +0100 Subject: [PATCH 22/25] Run example in check_mode Signed-off-by: Justin Cinkelj --- examples/version_update_single_node.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/version_update_single_node.yml b/examples/version_update_single_node.yml index 34a9fec9..7ed40b16 100644 --- a/examples/version_update_single_node.yml +++ b/examples/version_update_single_node.yml @@ -3,6 +3,8 @@ hosts: localhost connection: local gather_facts: false + # Comment out check_mode=true if you really want to start update. + check_mode: true vars: desired_version: 9.1.23.210897 From bd305bc367b8891910c79a89a9dcb668844f7ff9 Mon Sep 17 00:00:00 2001 From: Justin Cinkelj Date: Tue, 7 Mar 2023 07:49:50 +0100 Subject: [PATCH 23/25] Remove redundunt check Task "Check if desired update is available - end host if Not available" will also end play if there is no update available. Signed-off-by: Justin Cinkelj --- roles/version_update_single_node/tasks/main.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index a7c37b78..e825604f 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -39,10 +39,6 @@ ansible.builtin.debug: var: available_updates -- name: End host if no update available - ansible.builtin.meta: end_host - when: available_updates.records == [] - - name: Check if desired update is available - end host if Not available ansible.builtin.meta: end_host when: not scale_computing_hypercore_desired_version in (available_updates.records | map(attribute='uuid') | list) From b278d29dff270f3294bf6d160a5210f35b0d41e7 Mon Sep 17 00:00:00 2001 From: Justin Cinkelj Date: Tue, 7 Mar 2023 08:00:11 +0100 Subject: [PATCH 24/25] Replace end_host with fail Maybe playbook author has some block with rescue/always section, and such code should be run if update fails. Signed-off-by: Justin Cinkelj --- roles/version_update_single_node/tasks/main.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index e825604f..5c91d5f4 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -23,8 +23,11 @@ ansible.builtin.debug: var: node_info -- name: Check if single-node system - end host if False - ansible.builtin.meta: end_host +- name: Check if single-node system - fail if not + ansible.builtin.fail: + msg: >- + The role should be used only with single node systems. + This system does have {{ node_info.records | length }} nodes. when: node_info.records | length > 1 - name: Check if already on desired version - end host if True @@ -39,8 +42,11 @@ ansible.builtin.debug: var: available_updates -- name: Check if desired update is available - end host if Not available - ansible.builtin.meta: end_host +- name: Check if desired update is available - fail if not available + ansible.builtin.fail: + msg: >- + Requested update {{ scale_computing_hypercore_desired_version }} is not + in available_updates {{ available_updates.records | map(attribute='uuid') | list }} when: not scale_computing_hypercore_desired_version in (available_updates.records | map(attribute='uuid') | list) # =================================================================== From 80dda4d2912ec255a33e1fe9ebc36f5720192a8f Mon Sep 17 00:00:00 2001 From: Justin Cinkelj Date: Tue, 7 Mar 2023 08:13:20 +0100 Subject: [PATCH 25/25] Make role idempotent - do nothing if cluster is already on correct version We should not fail in such case. Signed-off-by: Justin Cinkelj --- .../version_update_single_node/tasks/main.yml | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/roles/version_update_single_node/tasks/main.yml b/roles/version_update_single_node/tasks/main.yml index 5c91d5f4..5f3b87f3 100644 --- a/roles/version_update_single_node/tasks/main.yml +++ b/roles/version_update_single_node/tasks/main.yml @@ -30,29 +30,25 @@ This system does have {{ node_info.records | length }} nodes. when: node_info.records | length > 1 -- name: Check if already on desired version - end host if True - ansible.builtin.meta: end_host - when: cluster_info.record.icos_version == scale_computing_hypercore_desired_version - -- name: Check if desired version available - scale_computing.hypercore.version_update_info: - register: available_updates - -- name: Show available updates - ansible.builtin.debug: - var: available_updates - -- name: Check if desired update is available - fail if not available - ansible.builtin.fail: - msg: >- - Requested update {{ scale_computing_hypercore_desired_version }} is not - in available_updates {{ available_updates.records | map(attribute='uuid') | list }} - when: not scale_computing_hypercore_desired_version in (available_updates.records | map(attribute='uuid') | list) - # =================================================================== - name: Update block: + - name: Get available updates + scale_computing.hypercore.version_update_info: + register: available_updates + + - name: Show available updates + ansible.builtin.debug: + var: available_updates + + - name: Check if desired update is available - fail if not available + ansible.builtin.fail: + msg: >- + Requested update {{ scale_computing_hypercore_desired_version }} is not + in available_updates {{ available_updates.records | map(attribute='uuid') | list }} + when: not scale_computing_hypercore_desired_version in (available_updates.records | map(attribute='uuid') | list) + - name: Get all available running VMs scale_computing.hypercore.vm_info: register: vm_info @@ -89,4 +85,6 @@ ansible.builtin.fail: msg: Update to version "{{ scale_computing_hypercore_desired_version }}" failed. when: update_result.record.uuid != scale_computing_hypercore_desired_version - when: update_status_before_update.record.update_status == "COMPLETED" or update_status_before_update.record.update_status != "IN PROGRESS" + when: + - cluster_info.record.icos_version != scale_computing_hypercore_desired_version + - update_status_before_update.record.update_status == "COMPLETED" or update_status_before_update.record.update_status != "IN PROGRESS"