Snapshot Policies

This is a process that automates periodic creation of snapshots on any of the system’s storage entities - filesystem, volume, and a consistency-group (CG). Snapshot policies define the rules for snapshot creation.

Creating a Policy

A policy defines how and when to create snapshots. It contains a list of schedules which define when to create a snapshot.

To create a policy:

>>> policy1 = system.snapshot_policies.create()

An optional parameters of name and suffix can be passed in creation. The suffix is a string which will be added to the snapshots’ names.

Creating a Schedule

After creating a policy you can create a schedule for creating the snapshot:

>> from datetime import timedelta
>> schedule1 = policy1.schedules.create(name="every3hours",interval=timedelta(seconds=7200),retention=timedelta(seconds=3600))

In this example a snapshot will be taken every 7200 seconds and be retained for 3600 seconds (after which it will be deleted).

The default type of schedule is periodic but you can also specify type=clock to denote a specific day and time. To do that you need to specify 2 additional parameters:
  1. day_of_week which can get string values of the days of the week (“sunday”, “monday”, etc.) or “all” for all the days in the week.

  2. time_of_day which denotes the time in the day to perform the snapshot operation.

>> from datetime import time
>> schedule2 = policy1.schedules.create(name="every3hours",type="clock",day_of_week="sunday",time_of_day=time(20, 30, 10),retention=timedelta(seconds=3600)) # doctest: +SKIP

In this example the snapshot will be taken every Sunday at 20:30:10 (8 PM, 30 minutes, 10 seconds).

A schedule cannot be updated. To make changes the schedule should be deleted and a new one with the change should be created. Each policy can have up to 8 schedules.

Assigning Policies to Datasets

Snapshot policies can be assigned to datasets (of type master and snapshot): volumes, filesystems and CGs. This dataset then will be snapshoted according to the policy schedule.

>>> fs1 = system.filesystems.create(name="fs1", pool=pool)
>>> policy1.assign_entity(entity=fs1)

To unassign an entity from a policy you need to pass the entity instance that you want to unassign:

>>> policy1.unassign_entity(entity=fs1)

To get all the assigned entities for a policy you can do:

>>> policy1_entities = policy1.get_assigned_entities()

You can also pass either one or both of the desired page size and page number in case you have many entities:

>>> policy1_entities = policy1.get_assigned_entities(page_size=1, page=1)