From 4b283ae9ea4e34d78c597b5b4c0e11656f828c93 Mon Sep 17 00:00:00 2001 From: Michele Baldessari Date: Fri, 17 Jul 2020 12:13:03 +0200 Subject: [PATCH] pcmk_remote FFU support for Instance HA The idea here is to set an override key like the following during the upgrade: hiera -c /etc/puppet/hiera.yaml pacemaker_remote_short_node_names_override ["compute-0"] So that puppet-tripleo can detect the key and act accordingly knowning that it is being upgraded (main reason is that the authkey management for remotes needs to be special-cased in puppet). Once the upgrade is completed we remove the key in post_upgrade_tasks. Tested this on a number of runs and confirmed that: - The IHA FFU completed correctly on controlplane + computes - Tempest still works after the FFU - The override keys are correctly removed at the end of the upgrade of each compute node NB: Backport to train had a small conflict due to puppet include having :: as a prefix Closes-Bug: #1888398 Change-Id: I8bc42fb758a333adc9cd65602b44fabee6fc4041 (cherry picked from commit 2f460accb9800b2232c7cf783907b78bb94d98ef) (cherry picked from commit 83874163376e0cc7fe88071316c04fd3a0d62609) --- .../pacemaker-remote-baremetal-puppet.yaml | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/deployment/pacemaker/pacemaker-remote-baremetal-puppet.yaml b/deployment/pacemaker/pacemaker-remote-baremetal-puppet.yaml index ee73a46e32..6bfd35e6e0 100644 --- a/deployment/pacemaker/pacemaker-remote-baremetal-puppet.yaml +++ b/deployment/pacemaker/pacemaker-remote-baremetal-puppet.yaml @@ -120,3 +120,63 @@ outputs: - {get_param: PacemakerRemoteLoggingSource} step_config: | include ::tripleo::profile::base::pacemaker_remote + upgrade_tasks: + - name: Create hiera data to upgrade pacemaker remote in a stepwise manner. + when: + - step|int == 1 + block: + - name: set pacemaker upgrade remote node facts in a single-node environment + set_fact: + pacemaker_remote_short_node_names_upgraded: "{{ pacemaker_remote_short_node_names }}" + cacheable: no + when: groups['pacemaker_remote'] | length <= 1 + - name: set pacemaker remote upgrade node facts from the limit option + set_fact: + pacemaker_remote_short_node_names_upgraded: "{{ pacemaker_remote_short_node_names_upgraded|default([]) + [item.split('.')[0]] }}" + cacheable: no + when: + - groups['pacemaker_remote'] | length > 1 + - item.split('.')[0] in ansible_limit.split(':') + loop: "{{ pacemaker_remote_short_node_names | default([]) }}" + - debug: + msg: "Prepare pacemaker remote upgrade for {{ pacemaker_remote_short_node_names_upgraded }}" + - name: set pacemaker remote node ips fact from the names fact + set_fact: + # Generate matching IPs for the names, e.g. for these varaible values: + # pacemaker_node_ips: [ "1", "2", "3" ] + # pacemaker_short_node_names: [ "a", "b", "c" ] + # pacemaker_short_node_names_override: [ "b" ] + # it will set: + # pacemaker_node_ips_override: [ "2" ] + pacemaker_remote_node_ips_upgraded: "{{ + dict(pacemaker_remote_short_node_names|zip(pacemaker_remote_node_ips)) + | dict2items + | selectattr('key', 'in', pacemaker_remote_short_node_names_upgraded) + | map(attribute='value') + | list }}" + cacheable: no + - name: add the pacemaker remote short name to hiera data for the upgrade. + include_role: + name: tripleo_upgrade_hiera + tasks_from: set.yml + vars: + tripleo_upgrade_key: pacemaker_remote_short_node_names_override + tripleo_upgrade_value: "{{pacemaker_remote_short_node_names_upgraded}}" + - name: add the pacemaker remote ips to hiera data for the upgrade. + include_role: + name: tripleo_upgrade_hiera + tasks_from: set.yml + vars: + tripleo_upgrade_key: pacemaker_remote_node_ips_override + tripleo_upgrade_value: "{{pacemaker_remote_node_ips_upgraded}}" + post_upgrade_tasks: + - name: remove the extra hiera data needed for the upgrade. + when: step|int == 1 + include_role: + name: tripleo_upgrade_hiera + tasks_from: remove.yml + vars: + tripleo_upgrade_key: "{{item}}" + loop: + - pacemaker_remote_short_node_names_override + - pacemaker_remote_node_ips_override