350 Role vbotka.freebsd.rsnapshot

Use case

Use the role vbotka.freebsd.rsnapshot to install and configure rsnapshot.

Tree

shell> tree .
.
├── ansible.cfg
├── group_vars
│   └── all
│       ├── ansible-client.yml
│       ├── common.yml
│       └── rsnapshot.yml
├── hosts
│   ├── 04_iocage.yml
│   └── 99_constructed.yml
├── iocage.ini
├── pb-install.yml
└── pb-test.yml

Synopsis

Requirements

Notes

  • The jail name doesn’t work in the parameter name of the module community.general.pkgng if the jail was created by iocage. Use JID instead

    jail: "{{ iocage_jid }}"
    
  • The plays run at the jails. The inventory iocage.ini is needed when a task is delegated to an iocage host

    delegate_to: "{{ iocage_tags.vmm }}"
    
  • Disable use_globs

    freebsd_pkgng_use_globs: false
    

    to use the packages in the form pkg-origin

    rsnapshot_packages:
      - sysutils/rsnapshot
    

ansible.cfg

Do not display skipped hosts. See the option display_skipped_hosts

[defaults]
gathering = explicit
callback_result_format = yaml
display_skipped_hosts = false

[connection]
pipelining = true

Inventory iocage.ini

iocage_02 ansible_host=10.1.0.73
iocage_04 ansible_host=10.1.0.29

[iocage]
iocage_04

[iocage:vars]
ansible_user=admin
ansible_become=true
ansible_python_interpreter=auto_silent

group_vars

group_vars/all/ansible-client.yml
properties:
  notes: "vmm={{ inventory_hostname }}"

swarms:
  sw_01:
    count: 3
    template: ansible_client
    properties:
      bpf: 1
      dhcp: 1
      vnet: 1
group_vars/all/common.yml
ansible_python_interpreter: auto_silent

freebsd_pkgng_cached: false
freebsd_pkgng_use_globs: false
group_vars/all/rsnapshot.yml
rsnapshot_install: false

rsnapshot_packages:
  - sysutils/rsnapshot

rsnapshot_config_template: rsnapshot-auto.conf.j2
rsnapshot_snapshot_root: /export/backup/snapshots
rsnapshot_no_create_root: '0'

rsnapshot_backup_points:
  - {dir: /etc/, host: localhost/}
  - {dir: /usr/local/etc/, host: localhost/}

rsnapshot_backup_points_test:
  - {dir: /scratch/rsnapshot-test/, host: localhost/}

rsnapshot_exclude:
  - regex: '.git/'
  - regex: '.#*'

rsnapshot_test: true
rsnapshot_config_template_test: rsnapshot-auto-test.conf.j2
rsnapshot_snapshot_root_test: /export/backup/snapshots-test

Create and start jails

(env) > ansible-playbook vbotka.freebsd.pb_iocage_ansible_clients.yml -i iocage \
                         -t swarm -e swarm=true
PLAY [Create and start jails. Optionally stop and destroy jails.] **************

TASK [Get iocage facts] ********************************************************
ok: [iocage_04]

TASK [Create swarms] ***********************************************************
changed: [iocage_04] => (item=sw_01)

TASK [Get iocage facts] ********************************************************
ok: [iocage_04]

TASK [Start swarms] ************************************************************
changed: [iocage_04] => (item=sw_01)

PLAY RECAP *********************************************************************
iocage_04                  : ok=4    changed=2    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0   

Jails at iocage_04

[iocage_04]# iocage list -l
+-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| JID |   NAME   | BOOT | STATE | TYPE |     RELEASE     |        IP4         | IP6 |    TEMPLATE    | BASEJAIL |
+=====+==========+======+=======+======+=================+====================+=====+================+==========+
| 143 | 0f5055fd | off  | up    | jail | 14.3-RELEASE-p1 | epair0b|10.1.0.121 | -   | ansible_client | no       |
+-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| 145 | dbdcbdec | off  | up    | jail | 14.3-RELEASE-p1 | epair0b|10.1.0.194 | -   | ansible_client | no       |
+-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| 144 | f53c3b61 | off  | up    | jail | 14.3-RELEASE-p1 | epair0b|10.1.0.243 | -   | ansible_client | no       |
+-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+

Inventory hosts

