aboutsummaryrefslogtreecommitdiffstats
path: root/jprov/zfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'jprov/zfs.py')
-rw-r--r--jprov/zfs.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/jprov/zfs.py b/jprov/zfs.py
new file mode 100644
index 0000000..e3a1574
--- /dev/null
+++ b/jprov/zfs.py
@@ -0,0 +1,33 @@
+"""ZFS operations."""
+
+from __future__ import annotations
+
+from .runner import run
+
+
+def dataset_exists(
+ name: str,
+ *,
+ log_file: str | None = None,
+ dry_run: bool = False,
+) -> bool:
+ result = run(
+ ["zfs", "list", "-H", "-o", "name", name],
+ allow_fail=True,
+ log_file=log_file,
+ dry_run=dry_run,
+ )
+ return result.returncode == 0
+
+
+def clone_dataset(src: str, dest: str, *, log_file: str | None = None) -> None:
+ run(["zfs", "clone", src, dest], log_file=log_file)
+
+
+def destroy_dataset(name: str, *, log_file: str | None = None) -> None:
+ run(["zfs", "destroy", "-r", name], log_file=log_file)
+
+
+def get_mountpoint(name: str, *, log_file: str | None = None) -> str:
+ result = run(["zfs", "get", "-H", "-o", "value", "mountpoint", name], log_file=log_file)
+ return result.stdout.strip()