Esempio n. 1
0
def test_boot_environment_listed(root_dataset, capsys):
    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    boot_environment = f"zedenv-{datetime.datetime.now().isoformat()}"

    verbose = True
    existing = None

    columns = ["name", "origin", "creation"]

    zedenv.cli.create.zedenv_create(parent_dataset, root_dataset,
                                    boot_environment, verbose, existing, None)

    be_list = zedenv.cli.list.configure_boot_environment_list(
        zfs_utility.dataset_parent(root_dataset), columns, True)

    assert any(f"{boot_environment}" in s for s in be_list)
Esempio n. 2
0
def test_boot_environment_destroyed(root_dataset, created_boot_environment):
    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    verbose = True
    noconfirm = True
    noop = True

    zedenv.cli.destroy.zedenv_destroy(created_boot_environment, parent_dataset,
                                      root_dataset, verbose, noconfirm, noop)
Esempio n. 3
0
def created_boot_environment(root_dataset):
    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    boot_environment = f"zedenv-{datetime.datetime.now().isoformat()}"
    verbose = True
    existing = None
    zedenv.cli.create.zedenv_create(parent_dataset, root_dataset,
                                    boot_environment, verbose, existing)

    return boot_environment
Esempio n. 4
0
def root(mount_dataset: str = "/") -> Optional[str]:
    """
    Root of boot environment datasets, e.g. zpool/ROOT
    """
    mountpoint_dataset = pyzfscmds.system.agnostic.mountpoint_dataset(
        mount_dataset)
    if mountpoint_dataset is None:
        return None

    return zfs_utility.dataset_parent(mountpoint_dataset)
Esempio n. 5
0
def test_boot_environment_created(root_dataset):
    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    boot_environment = f"zedenv-{datetime.datetime.now().isoformat()}"
    verbose = True
    existing = None

    zedenv.cli.create.zedenv_create(parent_dataset, root_dataset,
                                    boot_environment, verbose, existing)

    assert zfs_utility.dataset_exists(f"{parent_dataset}/{boot_environment}")
Esempio n. 6
0
def test_is_clone(zpool, test_dataset):
    dataset = "/".join([zpool, test_dataset])
    clone_root = zfs_utility.dataset_parent(dataset)

    snapname = f"pyzfscmds-{datetime.datetime.now().isoformat()}"
    pyzfscmds.cmd.zfs_snapshot(dataset, snapname)

    clone_name = f"{clone_root}/pyzfscmds-{datetime.datetime.now().isoformat()}"
    pyzfscmds.cmd.zfs_clone(f"{dataset}@{snapname}", clone_name)

    assert zfs_utility.is_clone(clone_name)
Esempio n. 7
0
def test_same_boot_environment_created(root_dataset):
    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    boot_environment = f"zedenv-{datetime.datetime.now().isoformat()}"
    verbose = True
    existing = None

    zedenv.cli.create.zedenv_create(parent_dataset, root_dataset,
                                    boot_environment, verbose, existing)
    with pytest.raises(SystemExit):
        zedenv.cli.create.zedenv_create(parent_dataset, root_dataset,
                                        boot_environment, verbose, existing)
Esempio n. 8
0
def create_clone(dataset_name,
                 snapname,
                 properties: list = None,
                 create_parent=False):
    clone_root = zfs_utility.dataset_parent(dataset_name)
    clone_suffix = f"pyzfscmds-{datetime.datetime.now().isoformat()}"
    try:
        pyzfscmds.cmd.zfs_snapshot(dataset_name, snapname)
        pyzfscmds.cmd.zfs_clone(f"{dataset_name}@{snapname}",
                                f"{clone_root}/{clone_suffix}",
                                properties=properties,
                                create_parent=create_parent)
    except (RuntimeError, TypeError):
        raise

    return f"{clone_root}/{clone_suffix}"
Esempio n. 9
0
def test_boot_environment_destroy_fails(root_dataset,
                                        created_boot_environment):
    """
    Wont fail if not root on ZFS
    """
    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    verbose = True
    noconfirm = True
    noop = True
    bootloader = None

    zedenv.cli.activate.zedenv_activate(created_boot_environment,
                                        parent_dataset, verbose, bootloader,
                                        noconfirm, noop)

    with pytest.raises(SystemExit):
        zedenv.cli.destroy.zedenv_destroy(created_boot_environment,
                                          parent_dataset, root_dataset,
                                          verbose, noconfirm, noop)
Esempio n. 10
0
def get_clones(root_dataset: str, existing: Optional[str]) -> list:

    parent_dataset = zfs_utility.dataset_parent(root_dataset)

    clone_data = []
    list_dataset = None  # Dataset we are listing clones under

    if existing:
        existing_dataset = f"{parent_dataset}/{existing}"
        if zfs_utility.is_snapshot(existing_dataset):
            snap_suffix = existing_dataset.rsplit('@', 1)[-1]
            list_dataset = zfs_utility.snapshot_parent_dataset(
                existing_dataset)
        else:
            if zfs_utility.dataset_exists(existing_dataset):
                snap_suffix = zedenv.lib.be.snapshot(existing, parent_dataset)
                list_dataset = f"{parent_dataset}/{existing}"
            else:
                ZELogger.log(
                    {
                        "level": "EXCEPTION",
                        "message":
                        f"The dataset {existing_dataset} doesn't exist."
                    },
                    exit_on_error=True)
    else:
        snap_suffix = zedenv.lib.be.snapshot(
            zfs_utility.dataset_child_name(root_dataset), parent_dataset)
        list_dataset = root_dataset

    clones = None
    try:
        clones = pyzfscmds.cmd.zfs_list(list_dataset,
                                        recursive=True,
                                        columns=["name"])
    except RuntimeError as e:
        ZELogger.log(
            {
                "level": "EXCEPTION",
                "message": f"Failed to list datasets under {root_dataset}."
            },
            exit_on_error=True)

    for c in [line for line in clones.splitlines()]:

        if zfs_utility.dataset_exists(f"{c}@{snap_suffix}",
                                      zfs_type="snapshot"):
            if c == list_dataset:
                child = ""
            else:
                child = zfs_utility.dataset_child_name(c)
            clone_props = zedenv.lib.be.properties(c, [["canmount", "off"]])
            clone_data.append({
                "snapshot": f"{c}@{snap_suffix}",
                "properties": clone_props,
                "datasetchild": child
            })
        else:
            ZELogger.log(
                {
                    "level": "EXCEPTION",
                    "message": f"Failed to find snapshot {c}@{snap_suffix}."
                },
                exit_on_error=True)

    return clone_data
Esempio n. 11
0
def test_dataset_parent():
    assert zfs_utility.dataset_parent(
        test_dataset_names['root']
    ) == test_dataset_names['boot_environment_root']