Series Upgrade

Implement the series-upgrade feature allowing to move between Ubuntu
series.

Change-Id: Idcc77b66e65633eb26e485e93ef7928b7f455ca8
This commit is contained in:
David Ames 2018-08-08 16:26:00 -07:00
parent 621ddb11b5
commit ea6eb53059
5 changed files with 44 additions and 1 deletions

View File

@ -48,6 +48,13 @@ from charmhelpers.contrib.network.ip import (
get_relation_ip,
)
from charmhelpers.contrib.openstack.utils import (
is_unit_paused_set,
set_unit_upgrading,
clear_unit_upgrading,
clear_unit_paused,
)
from charmhelpers.fetch import (
apt_install,
apt_purge,
@ -83,6 +90,8 @@ from utils import (
needs_maas_dns_migration,
write_maas_dns_address,
MAASConfigIncomplete,
pause_unit,
resume_unit,
)
from charmhelpers.contrib.charmsupport import nrpe
@ -133,6 +142,12 @@ def get_transport():
@hooks.hook('config-changed')
def config_changed():
# if we are paused, delay doing any config changed hooks.
# It is forced on the resume.
if is_unit_paused_set():
log("Unit is pause or upgrading. Skipping config_changed", "WARN")
return
setup_ocf_files()
if config('prefer-ipv6'):
@ -481,6 +496,22 @@ def update_nrpe_config():
nrpe_setup.write()
@hooks.hook('pre-series-upgrade')
def series_upgrade_prepare():
set_unit_upgrading()
if not is_unit_paused_set():
pause_unit()
@hooks.hook('post-series-upgrade')
def series_upgrade_complete():
log("Running complete series upgrade hook", "INFO")
clear_unit_paused()
clear_unit_upgrading()
config_changed()
resume_unit()
if __name__ == '__main__':
try:
hooks.execute(sys.argv)

1
hooks/post-series-upgrade Symbolic link
View File

@ -0,0 +1 @@
hooks.py

1
hooks/pre-series-upgrade Symbolic link
View File

@ -0,0 +1 @@
hooks.py

1
hooks/update-status Symbolic link
View File

@ -0,0 +1 @@
hooks.py

View File

@ -47,6 +47,7 @@ from charmhelpers.contrib.openstack.utils import (
set_unit_paused,
clear_unit_paused,
is_unit_paused_set,
is_unit_upgrading_set,
)
from charmhelpers.contrib.openstack.ha.utils import (
assert_charm_supports_dns_ha
@ -849,7 +850,7 @@ def pause_unit():
status, message = assess_status_helper()
if status != 'active':
messages.append(message)
if messages:
if messages and not is_unit_upgrading_set():
raise Exception("Couldn't pause: {}".format("; ".join(messages)))
else:
set_unit_paused()
@ -863,6 +864,14 @@ def assess_status_helper():
@returns status, message - status is workload status and message is any
corresponding messages
"""
if is_unit_upgrading_set():
return ("blocked",
"Ready for do-release-upgrde. Set complete when finished")
if is_unit_paused_set():
return ("maintenance",
"Paused. Use 'resume' action to resume normal service.")
node_count = int(config('cluster_count'))
status = 'active'
message = 'Unit is ready and clustered'