示例#1
0
def root_dataset(
    force_clean: bool,
    zfs: libzfs.ZFS,
    pool: libzfs.ZFSPool
) -> libzfs.ZFSDataset:

    dataset_name = f"{pool.name}/iocage-test"

    if force_clean:
        try:
            dataset = zfs.get_dataset(dataset_name)
            helper_functions.unmount_and_destroy_dataset_recursive(dataset)
        except libzfs.ZFSException:
            pass

    try:
        pool.create(dataset_name, {})
    except libzfs.ZFSException:
        if force_clean is True:
            raise

    dataset = zfs.get_dataset(dataset_name)
    if not dataset.mountpoint:
        dataset.mount()

    return dataset

    if force_clean:
        helper_functions.unmount_and_destroy_dataset_recursive(dataset)
示例#2
0
def shared_zfs_dataset(
    root_dataset: libzfs.ZFSDataset,
    zfs: libzfs.ZFS
) -> libzfs.ZFSDataset:
    name = f"{root_dataset.name}/shared-" + str(random.randint(1, 32768))
    root_dataset.pool.create(name, {})
    dataset = zfs.get_dataset(name)
    dataset.properties["jailed"] = libzfs.ZFSUserProperty("on")
    yield dataset
    dataset.delete()
示例#3
0
    def zfs_volume(self, root_dataset: libzfs.ZFSDataset,
                   zfs: libzfs.ZFS) -> libzfs.ZFSDataset:

        r = random.randint(0, sys.maxsize)
        dataset_name = f"{root_dataset.name}/zvol{r}"

        root_dataset.pool.create(dataset_name,
                                 fsopts=dict(volsize="16M"),
                                 fstype=libzfs.DatasetType.VOLUME)

        dataset = zfs.get_dataset(dataset_name)
        yield dataset

        dataset.delete()
示例#4
0
def root_dataset(zfs: libzfs.ZFS, pool: libzfs.ZFSPool) -> libzfs.ZFSDataset:
    """Return the root dataset for tests."""
    dataset_name = f"{pool.name}/libioc-test"

    try:
        pool.create(dataset_name, {})
    except libzfs.ZFSException:
        pass

    dataset = zfs.get_dataset(dataset_name)

    if dataset.properties["mountpoint"].value == "none":
        mountpoint = libzfs.ZFSUserProperty("/.libioc-test")
        dataset.properties["mountpoint"] = mountpoint

    if not dataset.mountpoint:
        dataset.mount()

    return dataset
示例#5
0
    def test_can_be_created(self, host: 'iocage.Host.Host',
                            local_release: 'iocage.Release.ReleaseGenerator',
                            logger: 'iocage.Logger.Logger', zfs: libzfs.ZFS,
                            root_dataset: libzfs.ZFSDataset) -> None:
        """Test if jails can be created."""
        jail = iocage.Jail.Jail(dict(id="foobar"),
                                new=True,
                                host=host,
                                logger=logger,
                                zfs=zfs)
        jail.create(local_release)

        dataset = zfs.get_dataset(f"{root_dataset.name}/jails/{jail.name}")

        def cleanup() -> None:
            helper_functions.unmount_and_destroy_dataset_recursive(dataset)

        try:
            assert not jail.config["basejail"]
            assert not jail.config["basejail_type"]

            assert dataset.mountpoint is not None
            assert os.path.isfile(f"{dataset.mountpoint}/config.json")
            assert os.path.isdir(f"{dataset.mountpoint}/root")

            data = read_jail_config_json(f"{dataset.mountpoint}/config.json")

            try:
                assert data["basejail"] is "no"
            except KeyError:
                pass

            try:
                assert (data["basejail"] is "") or (data["basejail"] == "none")
            except KeyError:
                pass

        except BaseException as e:
            cleanup()
            raise e

        cleanup()
示例#6
0
    def test_can_be_created(self, host: 'libioc.Host.Host',
                            local_release: 'libioc.Release.ReleaseGenerator',
                            logger: 'libioc.Logger.Logger', zfs: libzfs.ZFS,
                            root_dataset: libzfs.ZFSDataset) -> None:
        """Test if NullFS basejails can be created."""
        jail = libioc.Jail.Jail({"basejail": True},
                                new=True,
                                host=host,
                                logger=logger,
                                zfs=zfs)
        jail.create(local_release)

        dataset = zfs.get_dataset(f"{root_dataset.name}/jails/{jail.name}")

        def cleanup() -> None:
            helper_functions.unmount_and_destroy_dataset_recursive(dataset)

        try:
            assert jail.config["basejail"]
            assert jail.config["basejail_type"] == "nullfs"

            assert dataset.mountpoint is not None
            assert os.path.isfile(f"{dataset.mountpoint}/config.json")
            assert os.path.isdir(f"{dataset.mountpoint}/root")

            data = read_jail_config_json(f"{dataset.mountpoint}/config.json")

            assert data["basejail"] == "yes"

            try:
                assert data["basejail_type"] == "nullfs"
            except KeyError:
                pass

        except Exception as e:
            cleanup()
            raise e

        cleanup()
示例#7
0
def root_dataset(
    zfs: libzfs.ZFS,
    pool: libzfs.ZFSPool
) -> libzfs.ZFSDataset:
    """Return the root dataset for tests."""
    dataset_name = f"{pool.name}/libioc-test"

    try:
        pool.create(dataset_name, {})
    except libzfs.ZFSException:
        pass

    dataset = zfs.get_dataset(dataset_name)

    if dataset.properties["mountpoint"].value == "none":
        mountpoint = libzfs.ZFSUserProperty("/.libioc-test")
        dataset.properties["mountpoint"] = mountpoint

    if not dataset.mountpoint:
        dataset.mount()

    return dataset
示例#8
0
    def test_can_be_created(self, new_jail: 'libioc.Jail.Jail',
                            local_release: 'libioc.Release.ReleaseGenerator',
                            root_dataset: libzfs.ZFSDataset,
                            zfs: libzfs.ZFS) -> None:
        """Test if NullFS basejails can be created."""
        new_jail.config["basejail"] = True
        new_jail.create(local_release)

        dataset = zfs.get_dataset(f"{root_dataset.name}/jails/{new_jail.name}")

        assert new_jail.is_basejail is True
        assert new_jail.config["basejail"] is True
        assert new_jail.config["basejail_type"] == "nullfs"

        assert dataset.mountpoint is not None
        assert os.path.isfile(f"{dataset.mountpoint}/config.json")
        assert os.path.isdir(f"{dataset.mountpoint}/root")

        data = read_jail_config_json(f"{dataset.mountpoint}/config.json")

        assert data["basejail"] == "yes"
        if "basejail_type" in data:
            assert data["basejail_type"] == "nullfs"