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))
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()