hosts/04_iocage.yml
plugin: vbotka.freebsd.iocage
host: 10.1.0.29
user: admin
env:
  CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1
get_properties: True
hooks_results:
  - /var/db/dhclient-hook.address.epair0b
compose:
  ansible_host: (iocage_hooks.0 == '-') | ternary(iocage_ip4, iocage_hooks.0)
  iocage_tags: dict(iocage_properties.notes | split | map('split', '='))
hosts/99_constructed.yml
plugin: ansible.builtin.constructed
groups:
  up: iocage_state == 'up'
keyed_groups:
  - prefix: swarm
    key: iocage_tags.swarm
  - prefix: vmm
    key: iocage_tags.vmm

Display inventory

(env) > ansible-inventory -i hosts -i iocage.ini --graph
@all:
  |--@ungrouped:
  |  |--iocage_02
  |--@up:
  |  |--0f5055fd
  |  |--dbdcbdec
  |  |--f53c3b61
  |--@swarm_sw_01:
  |  |--0f5055fd
  |  |--dbdcbdec
  |  |--f53c3b61
  |--@vmm_iocage_04:
  |  |--0f5055fd
  |  |--dbdcbdec
  |  |--f53c3b61
  |--@iocage:
  |  |--iocage_04

Playbook pb-install.yml

- name: Install packages.
  hosts: up
  gather_facts: true
  remote_user: admin
  become: true

  tasks:

    - name: Install rsnapshot packages.
      delegate_to: "{{ iocage_tags.vmm }}"
      register: out
      community.general.pkgng:
        name: "{{ rsnapshot_packages }}"
        jail: "{{ iocage_jid }}"
        cached: "{{ freebsd_pkgng_cached }}"
        use_globs: "{{ freebsd_pkgng_use_globs }}"

    - name: Debug.
      when: debug | d(false) | bool
      ansible.builtin.debug:
        var: out

Playbook output - Install packages

The inventory iocage.ini is needed when a task is delegated to an iocage host

(env) > ansible-playbook pb-install.yml -i hosts -i iocage.ini
PLAY [Install packages.] *******************************************************

TASK [Gathering Facts] *********************************************************
ok: [dbdcbdec]
ok: [f53c3b61]
ok: [0f5055fd]

TASK [Install rsnapshot packages.] *********************************************
changed: [0f5055fd -> iocage_04(10.1.0.29)]
changed: [f53c3b61 -> iocage_04(10.1.0.29)]
changed: [dbdcbdec -> iocage_04(10.1.0.29)]

PLAY RECAP *********************************************************************
0f5055fd                   : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
dbdcbdec                   : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
f53c3b61                   : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

Playbook pb-test.yml

- name: Test role vbotka.freebsd.rsnapshot
  hosts: up
  gather_facts: true
  remote_user: admin
  become: true

  roles:
    - vbotka.freebsd.rsnapshot

Playbook output - Display variables

(env) > ansible-playbook pb-test.yml -i hosts -t rsnapshot_debug -e rsnapshot_debug=true
PLAY [Test role vbotka.freebsd.rsnapshot] **************************************

TASK [Gathering Facts] *********************************************************
ok: [f53c3b61]
ok: [0f5055fd]
ok: [dbdcbdec]

TASK [vbotka.freebsd.rsnapshot : Vars: Set variables for al_include_os_vars_path] ***
ok: [0f5055fd]
ok: [dbdcbdec]
ok: [f53c3b61]

TASK [Vars: Include OS vars] ***************************************************
included: vbotka.freebsd.lib for 0f5055fd, dbdcbdec, f53c3b61

TASK [vbotka.freebsd.lib : Al_include_os_vars_path: Vars from /scratch/collections/ansible_collections/vbotka/freebsd/roles/rsnapshot/vars/defaults] ***
ok: [dbdcbdec]
ok: [f53c3b61]
ok: [0f5055fd]

TASK [vbotka.freebsd.rsnapshot : Vars: Create template specific vars.] *********
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/rsnapshot/tasks/vars-auto.yml for 0f5055fd, dbdcbdec, f53c3b61

TASK [vbotka.freebsd.rsnapshot : Vars-auto: set rsnapshot_conf_dict] ***********
ok: [0f5055fd]
ok: [dbdcbdec]
ok: [f53c3b61]

