salt.states.zfs

States for managing zfs datasets

maintainer:Jorge Schrauwen <sjorge@blackdot.be>
maturity:new
depends:salt.utils.zfs, salt.modules.zfs
platform:smartos, illumos, solaris, freebsd, linux

New in version 2016.3.0.

Changed in version 2018.3.1: Big refactor to remove duplicate code, better type converions and improved consistancy in output.

test/shares/yuki:
  zfs.filesystem_present:
    - create_parent: true
    - properties:
        quota: 16G

test/iscsi/haruhi:
  zfs.volume_present:
    - create_parent: true
    - volume_size: 16M
    - sparse: true
    - properties:
        readonly: on

test/shares/yuki@frozen:
  zfs.snapshot_present

moka_origin:
  zfs.hold_present:
    - snapshot: test/shares/yuki@frozen

test/shares/moka:
  zfs.filesystem_present:
    - cloned_from: test/shares/yuki@frozen

test/shares/moka@tsukune:
  zfs.snapshot_absent
salt.states.zfs.bookmark_absent(name, force=False, recursive=False)

ensure bookmark is absent on the system

name
: string
name of snapshot
force
: boolean
try harder to destroy the dataset (zfs destroy -f)
recursive
: boolean
also destroy all the child datasets (zfs destroy -r)
salt.states.zfs.bookmark_present(name, snapshot)

ensure bookmark exists

name
: string
name of bookmark
snapshot
: string
name of snapshot
salt.states.zfs.filesystem_absent(name, force=False, recursive=False)

ensure filesystem is absent on the system

name
: string
name of filesystem
force
: boolean
try harder to destroy the dataset (zfs destroy -f)
recursive
: boolean
also destroy all the child datasets (zfs destroy -r)

Warning

If a volume with name exists, this state will succeed without destroying the volume specified by name. This module is dataset type sensitive.

salt.states.zfs.filesystem_present(name, create_parent=False, properties=None, cloned_from=None)

ensure filesystem exists and has properties set

name
: string
name of filesystem
create_parent
: boolean
creates all the non-existing parent datasets. any property specified on the command line using the -o option is ignored.
cloned_from
: string
name of snapshot to clone
properties
: dict
additional zfs properties (-o)

Note

cloned_from is only use if the filesystem does not exist yet, when cloned_from is set after the filesystem exists it will be ignored.

Note

Properties do not get cloned, if you specify the properties in the state file they will be applied on a subsequent run.

salt.states.zfs.hold_absent(name, snapshot, recursive=False)

ensure hold is absent on the system

name
: string
name of hold
snapshot
: string
name of snapshot
recursive
: boolean
recursively releases a hold with the given tag on the snapshots of all descendent file systems.
salt.states.zfs.hold_present(name, snapshot, recursive=False)

ensure hold is present on the system

name
: string
name of holdt
snapshot
: string
name of snapshot
recursive
: boolean
recursively add hold with the given tag on the snapshots of all descendent file systems.
salt.states.zfs.promoted(name)

ensure a dataset is not a clone

name
: string
name of fileset or volume

Warning

only one dataset can be the origin, if you promote a clone the original will now point to the promoted dataset

salt.states.zfs.scheduled_snapshot(name, prefix, recursive=True, schedule=None)

maintain a set of snapshots based on a schedule

name
: string
name of filesystem or volume
prefix
: string
prefix for the snapshots e.g. 'test' will result in snapshots being named 'test-yyyymmdd_hhmm'
recursive
: boolean
create snapshots for all children also
schedule
: dict
dict holding the schedule, the following keys are available (minute, hour, day, month, and year) by default all are set to 0 the value indicated the number of snapshots of that type to keep around.

Warning

snapshots will only be created and pruned every time the state runs. a schedule must be setup to automatically run the state. this means that if you run the state daily the hourly snapshot will only be made once per day!

Changed in version 2018.3.0: switched to localtime from gmtime so times now take into account timezones.

salt.states.zfs.snapshot_absent(name, force=False, recursive=False)

ensure snapshot is absent on the system

name
: string
name of snapshot
force
: boolean
try harder to destroy the dataset (zfs destroy -f)
recursive
: boolean
also destroy all the child datasets (zfs destroy -r)
salt.states.zfs.snapshot_present(name, recursive=False, properties=None)

ensure snapshot exists and has properties set

name
: string
name of snapshot
recursive
: boolean
recursively create snapshots of all descendent datasets
properties
: dict
additional zfs properties (-o)
salt.states.zfs.volume_absent(name, force=False, recursive=False)

ensure volume is absent on the system

name
: string
name of volume
force
: boolean
try harder to destroy the dataset (zfs destroy -f)
recursive
: boolean
also destroy all the child datasets (zfs destroy -r)

Warning

If a filesystem with name exists, this state will succeed without destroying the filesystem specified by name. This module is dataset type sensitive.

salt.states.zfs.volume_present(name, volume_size, sparse=False, create_parent=False, properties=None, cloned_from=None)

ensure volume exists and has properties set

name
: string
name of volume
volume_size
: string
size of volume
sparse
: boolean
create sparse volume
create_parent
: boolean
creates all the non-existing parent datasets. any property specified on the command line using the -o option is ignored.
cloned_from
: string
name of snapshot to clone
properties
: dict
additional zfs properties (-o)

Note

cloned_from is only use if the volume does not exist yet, when cloned_from is set after the volume exists it will be ignored.

Note

Properties do not get cloned, if you specify the properties in the state file they will be applied on a subsequent run.

volume_size is considered a property, so the volume's size will be corrected when the properties get updated if it differs from the original volume.

The sparse parameter is ignored when using cloned_from.