Example #1
0
    def _force_stop(
            self
    ) -> typing.Generator['iocage.lib.events.IocageEvent', None, None]:

        events: typing.Any = iocage.lib.events
        jailDestroyEvent = events.JailDestroy(self)
        jailNetworkTeardownEvent = events.JailNetworkTeardown(self)
        jailMountTeardownEvent = events.JailMountTeardown(self)

        try:
            self._run_hook("prestop")
        except Exception:
            self.logger.warn("pre-stop script failed")

        yield jailDestroyEvent.begin()
        try:
            self._destroy_jail()
            self.logger.debug(f"{self.humanreadable_name}: jail destroyed")
            yield jailDestroyEvent.end()
        except Exception as e:
            yield jailDestroyEvent.skip()

        if self.config["vnet"]:
            yield jailNetworkTeardownEvent.begin()
            try:
                self._stop_vimage_network()
                self.logger.debug(f"{self.humanreadable_name}: VNET stopped")
                yield jailNetworkTeardownEvent.end()
            except Exception as e:
                yield jailNetworkTeardownEvent.skip()

        yield jailMountTeardownEvent.begin()
        try:
            self._teardown_mounts()
            self.logger.debug(f"{self.humanreadable_name}: mounts destroyed")
            yield jailMountTeardownEvent.end()
        except Exception as e:
            yield jailMountTeardownEvent.skip()

        try:
            self.state.query()
        except Exception as e:
            self.logger.warn(str(e))
Example #2
0
    def stop(
        self,
        force: bool = False
    ) -> typing.Generator['iocage.lib.events.IocageEvent', None, None]:
        """
        Stop a jail.

        Args:

            force (bool): (default=False)
                Ignores failures and enforces teardown if True
        """

        if force is True:
            for event in self._force_stop():
                yield event
            return

        self.require_jail_existing()
        self.require_jail_running()

        events: typing.Any = iocage.lib.events
        jailDestroyEvent = events.JailDestroy(self)
        jailNetworkTeardownEvent = events.JailNetworkTeardown(self)
        jailMountTeardownEvent = events.JailMountTeardown(self)

        self._run_hook("prestop")

        yield jailDestroyEvent.begin()
        self._destroy_jail()
        yield jailDestroyEvent.end()

        if self.config["vnet"]:
            yield jailNetworkTeardownEvent.begin()
            self._stop_vimage_network()
            yield jailNetworkTeardownEvent.end()

        yield jailMountTeardownEvent.begin()
        self._teardown_mounts()
        yield jailMountTeardownEvent.end()

        self.state.query()