--- # 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: "{{ rear_config.content | b64decode | regex_findall('OUTPUT_URL=(.+)') | first }}" 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