Test

There are six tasks in the role vbotka.rcb to test the installation on the clients. Each task runs one of the scripts:

  • test1.yml Create snapshot: rcb-rsnapshot.sh -i=hourly

  • test2.yml Encrypt snapshots: rcb-encrypt.sh

  • test3.yml Rsync encrypted snaphosts to the backup server: rcb-rsync.sh

  • test4.yml Restore encrypted snapshots from the backup server: rcb-rsync-back.sh

  • test5.yml Decrypt restored snapshots: rcb-decrypt.sh –delete

  • test6.yml Restore data: rcb-restore.sh

Configure test in rsnapshot

If you enable rsnapshot_test=true the role vbotka.rsnapshot in Ubuntu creates the configuration file /usr/local/etc/rsnapshot-test.conf. For the purpose of testing add backup point rsnapshot_backup_points_test

rsnapshot_test: true
rsnapshot_backup_points_test:
  - {dir: /scratch/rcb-test/, host: localhost/}

Display the variables

shell> ansible-playbook -t rsnapshot_test -e rsnapshot_debug=true -CD rsnapshot.yml

...

TASK [vbotka.rsnapshot : test: DEBUG Print variables] ***************************************
ok: [client] =>
  msg: |-
    Enable test ............ rsnapshot_test ................ True
    Rsnapshot config test .. rsnapshot_config_file_test .... /usr/local/etc/rsnapshot-test.conf
    Backup dir test ........ rsnapshot_snapshot_root_test .. /export/backup/snapshots-test
    Backup points test ..... rsnapshot_backup_points_test .. [{'dir': '/scratch/rcb-test/', 'host': 'localhost/'}]

Note

  • In the role vbotka.rsnapshot, the path to the configuration for testing is stored in the variable rsnapshot_config_file_test. Because this path may vary among the operating systems the defaults are stored in vars/defaults.

  • The default value of rsnapshot_snapshot_root_test is /export/backup/snapshots-test

Create the directories for testing and the configuration file

shell> ansible-playbook -t rsnapshot_test rsnapshot.yml

Display the difference between rsnapshot-test.conf and rsnapshot.conf

shell> diff rsnapshot-test.conf rsnapshot.conf
6c6
< snapshot_root /export/backup/snapshots-test
---
> snapshot_root /export/backup/snapshots
53c53,57
< backup        /scratch/rcb-test/       localhost/
---
> backup        /etc/                    localhost/
> backup        /usr/local/etc/          localhost/
> backup        /var/backups/            localhost/

Configure test in rcb

By default the role vbotka.rcb creates the configuration file /usr/local/etc/rcb-test.conf. For the purpose of testing add the destination of the test backup. For example,

rcb_bck_dst_test: /export/rcbackup-test

Display the variables

shell> ansible-playbook -t rcb_configure -e rcb_debug=true -CD rcb.yml

...

TASK [vbotka.rcb : configure: DEBUG Print variables] *******************************************
ok: [client] =>
  msg: |-
    Backup dir .......... rcb_rcb_bck_root .................. /export/backup
    Restore dir ......... rcb_rcb_rst_root .................. /export/restore
    Prefix .............. rcb_rcb_bck_prefix ................ snapshots/hourly.0
    Destination ......... rcb_bck_dst ....................... /export/rcbackup
    RCB config .......... rcb_etc_dir/rcb_conf .............. /usr/local/etc/rcb.conf
    Rsnapshot config .... rcb_etc_dir/rcb_rsnapshot_conf .... /usr/local/etc/rsnapshot.conf
    Prefix test ......... rcb_rcb_bck_prefix_test ........... snapshots-test/hourly.0
    Destination test .... rcb_bck_dst_test .................. /export/rcbackup-test
    RCB config test ..... rcb_etc_dir/rcb_conf_test ......... /usr/local/etc/rcb-test.conf
    Rsnapshot config test rcb_etc_dir/rcb_rsnapshot_conf_test /usr/local/etc/rsnapshot-test.conf

Note

In the role vbotka.rcb, the path to all configuration files is stored in the variable rcb_etc_dir. The default value /usr/local/etc is stored in defaults/main.yml.

Create the directories and the configuration files

shell> ansible-playbook -t rcb_configure rcb.yml

Display the difference between rcb-test.conf and rcb.conf

shell> diff rcb-test.conf rcb.conf
5c5
< BCK_DST="/export/rcbackup-test/client"
---
> BCK_DST="/export/rcbackup/client"
11c11
< RCB_BCK_PREFIX="snapshots-test/hourly.0"
---
> RCB_BCK_PREFIX="snapshots/hourly.0"
47c47
< RSNAPSHOT_PARAM="-c /usr/local/etc/rsnapshot-test.conf"
---
> RSNAPSHOT_PARAM="-c /usr/local/etc/rsnapshot.conf"

Run tests

By default the testing is disabled rcb_test=false.

test1: Create snapshot

Enable testing and run the first test

shell> ansible-playbook -e rcb_test=true -t test1 rcb.yml

Take a look at /var/log/rcb.log:

Mon 02 Oct 2023 09:22:04 PM CEST [OK] *** hourly backup started
Mon 02 Oct 2023 09:22:04 PM CEST [OK] *** hourly backup finished

