This post will introduce you about how to run backups and restores using Ansible in TripleO.

Testing the Undercloud backup and restore

It is possible to test how the Undercloud backup and restore should be performed using Ansible.

The following Ansible playbooks will show how can be used Ansible to test the backups execution in a test environment.

Creating the Ansible playbooks to run the tasks

Create a yaml file called uc-backup.yaml with the following content:

--- - hosts: localhost tasks: - name: Remove any previously created UC backups shell: | source ~/stackrc openstack container delete undercloud-backups --recursive ignore_errors: True - name: Create UC backup shell: | source ~/stackrc openstack undercloud backup --add-path /etc/ --add-path /root/

Create a yaml file called uc-backup-download.yaml with the following content:

--- - hosts: localhost tasks: - name: Make sure the temp folder used for the restore does not exist become: true file: path: "/var/tmp/test_bk_down" state: absent - name: Create temp folder to unzip the backup become: true file: path: "/var/tmp/test_bk_down" state: directory owner: "stack" group: "stack" mode: "0775" recurse: "yes" - name: Download the UC backup to a temporary folder (After breaking the UC we won't be able to get it back) shell: | source ~/stackrc cd /var/tmp/test_bk_down openstack container save undercloud-backups - name: Unzip the backup become: true shell: | cd /var/tmp/test_bk_down tar -xvf UC-backup-*.tar gunzip *.gz tar -xvf filesystem-*.tar - name: Make sure stack user can get the backup files become: true file: path: "/var/tmp/test_bk_down" state: directory owner: "stack" group: "stack" mode: "0775" recurse: "yes"

Create a yaml file called uc-destroy.yaml with the following content:

--- - hosts: localhost tasks: - name: Remove mariadb become: true yum: pkg= state=absent with_items: - mariadb - mariadb-server - name: Remove files become: true file: path: "" state: absent with_items: - /root/.my.cnf - /var/lib/mysql

Create a yaml file called uc-restore.yaml with the following content:

--- - hosts: localhost tasks: - name: Install mariadb become: true yum: pkg= state=present with_items: - mariadb - mariadb-server - name: Restart MariaDB become: true service: name=mariadb state=restarted - name: Restore the backup DB shell: cat /var/tmp/test_bk_down/all-databases-*.sql | sudo mysql - name: Restart MariaDB to perms to refresh become: true service: name=mariadb state=restarted - name: Register root password become: true shell: cat /var/tmp/test_bk_down/root/.my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'" register: oldpass - name: Clean root password from MariaDB to reinstall the UC shell: | mysqladmin -u root -p password '' - name: Clean users become: true mysql_user: name="" host_all="yes" state="absent" with_items: - ceilometer - glance - heat - ironic - keystone - neutron - nova - mistral - zaqar - name: Reinstall the undercloud shell: | openstack undercloud install

Running the Undercloud backup and restore tasks

To test the UC backup and restore procedure, run from the UC after creating the Ansible playbooks:

# This playbook will create the UC backup ansible-playbook uc-backup.yaml # This playbook will download the UC backup to be used in the restore ansible-playbook uc-backup-download.yaml # This playbook will destroy the UC (remove DB server, remove DB files, remove config files) ansible-playbook uc-destroy.yaml # This playbook will reinstall the DB server, restore the DB backup, fix permissions and reinstall the UC ansible-playbook uc-restore.yaml

Checking the Undercloud state

After finishing the Undercloud restore playbook the user should be able to execute again any CLI command like:

source ~/stackrc openstack stack list

Source code available in GitHub