# 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

Added in version 2016.3.0.

Changed in version 2018.3.1: Big refactor to remove duplicate code, better type conversions and improved consistency 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

  namestring

    name of snapshot

  forceboolean

    try harder to destroy the dataset (zfs destroy -f)

  recursiveboolean

    also destroy all the child datasets (zfs destroy -r)

salt.states.zfs.bookmark_present(name, snapshot)

  ensure bookmark exists

  namestring

    name of bookmark

  snapshotstring

    name of snapshot

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

  ensure filesystem is absent on the system

  namestring

    name of filesystem

  forceboolean

    try harder to destroy the dataset (zfs destroy -f)

  recursiveboolean

    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

  namestring

    name of filesystem

  create_parentboolean

    creates all the non-existing parent datasets. any property specified on the command line using the -o option is ignored.

  cloned_fromstring

    name of snapshot to clone

  propertiesdict

    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

  namestring

    name of hold

  snapshotstring

    name of snapshot

  recursiveboolean

    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

  namestring

    name of holdt

  snapshotstring

    name of snapshot

  recursiveboolean

    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

  namestring

    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

  namestring

    name of filesystem or volume

  prefixstring

    prefix for the snapshots e.g. 'test' will result in snapshots being named 'test-yyyymmdd_hhmm'

  recursiveboolean

    create snapshots for all children also

  scheduledict

    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

  namestring

    name of snapshot

  forceboolean

    try harder to destroy the dataset (zfs destroy -f)

  recursiveboolean

    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

  namestring

    name of snapshot

  recursiveboolean

    recursively create snapshots of all descendent datasets

  propertiesdict

    additional zfs properties (-o)

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

  ensure volume is absent on the system

  namestring

    name of volume

  forceboolean

    try harder to destroy the dataset (zfs destroy -f)

  recursiveboolean

    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

  namestring

    name of volume

  volume_sizestring

    size of volume

  sparseboolean

    create sparse volume

  create_parentboolean

    creates all the non-existing parent datasets. any property specified on the command line using the -o option is ignored.

  cloned_fromstring

    name of snapshot to clone

  propertiesdict

    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`.