shutdown: add pre-shutdown pubsub channel

This commit is contained in:
Dan Bungert 2023-06-07 10:39:15 -06:00
parent c0741ab715
commit 50c7ff3d36
3 changed files with 12 additions and 4 deletions

View File

@ -31,6 +31,7 @@ from subiquity.common.apidef import API
from subiquity.common.types import ShutdownMode from subiquity.common.types import ShutdownMode
from subiquity.server.controller import SubiquityController from subiquity.server.controller import SubiquityController
from subiquity.server.controllers.install import ApplicationState from subiquity.server.controllers.install import ApplicationState
from subiquity.server.types import InstallerChannels
log = logging.getLogger("subiquity.server.controllers.shutdown") log = logging.getLogger("subiquity.server.controllers.shutdown")
@ -87,9 +88,9 @@ class ShutdownController(SubiquityController):
await self.server_reboot_event.wait() await self.server_reboot_event.wait()
if self.app.interactive: if self.app.interactive:
await self.user_shutdown_event.wait() await self.user_shutdown_event.wait()
self.shutdown() await self.shutdown()
elif self.app.state == ApplicationState.DONE: elif self.app.state == ApplicationState.DONE:
self.shutdown() await self.shutdown()
@with_context() @with_context()
async def copy_logs_to_target(self, context): async def copy_logs_to_target(self, context):
@ -127,7 +128,10 @@ class ShutdownController(SubiquityController):
log.exception("saving journal failed") log.exception("saving journal failed")
@with_context(description='mode={self.mode.name}') @with_context(description='mode={self.mode.name}')
def shutdown(self, context): async def shutdown(self, context):
await self.app.hub.abroadcast(InstallerChannels.PRE_SHUTDOWN)
# As PRE_SHUTDOWN is supposed to be as close as possible to the
# shutdown, we probably don't want additional logic in between.
self.shuttingdown_event.set() self.shuttingdown_event.set()
if self.opts.dry_run: if self.opts.dry_run:
self.app.exit() self.app.exit()

View File

@ -43,3 +43,7 @@ class InstallerChannels(CoreChannels):
# models in the "install" side of the install/postinstall divide will not # models in the "install" side of the install/postinstall divide will not
# be reconfigured. # be reconfigured.
INSTALL_CONFIRMED = 'install-confirmed' INSTALL_CONFIRMED = 'install-confirmed'
# This message is sent as late as possible, and just before shutdown. This
# step is after logfiles have been copied to the system, so should be used
# sparingly and only as absolutely required.
PRE_SHUTDOWN = 'pre-shutdown'

View File

@ -49,7 +49,7 @@ class SetupShutdownController(ShutdownController):
self.server_reboot_event.set() self.server_reboot_event.set()
@with_context(description='mode={self.mode.name}') @with_context(description='mode={self.mode.name}')
def shutdown(self, context): async def shutdown(self, context):
self.shuttingdown_event.set() self.shuttingdown_event.set()
comments = ["# This file was auto generated by system-setup.", comments = ["# This file was auto generated by system-setup.",
"# Don't edit it. It will be overwritten at next run."] "# Don't edit it. It will be overwritten at next run."]