205 lines
6.8 KiB
YAML
205 lines
6.8 KiB
YAML
---
|
|
# Copyright 2019 Red Hat, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
# "backup_and_restore" will search for and load any operating system variable file
|
|
|
|
# found within the "vars/" path. If no OS files are found the task will skip.
|
|
- name: Gather variables for each operating system
|
|
include_vars: "{{ item }}"
|
|
with_first_found:
|
|
- skip: true
|
|
files:
|
|
- "{{ ansible_facts['distribution'] | lower }}-{{ ansible_facts['distribution_version'] | lower }}.yml"
|
|
- "{{ ansible_facts['distribution'] | lower }}-{{ ansible_facts['distribution_major_version'] | lower }}.yml"
|
|
- "{{ ansible_facts['os_family'] | lower }}-{{ ansible_facts['distribution_major_version'] | lower }}.yml"
|
|
- "{{ ansible_facts['distribution'] | lower }}.yml"
|
|
- "{{ ansible_facts['os_family'] | lower }}-{{ ansible_facts['distribution_version'].split('.')[0] }}.yml"
|
|
- "{{ ansible_facts['os_family'] | lower }}.yml"
|
|
tags:
|
|
- always
|
|
|
|
- name: Install required packages for ReaR
|
|
package:
|
|
name: "{{ tripleo_backup_and_restore_rear_packages }}"
|
|
state: present
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Remove ReaR rpm default cron programming
|
|
file:
|
|
path: /etc/cron.d/rear
|
|
state: absent
|
|
when: tripleo_backup_and_restore_remove_default_cronjob | bool
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Get local hostname
|
|
command: hostname
|
|
register: tripleo_backup_and_restore_hostname
|
|
when: tripleo_backup_and_restore_hostname is undefined
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Set bootstrap nodeid
|
|
register: tripleo_backup_and_restore_bootstrap_nodeid
|
|
command: |
|
|
hiera -c {{ tripleo_backup_and_restore_hiera_config_file }} 'mysql_short_bootstrap_node_name'
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: List enabled services by node
|
|
register: tripleo_backup_and_restore_enabled_services
|
|
command: |
|
|
hiera -c {{ tripleo_backup_and_restore_hiera_config_file }} 'service_names'
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Calculate exclude paths
|
|
set_fact:
|
|
tripleo_backup_and_restore_exclude_paths:
|
|
- "{{ tripleo_backup_and_restore_exclude_paths_common }}"
|
|
- "{{ (tripleo_backup_and_restore_enabled_services.stdout is search('nova_compute')) |
|
|
ternary(tripleo_backup_and_restore_exclude_paths_compute, []) }}"
|
|
- "{{ (tripleo_backup_and_restore_bootstrap_nodeid.stdout != tripleo_backup_and_restore_hostname.stdout and
|
|
tripleo_backup_and_restore_enabled_services.stdout is search('pacemaker') and
|
|
tripleo_backup_and_restore_enabled_services.stdout is search('mysql') and
|
|
tripleo_backup_and_restore_exclude_paths_controller_non_bootstrapnode|bool) |
|
|
ternary(tripleo_backup_and_restore_exclude_paths_controller, []) }}"
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Check backup server IP
|
|
command: ping -c 1 '{{ tripleo_backup_and_restore_server }}'
|
|
when: not (tripleo_backup_and_restore_skip_server_test | bool)
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Generate ReaR config file
|
|
template:
|
|
src: local.conf.j2
|
|
dest: /etc/rear/local.conf
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
backup: true
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Generate ReaR rescue file
|
|
template:
|
|
src: rescue.conf.j2
|
|
dest: /etc/rear/rescue.conf
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
backup: true
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Load rear config
|
|
slurp:
|
|
src: /etc/rear/local.conf
|
|
register: rear_config
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Extract OUTPUT_URL from rear config
|
|
set_fact:
|
|
output_url: "{{ ('OUTPUT_URL' in tripleo_backup_and_restore_local_config.keys())| ternary(tripleo_backup_and_restore_local_config['OUTPUT_URL'],'') }}"
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Check if this is a SFTP backup
|
|
set_fact:
|
|
sftp_backup: "{{ output_url is search ('sftp://') }}"
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Extract the SFTP hostname
|
|
set_fact:
|
|
sftp_host: "{{ output_url | regex_search('(?<=@)(.*?)(?=/)') }}"
|
|
when: sftp_backup
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Retrieve host ssh fingerprint
|
|
shell: "ssh-keyscan -H {{ sftp_host }} >> ~/.ssh/known_hosts"
|
|
when: sftp_backup
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Is this machine a ceph node?
|
|
stat:
|
|
path: /var/lib/ceph
|
|
register: varlibceph_dir
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Get the directory where /var/lib/ceph is mounted on
|
|
shell: |
|
|
set -o pipefail
|
|
df /var/lib/ceph | grep -v Filesystem | awk '{print $6}'
|
|
register: tripleo_backup_and_restore_ceph_dir
|
|
when: varlibceph_dir.stat.exists
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Get the device where /var/lib/ceph is mounted on
|
|
shell: |
|
|
set -o pipefail
|
|
df /var/lib/ceph | grep -v Filesystem | awk '{print $1}'
|
|
register: tripleo_backup_and_restore_ceph_device
|
|
when: varlibceph_dir.stat.exists
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Get the filesystem format of the device where /var/lib/ceph is mounted on
|
|
shell: |
|
|
set -o pipefail
|
|
grep {{ tripleo_backup_and_restore_ceph_device.stdout }} /etc/mtab | grep '{{ tripleo_backup_and_restore_ceph_dir.stdout }} ' | awk '{print $3}'
|
|
register: tripleo_backup_and_restore_ceph_device_format
|
|
when: varlibceph_dir.stat.exists
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Program a script that will trigger during restore backuping /var/lib/ceph if it exists just before restore
|
|
copy:
|
|
dest: /usr/share/rear/setup/default/011_backup_ceph.sh
|
|
content: |
|
|
echo "Taking a fresh ceph data backup if this controller has co-located cephs"
|
|
mount -t {{ tripleo_backup_and_restore_ceph_device_format.stdout }} {{ tripleo_backup_and_restore_ceph_device.stdout }} /mnt/local
|
|
cd /mnt/local
|
|
[ -d "var/lib/ceph" ] && tar cvfz /tmp/ceph.tar.gz var/lib/ceph --xattrs --xattrs-include='*.*' --acls
|
|
cd /
|
|
umount {{ tripleo_backup_and_restore_ceph_device.stdout }}
|
|
when: varlibceph_dir.stat.exists
|
|
tags:
|
|
- bar_setup_rear
|
|
|
|
- name: Program a script that will trigger during restoration to restore /var/lib/ceph backup after a full recovery
|
|
copy:
|
|
dest: /usr/share/rear/wrapup/default/501_restore_ceph.sh
|
|
content: |
|
|
echo "Restoring ceph backup if it exists"
|
|
if [ -f "/tmp/ceph.tar.gz" ]; then
|
|
rm -rf /mnt/local/var/lib/ceph/*
|
|
tar xvC /mnt/local -f /tmp/ceph.tar.gz var/lib/ceph --xattrs --xattrs-include='*.*'
|
|
fi
|
|
when: varlibceph_dir.stat.exists
|
|
tags:
|
|
- bar_setup_rear
|