Note

The default directory to test the backup is /scratch/rcb-test. If you configured other directory in the variable rsnapshot_backup_points_test, used to create /usr/local/etc/rsnapshot-test.conf, configure rcb_test_dir. See the file tasks/test1.yml.

test2: Encrypt snapshots

Run the second test

shell> ansible-playbook -e rcb_test=true -t test2 rcb.yml

Take a look at /var/log/rcb.log:

Mon 02 Oct 2023 09:36:33 PM CEST [OK] *** Encryption of backup started
Mon 02 Oct 2023 09:36:33 PM CEST [OK] files in /export/backup/meta deleted
Mon 02 Oct 2023 09:36:33 PM CEST [OK] /export/backup/meta/localhost created
Mon 02 Oct 2023 09:36:33 PM CEST [OK] mtree specification stored in /export/backup/meta/localhost/.rcb-mtree.txt
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Empty dirs stored in /export/backup/meta/localhost/.rcb-empty-dirs.txt
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Empty dirs stored in /export/backup/meta/localhost/.rcb-empty-dirs.tar
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Links stored in /export/backup/meta/localhost/.rcb-links.txt
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Links stored in /export/backup/meta/localhost/.rcb-links.tar
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Fifo stored in /export/backup/meta/localhost/.rcb-specials.txt
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Sockets stored in /export/backup/meta/localhost/.rcb-specials.txt
Mon 02 Oct 2023 09:36:33 PM CEST [OK] Digests stored in /export/backup/meta/localhost/.rcb-digests.txt
Mon 02 Oct 2023 09:36:33 PM CEST [OK] *** Encryption of /export/backup/snapshots-test/hourly.0 started
Mon 02 Oct 2023 09:36:35 PM CEST [OK] *** Encryption of /export/backup/snapshots-test/hourly.0 finished

test3: Rsync encrypted snaphosts to the backup server

Run the third test

shell> ansible-playbook -e rcb_test=true -t test3 rcb.yml

Take a look at /var/log/rcb.log:

Mon 02 Oct 2023 09:42:54 PM CEST [OK] *** Rsync from /export/backup/enc/ to rcbackup@10.1.0.10:/export/rcbackup-test/client started
Mon 02 Oct 2023 09:42:54 PM CEST [OK] --include-from=/export/backup/meta/.rsyncrypto-export-changes
Mon 02 Oct 2023 09:42:54 PM CEST [OK] RSYNC_RSH: ssh -o StrictHostKeyChecking=no
Mon 02 Oct 2023 09:42:55 PM CEST [OK] *** Rsync from /export/backup/enc/ to rcbackup@10.1.0.10:/export/rcbackup-test/client finished

test4: Restore encrypted snapshots from the backup server

Run the fourth test

shell> ansible-playbook -e rcb_test=true -t test4 rcb.yml

Take a look at /var/log/rcb.log:

Mon 02 Oct 2023 10:06:14 PM CEST [OK] *** Rsync from rcbackup@10.1.0.10:/export/rcbackup-test/client/ to /export/backup/enc.restored (link:false delete:false) started
Mon 02 Oct 2023 10:06:14 PM CEST [OK] RSYNC_RSH: ssh -o StrictHostKeyChecking=no
Mon 02 Oct 2023 10:06:14 PM CEST [OK] *** Rsync from rcbackup@10.1.0.10:/export/rcbackup-test/client/ to /export/backup/enc.restored finished

test5: Decrypt restored snapshots

Run the fifth test

shell> ansible-playbook -e rcb_test=true -t test5 rcb.yml

Take a look at /var/log/rcb.log:

Mon 02 Oct 2023 10:08:59 PM CEST [OK] *** Decryption from /export/backup/enc.restored to /export/backup/dec started
Mon 02 Oct 2023 10:08:59 PM CEST [OK] Files in /export/backup/dec deleted
Mon 02 Oct 2023 10:08:59 PM CEST [OK] *** Decryption from /export/backup/enc.restored to /export/backup/dec finished

test6: Restore data

Run the sixth test

shell> ansible-playbook -e rcb_test=true -t test6 rcb.yml

Take a look at /var/log/rcb.log:

Mon 02 Oct 2023 10:09:41 PM CEST [OK] *** Restoring data from /export/backup/dec started
Mon 02 Oct 2023 10:09:41 PM CEST [OK] localhost restored in /export/restore/localhost
Mon 02 Oct 2023 10:09:41 PM CEST [OK] Empty dirs created in /export/restore/localhost
Mon 02 Oct 2023 10:09:41 PM CEST [OK] Links created in /export/restore/localhost
Mon 02 Oct 2023 10:09:41 PM CEST [OK] mtree restored from /export/backup/meta/localhost/.rcb-mtree.txt to /export/restore/localhost
Mon 02 Oct 2023 10:09:41 PM CEST [OK] diff /export/backup/snapshots-test/hourly.0/localhost/ and /export/restore/localhost/ finished
Mon 02 Oct 2023 10:09:41 PM CEST [OK] *** /export/backup/snapshots-test/hourly.0 restored in /export/restore

testall: Run all tests

You can run all test in one play

shell> ansible-playbook -e rcb_test=true -t testall rcb.yml