TASK [vbotka.freebsd.rsnapshot : Vars-auto: Debug rsnapshot_conf_dict rsnapshot_debug=true] ***
ok: [0f5055fd] => 
    rsnapshot_conf_dict:
        cmd_cp: /bin/cp
        cmd_logger: /usr/bin/logger
        cmd_rm: /bin/rm
        cmd_rsync: /usr/local/bin/rsync
        cmd_ssh: /usr/bin/ssh
        config_version: '1.2'
        link_dest: '1'
        lockfile: /var/run/rsnapshot.pid
        logfile: /var/log/rsnapshot
        loglevel: '3'
        no_create_root: '0'
        retain_daily: '7'
        retain_hourly: '6'
        retain_monthly: '3'
        retain_weekly: '4'
        snapshot_root: /export/backup/snapshots
        verbose: '2'
ok: [dbdcbdec] => 
    rsnapshot_conf_dict:
        cmd_cp: /bin/cp
        cmd_logger: /usr/bin/logger
        cmd_rm: /bin/rm
        cmd_rsync: /usr/local/bin/rsync
        cmd_ssh: /usr/bin/ssh
        config_version: '1.2'
        link_dest: '1'
        lockfile: /var/run/rsnapshot.pid
        logfile: /var/log/rsnapshot
        loglevel: '3'
        no_create_root: '0'
        retain_daily: '7'
        retain_hourly: '6'
        retain_monthly: '3'
        retain_weekly: '4'
        snapshot_root: /export/backup/snapshots
        verbose: '2'
ok: [f53c3b61] => 
    rsnapshot_conf_dict:
        cmd_cp: /bin/cp
        cmd_logger: /usr/bin/logger
        cmd_rm: /bin/rm
        cmd_rsync: /usr/local/bin/rsync
        cmd_ssh: /usr/bin/ssh
        config_version: '1.2'
        link_dest: '1'
        lockfile: /var/run/rsnapshot.pid
        logfile: /var/log/rsnapshot
        loglevel: '3'
        no_create_root: '0'
        retain_daily: '7'
        retain_hourly: '6'
        retain_monthly: '3'
        retain_weekly: '4'
        snapshot_root: /export/backup/snapshots
        verbose: '2'

TASK [vbotka.freebsd.rsnapshot : Debug] ****************************************
ok: [0f5055fd] => 
    msg: |-
        rsnapshot_role_version: 2.7.3
        ansible_architecture: amd64
        ansible_os_family: FreeBSD
        ansible_distribution: FreeBSD
        ansible_distribution_major_version: 14
        ansible_distribution_version: 14.3
        ansible_distribution_release: 14.3-RELEASE
        ansible_python_version: 3.11.13

        freebsd_install_method: packages
        freebsd_use_packages: True
        freebsd_cached: False
        freebsd_state: present
        freebsd_use_globs: False
        freebsd_install_retries: 10
        freebsd_install_delay: 5
        linux_install_retries: 10
        linux_install_delay: 5

        rsnapshot_install: False
        rsnapshot_packages:
          - sysutils/rsnapshot

        rsnapshot_supported_linux_family: ['Debian', 'RedHat']
        rsnapshot_backup_conf: False
        rsnapshot_config_template: rsnapshot-auto.conf.j2
        rsnapshot_config_version: 1.2
        rsnapshot_test: True
        rsnapshot_config_template_test: rsnapshot-auto-test.conf.j2
ok: [dbdcbdec] => 
    msg: |-
        rsnapshot_role_version: 2.7.3
        ansible_architecture: amd64
        ansible_os_family: FreeBSD
        ansible_distribution: FreeBSD
        ansible_distribution_major_version: 14
        ansible_distribution_version: 14.3
        ansible_distribution_release: 14.3-RELEASE
        ansible_python_version: 3.11.13

        freebsd_install_method: packages
        freebsd_use_packages: True
        freebsd_cached: False
        freebsd_state: present
        freebsd_use_globs: False
        freebsd_install_retries: 10
        freebsd_install_delay: 5
        linux_install_retries: 10
        linux_install_delay: 5

        rsnapshot_install: False
        rsnapshot_packages:
          - sysutils/rsnapshot

        rsnapshot_supported_linux_family: ['Debian', 'RedHat']
        rsnapshot_backup_conf: False
        rsnapshot_config_template: rsnapshot-auto.conf.j2
        rsnapshot_config_version: 1.2
        rsnapshot_test: True
        rsnapshot_config_template_test: rsnapshot-auto-test.conf.j2
