From 9984a93359f36f67379ddf20f8250792588caedb Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 8 Aug 2019 14:51:09 -0400 Subject: [PATCH] Backup and Restore using Ansible Playbook This commit fixes some bugs in backup and restore_platform playbook: 1. ansible_port is not defined. 2. The pre-tasks in restore_platform playbook should be delegated to localhost. 3. KUBECONFIG environment variable cannot be retrieved via lookup plugins because these plugins are evaluated on the Ansible control machine. 4. Add a check for /opt/platform/config//ssh_config before restore it. It also adds loop_control to reduce output when estimating the backup size. Change-Id: I3e54a923460f817e4082269cc97b2613396db896 Story: 2004761 Task: 36044 Signed-off-by: Wei Zhou --- .../roles/backup/backup-system/tasks/main.yml | 2 + .../roles/backup/backup-system/vars/main.yml | 2 +- .../roles/common/tasks/main.yml | 5 ++ .../restore-openstack/restore/vars/main.yml | 2 +- .../playbooks/bootstrap/restore_platform.yml | 65 ++++++++++--------- .../apply-bootstrap-manifest/tasks/main.yml | 41 +++++++----- 6 files changed, 68 insertions(+), 49 deletions(-) diff --git a/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/tasks/main.yml b/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/tasks/main.yml index 7a3ff8a25..dc5eab020 100644 --- a/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/tasks/main.yml +++ b/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/tasks/main.yml @@ -169,6 +169,8 @@ set_fact: total_size_estimation: "{{ total_size_estimation|default(1024*128)|int + item.stdout|int }}" with_items: "{{ size_output.results }}" + loop_control: + label: "{{ item.item }}" - name: Check if there is enough free space in the archive dir to create backup shell: "df -k /opt/backups --output=avail | tail -1" diff --git a/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/vars/main.yml b/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/vars/main.yml index 9c83689c0..1553e21ca 100644 --- a/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/vars/main.yml +++ b/playbookconfig/src/playbooks/backup-restore/roles/backup/backup-system/vars/main.yml @@ -1,5 +1,5 @@ --- -kube_config_dir: "{{ lookup('env', 'KUBECONFIG') }}" +kube_config_dir: /etc/kubernetes/admin.conf skip_os_dbs: ['Database', 'information_schema', 'performance_schema', 'mysql', 'horizon', 'panko', 'gnocchi'] diff --git a/playbookconfig/src/playbooks/backup-restore/roles/common/tasks/main.yml b/playbookconfig/src/playbooks/backup-restore/roles/common/tasks/main.yml index 31781ed55..28f1eaabe 100644 --- a/playbookconfig/src/playbooks/backup-restore/roles/common/tasks/main.yml +++ b/playbookconfig/src/playbooks/backup-restore/roles/common/tasks/main.yml @@ -8,7 +8,12 @@ # This role contains common components (tasks, vars, etc.) that # can be shared by all the backup and restore playbooks. +# Check host connectivity - block: + - name: Set SSH port + set_fact: + ansible_port: "{{ ansible_port | default(22) }}" + - name: Update SSH known hosts lineinfile: path: ~/.ssh/known_hosts diff --git a/playbookconfig/src/playbooks/backup-restore/roles/restore-openstack/restore/vars/main.yml b/playbookconfig/src/playbooks/backup-restore/roles/restore-openstack/restore/vars/main.yml index 0aa39bf0d..adac0e543 100644 --- a/playbookconfig/src/playbooks/backup-restore/roles/restore-openstack/restore/vars/main.yml +++ b/playbookconfig/src/playbooks/backup-restore/roles/restore-openstack/restore/vars/main.yml @@ -7,5 +7,5 @@ platform_permdir: /opt/platform restore_openstack_in_progress_flag: "{{ platform_permdir }}/.restore_openstack_in_progress" -kube_config_dir: "{{ lookup('env', 'KUBECONFIG') }}" +kube_config_dir: /etc/kubernetes/admin.conf mariadb_pod: mariadb-server-0 diff --git a/playbookconfig/src/playbooks/bootstrap/restore_platform.yml b/playbookconfig/src/playbooks/bootstrap/restore_platform.yml index e0d274139..c26b068a8 100644 --- a/playbookconfig/src/playbooks/bootstrap/restore_platform.yml +++ b/playbookconfig/src/playbooks/bootstrap/restore_platform.yml @@ -4,50 +4,53 @@ # # SPDX-License-Identifier: Apache-2.0 # -- hosts: localhost +- hosts: all gather_facts: no vars_files: - host_vars/default.yml pre_tasks: - - name: Fail if backup_filename is not defined or set - fail: - msg: "Mandatory configuration parameter backup_filename is not defined or set." - when: backup_filename is not defined or backup_filename is none - - - name: Look for override backup file in the backup tarball - shell: "tar -tf {{ host_backup_dir }}/{{ backup_filename }} | grep '_override_backup.yml'" - args: - warn: false - failed_when: false - register: search_result - - block: - - name: Extract override backup file - shell: >- - tar -C {{ override_files_dir }} -xf {{ host_backup_dir }}/{{ backup_filename }} --transform='s,.*/,,' - {{ search_result.stdout_lines[0] }} + - name: Fail if backup_filename is not defined or set + fail: + msg: "Mandatory configuration parameter backup_filename is not defined or set." + when: backup_filename is not defined or backup_filename is none + + - name: Look for override backup file in the backup tarball + shell: "tar -tf {{ host_backup_dir }}/{{ backup_filename }} | grep '_override_backup.yml'" args: warn: false + failed_when: false + register: search_result - - name: Prepare to rename override file - set_fact: - override_filename: "{{ (search_result.stdout_lines[0] | basename).split('_')[0] }}.yml" + - block: + - name: Extract override backup file + shell: >- + tar -C {{ override_files_dir }} -xf {{ host_backup_dir }}/{{ backup_filename }} --transform='s,.*/,,' + {{ search_result.stdout_lines[0] }} + args: + warn: false - - name: Rename override file - command: >- - mv {{ override_files_dir }}/{{ (search_result.stdout_lines[0] | basename) }} - {{ override_files_dir }}/{{ override_filename }} + - name: Prepare to rename override file + set_fact: + override_filename: "{{ (search_result.stdout_lines[0] | basename).split('_override_backup')[0] }}.yml" - when: search_result.rc == 0 + - name: Rename override file + command: >- + mv -f {{ override_files_dir }}/{{ (search_result.stdout_lines[0] | basename) }} + {{ override_files_dir }}/{{ override_filename }} - - name: Fail if override file is missing - fail: - msg: >- - Cannot find {{ host_backup_dir }}/{{ backup_filename }} - or the override file is missing in the backup tarball! - when: search_result.rc != 0 + when: search_result.rc == 0 + + - name: Fail if override file is missing + fail: + msg: >- + Cannot find {{ host_backup_dir }}/{{ backup_filename }} + or the override file is missing in the backup tarball! + when: search_result.rc != 0 + + delegate_to: localhost - name: Run bootstrap playbook with restore mode import_playbook: bootstrap.yml mode='restore' diff --git a/playbookconfig/src/playbooks/bootstrap/roles/apply-bootstrap-manifest/tasks/main.yml b/playbookconfig/src/playbooks/bootstrap/roles/apply-bootstrap-manifest/tasks/main.yml index 0b60c0265..003d81efc 100644 --- a/playbookconfig/src/playbooks/bootstrap/roles/apply-bootstrap-manifest/tasks/main.yml +++ b/playbookconfig/src/playbooks/bootstrap/roles/apply-bootstrap-manifest/tasks/main.yml @@ -48,26 +48,35 @@ args: warn: false - - name: Create temp ssh_config dir - file: - path: "{{ temp_ssh_config_dir }}" - state: directory - owner: root - group: root - mode: 0755 - - - name: Prefetch ssh_config - command: >- - tar -C {{ temp_ssh_config_dir }} -xpf {{ staging_dir }}/{{ backup_filename }} --transform='s,.*/,,' - {{ short_ssh_config_permdir }} + - name: Look for ssh_config dir in the backup tarball + shell: "tar -tf {{ staging_dir }}/{{ backup_filename }} | grep 'opt/platform/config/.*/ssh_config'" args: warn: false + failed_when: false + register: search_ssh_config - - name: Remove the unwanted directory - file: - path: "{{ temp_ssh_config_dir }}/ssh_config" - state: absent + - block: + - name: Create temp ssh_config dir + file: + path: "{{ temp_ssh_config_dir }}" + state: directory + owner: root + group: root + mode: 0755 + - name: Prefetch ssh_config + command: >- + tar -C {{ temp_ssh_config_dir }} -xpf {{ staging_dir }}/{{ backup_filename }} --transform='s,.*/,,' + {{ short_ssh_config_permdir }} + args: + warn: false + + - name: Remove the unwanted directory + file: + path: "{{ temp_ssh_config_dir }}/ssh_config" + state: absent + + when: search_ssh_config.rc == 0 when: mode == 'restore' - name: Applying puppet bootstrap manifest