From 5019cca86d38992a379db9d2c83a8300ccd0ad4f Mon Sep 17 00:00:00 2001 From: David Ames Date: Fri, 19 Oct 2018 15:26:10 -0700 Subject: [PATCH] Series Upgrade Implement the series-upgrade feature allowing to move between Ubuntu series. Change-Id: I68ba3ac518406c61ba1a6c61fd3236a0d8cb5d16 --- src/reactive/vault_handlers.py | 22 ++++++++++++++++++++++ unit_tests/test_reactive_vault_handlers.py | 7 +++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/reactive/vault_handlers.py b/src/reactive/vault_handlers.py index e951dbe..8e7d9a5 100644 --- a/src/reactive/vault_handlers.py +++ b/src/reactive/vault_handlers.py @@ -584,6 +584,12 @@ def _assess_status(): 'vip and dns-ha-access-record configured') return + if unitdata.kv().get('charm.vault.series-upgrading'): + status_set("blocked", + "Ready for do-release-upgrade and reboot. " + "Set complete when finished.") + return + health = None if service_running('vault'): health = vault.get_vault_health() @@ -721,3 +727,19 @@ def create_certs(): log(str(e), level=ERROR) continue # TODO: report failure back to client clear_flag('certificates.reissue.requested') + + +# Series upgrade hooks are a special case and reacting to the hook directly +# makes sense as we may not want other charm code to run +@hook('pre-series-upgrade') +def pre_series_upgrade(): + """Handler for pre-series-upgrade. + """ + unitdata.kv().set('charm.vault.series-upgrading', True) + + +@hook('post-series-upgrade') +def post_series_upgrade(): + """Handler for post-series-upgrade. + """ + unitdata.kv().set('charm.vault.series-upgrading', False) diff --git a/unit_tests/test_reactive_vault_handlers.py b/unit_tests/test_reactive_vault_handlers.py index 6bd16db..959f375 100644 --- a/unit_tests/test_reactive_vault_handlers.py +++ b/unit_tests/test_reactive_vault_handlers.py @@ -74,6 +74,9 @@ class TestHandlers(unit_tests.test_utils.CharmTestCase): ] self.patch_all() self.is_container.return_value = False + self.kv = mock.MagicMock() + self.kv.get.return_value = False + self.unitdata.kv.return_value = self.kv def test_ssl_available(self): self.assertFalse(handlers.ssl_available({ @@ -563,8 +566,8 @@ class TestHandlers(unit_tests.test_utils.CharmTestCase): hvac_client.auth_approle.assert_called_once_with('local-approle') _vault.configure_secret_backend.assert_has_calls([ mock.call(hvac_client, name='charm-vaultlocker'), - mock.call(hvac_client, name='charm-supersecrets') - ]) + mock.call(hvac_client, name='charm-supersecrets'), + ], any_order=True) _vault.configure_policy.assert_has_calls([ mock.call(hvac_client, name='charm-ceph-osd-0', hcl=mock.ANY),