zpool

Manage zpools statefully.

Example

oldpool:
  zpool.absent:
    - export: true

newpool:
  zpool.present:
    - config:
        import: false
        force: true
    - properties:
        comment: salty storage pool
    - layout:
        - mirror:
          - /dev/disk0
          - /dev/disk1
        - mirror:
          - /dev/disk2
          - /dev/disk3

partitionpool:
  zpool.present:
    - config:
        import: false
        force: true
    - properties:
        comment: disk partition salty storage pool
        ashift: '12'
        feature@lz4_compress: enabled
    - filesystem_properties:
        compression: lz4
        atime: on
        relatime: on
    - layout:
        - /dev/disk/by-uuid/3e43ce94-77af-4f52-a91b-6cdbb0b0f41b

simplepool:
  zpool.present:
    - config:
        import: false
        force: true
    - properties:
        comment: another salty storage pool
    - layout:
        - /dev/disk0
        - /dev/disk1

Warning

The layout will never be updated, it will only be used at time of creation. It’s a whole lot of work to figure out if a devices needs to be detached, removed, etc. This is best done by the sysadmin on a case per case basis.

Filesystem properties are also not updated, this should be managed by the zfs state module.

saltext.zfs.states.zpool.present(name, properties=None, filesystem_properties=None, layout=None, config=None)[source]

Ensure a storage pool is present on the system.

namestring

name of storage pool

propertiesdict

optional set of properties to set for the storage pool

filesystem_propertiesdict

optional set of filesystem properties to set for the storage pool (creation only)

layout: dict

disk layout to use if the pool does not exist (creation only)

configdict

fine grain control over this state

Note

The following configuration properties can be toggled in the config parameter.
  • import (true) - try to import the pool before creating it if absent

  • import_dirs (None) - specify additional locations to scan for devices on import (comma-separated)

  • device_dir (None, SunOS=/dev/dsk, Linux=/dev) - specify device directory to prepend for none absolute device paths

  • force (false) - try to force the import or creation

Note

It is no longer needed to give a unique name to each top-level vdev, the old layout format is still supported but no longer recommended.

- mirror:
  - /tmp/vdisk3
  - /tmp/vdisk2
- mirror:
  - /tmp/vdisk0
  - /tmp/vdisk1

The above yaml will always result in the following zpool create:

zpool create mypool mirror /tmp/vdisk3 /tmp/vdisk2 mirror /tmp/vdisk0 /tmp/vdisk1

Warning

The legacy format is also still supported but not recommended, because ID’s inside the layout dict must be unique they need to have a suffix.

mirror-0:
  /tmp/vdisk3
  /tmp/vdisk2
mirror-1:
  /tmp/vdisk0
  /tmp/vdisk1

Warning

Pay attention to the order of your dict!

- mirror:
  - /tmp/vdisk0
  - /tmp/vdisk1
- /tmp/vdisk2

The above will result in the following zpool create:

zpool create mypool mirror /tmp/vdisk0 /tmp/vdisk1 /tmp/vdisk2

Creating a 3-way mirror! While you probably expect it to be mirror root vdev with 2 devices + a root vdev of 1 device!

saltext.zfs.states.zpool.absent(name, export=False, force=False)[source]

Ensure a storage pool is absent from the system.

namestring

name of storage pool

exportboolean

export instead of destroy the zpool if present

forceboolean

force destroy or export