ok: [f53c3b61] => 
    msg: |-
        rsnapshot_role_version: 2.7.3
        ansible_architecture: amd64
        ansible_os_family: FreeBSD
        ansible_distribution: FreeBSD
        ansible_distribution_major_version: 14
        ansible_distribution_version: 14.3
        ansible_distribution_release: 14.3-RELEASE
        ansible_python_version: 3.11.13

        freebsd_install_method: packages
        freebsd_use_packages: True
        freebsd_cached: False
        freebsd_state: present
        freebsd_use_globs: False
        freebsd_install_retries: 10
        freebsd_install_delay: 5
        linux_install_retries: 10
        linux_install_delay: 5

        rsnapshot_install: False
        rsnapshot_packages:
          - sysutils/rsnapshot

        rsnapshot_supported_linux_family: ['Debian', 'RedHat']
        rsnapshot_backup_conf: False
        rsnapshot_config_template: rsnapshot-auto.conf.j2
        rsnapshot_config_version: 1.2
        rsnapshot_test: True
        rsnapshot_config_template_test: rsnapshot-auto-test.conf.j2

PLAY RECAP *********************************************************************
0f5055fd                   : ok=8    changed=0    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0   
dbdcbdec                   : ok=8    changed=0    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0   
f53c3b61                   : ok=8    changed=0    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0   

Playbook output - Configure rsnapshot

(env) > ansible-playbook pb-test.yml -i hosts
PLAY [Test role vbotka.freebsd.rsnapshot] **************************************

TASK [Gathering Facts] *********************************************************
ok: [0f5055fd]
ok: [dbdcbdec]
ok: [f53c3b61]

TASK [vbotka.freebsd.rsnapshot : Vars: Set variables for al_include_os_vars_path] ***
ok: [0f5055fd]
ok: [dbdcbdec]
ok: [f53c3b61]

TASK [Vars: Include OS vars] ***************************************************
included: vbotka.freebsd.lib for 0f5055fd, dbdcbdec, f53c3b61

TASK [vbotka.freebsd.lib : Al_include_os_vars_path: Vars from /scratch/collections/ansible_collections/vbotka/freebsd/roles/rsnapshot/vars/defaults] ***
ok: [0f5055fd]
ok: [dbdcbdec]
ok: [f53c3b61]

TASK [vbotka.freebsd.rsnapshot : Vars: Create template specific vars.] *********
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/rsnapshot/tasks/vars-auto.yml for 0f5055fd, dbdcbdec, f53c3b61

TASK [vbotka.freebsd.rsnapshot : Vars-auto: set rsnapshot_conf_dict] ***********
ok: [0f5055fd]
ok: [dbdcbdec]
ok: [f53c3b61]

TASK [vbotka.freebsd.rsnapshot : Configure: Create directory /export/backup/snapshots] ***
changed: [f53c3b61]
changed: [0f5055fd]
changed: [dbdcbdec]

TASK [vbotka.freebsd.rsnapshot : Configure: Create configuration /usr/local/etc/rsnapshot.conf] ***
changed: [0f5055fd]
changed: [dbdcbdec]
changed: [f53c3b61]

TASK [vbotka.freebsd.rsnapshot : Test: Create test directory /export/backup/snapshots-test] ***
changed: [dbdcbdec]
changed: [0f5055fd]
changed: [f53c3b61]

TASK [vbotka.freebsd.rsnapshot : Test: Create test backup_points] **************
changed: [dbdcbdec] => (item={'dir': '/scratch/rsnapshot-test/', 'host': 'localhost/'})
changed: [0f5055fd] => (item={'dir': '/scratch/rsnapshot-test/', 'host': 'localhost/'})
changed: [f53c3b61] => (item={'dir': '/scratch/rsnapshot-test/', 'host': 'localhost/'})

TASK [vbotka.freebsd.rsnapshot : Test: Create test configuration /usr/local/etc/rsnapshot-test.conf] ***
changed: [f53c3b61]
changed: [dbdcbdec]
changed: [0f5055fd]

PLAY RECAP *********************************************************************
0f5055fd                   : ok=11   changed=5    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0   
dbdcbdec                   : ok=11   changed=5    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0   
f53c3b61                   : ok=11   changed=5    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0   

Results

TBD