From 5d802971b98c98546fbd902738fb907352628f0f Mon Sep 17 00:00:00 2001 From: David Sullivan Date: Tue, 4 Aug 2020 14:45:17 -0400 Subject: [PATCH] User populated images not present after SX upgrade After a SX upgrade any custom images pushed to registry.local are lost. Pods using those images will remain in ImagePullBackOff until the images are pushed manually. This change will restore those images during the SX upgrade. Change-Id: I3f902f8c0095cb6da014895f6aee55a3a057e616 Partial-Bug: 1886152 Signed-off-by: David Sullivan --- .../host_vars/upgrade-platform/default.yml | 6 +++ .../restore-more-data/tasks/main.yml | 10 ----- .../tasks/main.yml | 2 +- .../prepare-env/tasks/main.yml | 43 +++++++++++++++++++ .../unlock-host/tasks/main.yml | 18 ++++++++ .../src/playbooks/upgrade_platform.yml | 2 + 6 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 playbookconfig/src/playbooks/roles/upgrade-platform/unlock-host/tasks/main.yml diff --git a/playbookconfig/src/playbooks/host_vars/upgrade-platform/default.yml b/playbookconfig/src/playbooks/host_vars/upgrade-platform/default.yml index 6b64c0b5b..f4fa833db 100644 --- a/playbookconfig/src/playbooks/host_vars/upgrade-platform/default.yml +++ b/playbookconfig/src/playbooks/host_vars/upgrade-platform/default.yml @@ -35,3 +35,9 @@ override_files_dir: "{{ lookup('env', 'HOME') }}" # If this option is not specified this playbook will attempt to find the file on the host under # /opt/platform-backup/ upgrade_data_file: + +# The full path and filename of the upgrade_images_data file. +# eg /opt/platform-backup/upgrade_images_data_2020-07-16T215224_a75eec9a-c27b-4878-8df9-9e76ac9f1bc3.tgz +# If this option is not specified this playbook will attempt to find the file on the host under +# /opt/platform-backup/ +upgrade_images_data_file: diff --git a/playbookconfig/src/playbooks/roles/restore-platform/restore-more-data/tasks/main.yml b/playbookconfig/src/playbooks/roles/restore-platform/restore-more-data/tasks/main.yml index ce8dfe2be..809a4c75f 100644 --- a/playbookconfig/src/playbooks/roles/restore-platform/restore-more-data/tasks/main.yml +++ b/playbookconfig/src/playbooks/roles/restore-platform/restore-more-data/tasks/main.yml @@ -603,13 +603,3 @@ file: path: "{{ ansible_remote_tmp }}" state: absent - -# Unlock controller-0 for subcloud upgrades -# # Retry for 5 mins as the first unlock can require a call to update_sriov_config -- name: Unlock host - shell: source /etc/platform/openrc; system host-unlock controller-0 - retries: 10 - delay: 30 - register: result - until: result.rc == 0 - when: migrate_platform_data is defined and migrate_platform_data and distributed_cloud_role == 'subcloud' diff --git a/playbookconfig/src/playbooks/roles/restore-user-images/restore-local-registry-images/tasks/main.yml b/playbookconfig/src/playbooks/roles/restore-user-images/restore-local-registry-images/tasks/main.yml index ff20137f4..6e7a55809 100644 --- a/playbookconfig/src/playbooks/roles/restore-user-images/restore-local-registry-images/tasks/main.yml +++ b/playbookconfig/src/playbooks/roles/restore-user-images/restore-local-registry-images/tasks/main.yml @@ -32,7 +32,7 @@ "{{ image_list_query.stdout_lines | join(',') }}" when: image_list_query.stdout_lines|length > 0 - when: file_result.stat.exists + when: file_result.stat.exists and file_result.stat.size > 0 when: docker_images_backup is defined diff --git a/playbookconfig/src/playbooks/roles/upgrade-platform/prepare-env/tasks/main.yml b/playbookconfig/src/playbooks/roles/upgrade-platform/prepare-env/tasks/main.yml index 11956796c..d741d4ce9 100644 --- a/playbookconfig/src/playbooks/roles/upgrade-platform/prepare-env/tasks/main.yml +++ b/playbookconfig/src/playbooks/roles/upgrade-platform/prepare-env/tasks/main.yml @@ -89,6 +89,49 @@ when: upgrade_data_file is defined and upgrade_data_file is not none +- block: + # The upgrade image data file will be placed under the default_upgrade_data_dir during upgrade-start + # The name is formatted upgrade_images_data__.tgz + # The file extension will be .tgz.zero if no images were present during the backup + - name: Find upgrade_images_data tar file + find: + paths: "{{ upgrade_data_dir }}" + patterns: + - 'upgrade_images_data*.tgz' + - 'upgrade_images_data*.tgz.zero' + register: upgrade_images_find_output + + - name: Check presence of upgrade_images_data + fail: + msg: > + "Could not find upgrade_images_data file in {{ upgrade_data_dir }}." + when: upgrade_images_find_output.matched == 0 + + - name: Set upgrade_images_data value + set_fact: + docker_images_backup: "{{ latest_upgrade_images_data.path }}" + vars: + latest_upgrade_images_data: "{{ upgrade_images_find_output.files | sort(attribute='ctime', reverse=True) | first }}" + + when: upgrade_images_data_file is not defined or upgrade_images_data_file is none + +- block: + - name: Check for upgrade_images_data on host + stat: + path: "{{ upgrade_images_data_file }}" + register: host_upgrade_images_data_file + + - name: Fail if the upgrade_images_data file is not found + fail: + msg: "Upgrade data file '{{ upgrade_images_data_file }}' not found." + when: not host_upgrade_images_data_file.stat.exists + + - name: Set upgrade_images_data value + set_fact: + docker_images_backup: "{{ upgrade_images_data_file }}" + + when: upgrade_images_data_file is defined and upgrade_images_data_file is not none + - name: Ensure temporary data path is present file: path: "{{ temp_upgrade_platform_path }}" diff --git a/playbookconfig/src/playbooks/roles/upgrade-platform/unlock-host/tasks/main.yml b/playbookconfig/src/playbooks/roles/upgrade-platform/unlock-host/tasks/main.yml new file mode 100644 index 000000000..fd78a2ba5 --- /dev/null +++ b/playbookconfig/src/playbooks/roles/upgrade-platform/unlock-host/tasks/main.yml @@ -0,0 +1,18 @@ +--- +# +# Copyright (c) 2020 Wind River Systems, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# ROLE DESCRIPTION: +# This role will unlock the host when required +# +# Unlock controller-0 for subcloud upgrades +# Retry for 5 mins as the first unlock can require a call to update_sriov_config +- name: Unlock host + shell: source /etc/platform/openrc; system host-unlock controller-0 + retries: 10 + delay: 30 + register: result + until: result.rc == 0 + when: distributed_cloud_role == 'subcloud' diff --git a/playbookconfig/src/playbooks/upgrade_platform.yml b/playbookconfig/src/playbooks/upgrade_platform.yml index 025b964fd..161099e0e 100644 --- a/playbookconfig/src/playbooks/upgrade_platform.yml +++ b/playbookconfig/src/playbooks/upgrade_platform.yml @@ -25,3 +25,5 @@ roles: - { role: restore-platform/restore-more-data, become: yes } + - { role: restore-user-images/restore-local-registry-images, become: yes } + - upgrade-platform/unlock-host