From 21b63cc1f2f58f0efba64bbd1d0b1932ccaed8c1 Mon Sep 17 00:00:00 2001 From: Rye Terrell Date: Mon, 5 Mar 2018 08:46:02 -0600 Subject: [PATCH] Bugfix for erroneous upgrade needed messaging in kubernetes worker charm. --- .../reactive/kubernetes_worker.py | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py b/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py index 8d232e05f12..c3e9ee54323 100644 --- a/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py +++ b/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py @@ -78,20 +78,22 @@ def upgrade_charm(): set_state('kubernetes-worker.restart-needed') +def get_snap_resource_paths(): + resources = ['kubectl', 'kubelet', 'kube-proxy'] + return [hookenv.resource_get(resource) for resource in resources] + + def check_resources_for_upgrade_needed(): hookenv.status_set('maintenance', 'Checking resources') - resources = ['kubectl', 'kubelet', 'kube-proxy'] - paths = [hookenv.resource_get(resource) for resource in resources] - if any_file_changed(paths): + if any_file_changed(get_snap_resource_paths()): set_upgrade_needed() def set_upgrade_needed(): set_state('kubernetes-worker.snaps.upgrade-needed') config = hookenv.config() - previous_channel = config.previous('channel') require_manual = config.get('require-manual-upgrade') - if previous_channel is None or not require_manual: + if not require_manual: set_state('kubernetes-worker.snaps.upgrade-specified') @@ -127,21 +129,34 @@ def cleanup_pre_snap_services(): os.remove(file) +@when_not('kubernetes-worker.snap.resources-available') +def check_snap_resources(): + for path in get_snap_resource_paths(): + if not path or not os.path.exists(path): + msg = 'Missing snap resources.' + hookenv.status_set('blocked', msg) + return + set_state('kubernetes-worker.snap.resources-available') + set_state('kubernetes-worker.snaps.upgrade-specified') + + @when('config.changed.channel') def channel_changed(): set_upgrade_needed() -@when('kubernetes-worker.snaps.upgrade-needed') +@when('kubernetes-worker.snaps.upgrade-needed', + 'kubernetes-worker.snap.resources-available') @when_not('kubernetes-worker.snaps.upgrade-specified') def upgrade_needed_status(): msg = 'Needs manual upgrade, run the upgrade action' hookenv.status_set('blocked', msg) -@when('kubernetes-worker.snaps.upgrade-specified') +@when('kubernetes-worker.snap.resources-available', + 'kubernetes-worker.snaps.upgrade-specified') def install_snaps(): - check_resources_for_upgrade_needed() + any_file_changed(get_snap_resource_paths()) channel = hookenv.config('channel') hookenv.status_set('maintenance', 'Installing kubectl snap') snap.install('kubectl', channel=channel, classic=True)