Add series upgrade support

This commit is contained in:
Liam Young 2020-03-17 16:54:52 +00:00
parent 0d650e2896
commit e4cfb975aa
1 changed files with 26 additions and 0 deletions

View File

@ -53,10 +53,13 @@ class OSBaseCharm(CharmBase):
super().__init__(framework, key) super().__init__(framework, key)
self.state.set_default(is_started=False) self.state.set_default(is_started=False)
self.state.set_default(is_paused=False) self.state.set_default(is_paused=False)
self.state.set_default(series_upgrade=False)
self.framework.observe(self.on.install, self) self.framework.observe(self.on.install, self)
self.framework.observe(self.on.update_status, self) self.framework.observe(self.on.update_status, self)
self.framework.observe(self.on.pause_action, self) self.framework.observe(self.on.pause_action, self)
self.framework.observe(self.on.resume_action, self) self.framework.observe(self.on.resume_action, self)
self.framework.observe(self.on.pre_series_upgrade, self)
self.framework.observe(self.on.post_series_upgrade, self)
def on_install(self, event): def on_install(self, event):
logging.info("Installing packages") logging.info("Installing packages")
@ -70,6 +73,11 @@ class OSBaseCharm(CharmBase):
def update_status(self): def update_status(self):
logging.info("Updating status") logging.info("Updating status")
if self.state.series_upgrade:
self.model.unit.status = BlockedStatus(
'Ready for do-release-upgrade and reboot. '
'Set complete when finished.')
return
if self.state.is_paused: if self.state.is_paused:
self.model.unit.status = MaintenanceStatus( self.model.unit.status = MaintenanceStatus(
"Paused. Use 'resume' action to resume normal service.") "Paused. Use 'resume' action to resume normal service.")
@ -96,6 +104,24 @@ class OSBaseCharm(CharmBase):
_svcs.extend(svc) _svcs.extend(svc)
return list(set(_svcs)) return list(set(_svcs))
def on_pre_series_upgrade(self, event):
_, messages = os_utils.manage_payload_services(
'pause',
services=self.services(),
charm_func=None)
self.state.is_paused = True
self.state.series_upgrade = True
self.update_status()
def on_post_series_upgrade(self, event):
_, messages = os_utils.manage_payload_services(
'resume',
services=self.services(),
charm_func=None)
self.state.is_paused = False
self.state.series_upgrade = False
self.update_status()
def on_pause_action(self, event): def on_pause_action(self, event):
_, messages = os_utils.manage_payload_services( _, messages = os_utils.manage_payload_services(
'pause', 'pause',