From 8110298bb44a0c01e60f41b444866d7e94542c6c Mon Sep 17 00:00:00 2001 From: Alex Kavanagh Date: Tue, 28 Jan 2020 14:48:45 +0000 Subject: [PATCH] Fix packaging issue by devolving it to principal This patchset fixes the referenced bug by making use a new feature in the openstack-dashboard charm to allow this plugin to indicate which packages need installing and which conflict. The two depends-on are the openstack-dashboard patch to add the packaging feature and the charm-interface-dashboard-plugin patch that adds the package details to the reactive interface code. Also remove disco test and add eoan-train test due to disco EOL. Depends-On: I962ec558b8dd1f765c6104d5ae61edd41c03affe Depends-On: Ib3fc0b0525dabf70f45fd050af2ed05ba31129b9 Change-Id: I8582a4cf62749240919d0fe4dd5d72577d288397 Closes-Bug: #1853851 --- src/lib/charm/openstack/octavia_dashboard.py | 14 ------- src/metadata.yaml | 2 +- src/reactive/octavia_dashboard_handlers.py | 6 ++- .../{disco-stein.yaml => eoan-train.yaml} | 14 ++++++- src/tests/tests.yaml | 3 +- ...t_lib_charm_openstack_octavia_dashboard.py | 38 ------------------- unit_tests/test_octavia_dashboard_handlers.py | 8 ++++ 7 files changed, 28 insertions(+), 57 deletions(-) rename src/tests/bundles/{disco-stein.yaml => eoan-train.yaml} (83%) delete mode 100644 unit_tests/test_lib_charm_openstack_octavia_dashboard.py diff --git a/src/lib/charm/openstack/octavia_dashboard.py b/src/lib/charm/openstack/octavia_dashboard.py index 6f365e4..4eb8557 100644 --- a/src/lib/charm/openstack/octavia_dashboard.py +++ b/src/lib/charm/openstack/octavia_dashboard.py @@ -15,8 +15,6 @@ import charms_openstack.adapters import charms_openstack.charm -import charmhelpers.fetch as ch_fetch - class OctaviaDashboardCharm(charms_openstack.charm.OpenStackCharm): release = 'rocky' @@ -26,15 +24,3 @@ class OctaviaDashboardCharm(charms_openstack.charm.OpenStackCharm): python_version = 3 adapters_class = charms_openstack.adapters.OpenStackRelationAdapters required_relations = ['dashboard'] - - def install(self): - # NOTE(fnordahl) purge_packages is only honoured by charms.openstack - # on OpenStack upgrade, not first install. - installed_purge_packages = list( - set(self.purge_packages) - - set(ch_fetch.filter_installed_packages(self.purge_packages)) - ) - if installed_purge_packages: - ch_fetch.apt_purge(packages=installed_purge_packages, - fatal=True) - super().install() diff --git a/src/metadata.yaml b/src/metadata.yaml index 071d6b6..aafa7ff 100644 --- a/src/metadata.yaml +++ b/src/metadata.yaml @@ -8,7 +8,7 @@ tags: series: - bionic - cosmic - - disco + - eoan subordinate: true requires: dashboard: diff --git a/src/reactive/octavia_dashboard_handlers.py b/src/reactive/octavia_dashboard_handlers.py index 368ce8c..ea3b5bb 100644 --- a/src/reactive/octavia_dashboard_handlers.py +++ b/src/reactive/octavia_dashboard_handlers.py @@ -31,6 +31,10 @@ charm.use_defaults( def dashboard_available(): """Relation to OpenStack Dashboard principal charm complete. """ - # config and restart is handled by package install, just update our status with charm.provide_charm_instance() as octavia_dashboard_charm: + dashboard_relation = reactive.endpoint_from_flag('dashboard.available') + dashboard_relation.publish_plugin_info( + "", None, + conflicting_packages=octavia_dashboard_charm.purge_packages, + install_packages=octavia_dashboard_charm.packages) octavia_dashboard_charm.assess_status() diff --git a/src/tests/bundles/disco-stein.yaml b/src/tests/bundles/eoan-train.yaml similarity index 83% rename from src/tests/bundles/disco-stein.yaml rename to src/tests/bundles/eoan-train.yaml index 05f27d4..7371638 100644 --- a/src/tests/bundles/disco-stein.yaml +++ b/src/tests/bundles/eoan-train.yaml @@ -1,4 +1,4 @@ -series: disco +series: eoan relations: - - mysql:shared-db - keystone:shared-db @@ -28,6 +28,8 @@ applications: keystone: charm: cs:~openstack-charmers-next/keystone num_units: 1 + options: + openstack-origin: cloud:eoan-train mysql: constraints: mem=3072M charm: cs:~openstack-charmers-next/percona-cluster @@ -36,18 +38,26 @@ applications: charm: cs:~openstack-charmers-next/neutron-api num_units: 1 options: + openstack-origin: cloud:eoan-train neutron-security-groups: True neutron-openvswitch: + series: eoan charm: cs:~openstack-charmers-next/neutron-openvswitch num_units: 0 octavia: + series: eoan charm: cs:~openstack-charmers-next/octavia num_units: 1 + options: + openstack-origin: cloud:eoan-train openstack-dashboard: + series: eoan charm: cs:~openstack-charmers-next/openstack-dashboard num_units: 1 + options: + openstack-origin: cloud:eoan-train octavia-dashboard: - series: disco + series: eoan charm: ../../../octavia-dashboard rabbitmq-server: charm: cs:~openstack-charmers-next/rabbitmq-server diff --git a/src/tests/tests.yaml b/src/tests/tests.yaml index a2b7c6d..aeaafaf 100644 --- a/src/tests/tests.yaml +++ b/src/tests/tests.yaml @@ -1,11 +1,12 @@ charm_name: octavia-dashboard gate_bundles: - bionic-train -- disco-stein - bionic-stein - bionic-rocky smoke_bundles: - bionic-train +dev_bundles: +- eoan-train comment: | Disable ``cosmic-rocky`` bundle pending SRU of ``octavia-dashboard`` package. target_deploy_status: diff --git a/unit_tests/test_lib_charm_openstack_octavia_dashboard.py b/unit_tests/test_lib_charm_openstack_octavia_dashboard.py deleted file mode 100644 index 54558a6..0000000 --- a/unit_tests/test_lib_charm_openstack_octavia_dashboard.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2016 Canonical Ltd -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import -from __future__ import print_function - -import charms_openstack.test_utils as test_utils - -import charm.openstack.octavia_dashboard as octavia_dashboard - - -class TestOctaviaDashboardHandlers(test_utils.PatchHelper): - - def test_install(self): - # we do not care about the internals of the function we are overriding - # and expanding so mock out the call to super() - self.patch_object(octavia_dashboard, 'ch_fetch') - self.patch('builtins.super', 'super') - c = octavia_dashboard.OctaviaDashboardCharm() - c.install() - self.ch_fetch.filter_installed_packages.return_value = [] - self.ch_fetch.filter_installed_packages.assert_called_with( - c.purge_packages) - self.ch_fetch.apt_purge.assert_called_with( - fatal=True, - packages=c.purge_packages) - self.super.assert_called() diff --git a/unit_tests/test_octavia_dashboard_handlers.py b/unit_tests/test_octavia_dashboard_handlers.py index b566daa..499a209 100644 --- a/unit_tests/test_octavia_dashboard_handlers.py +++ b/unit_tests/test_octavia_dashboard_handlers.py @@ -51,7 +51,15 @@ class TestOctaviaDashboardHandlers(test_utils.PatchHelper): self.provide_charm_instance().__enter__.return_value = \ self.octavia_dashboard_charm self.provide_charm_instance().__exit__.return_value = None + self.patch('charms.reactive.endpoint_from_flag') def test_dashboard_available(self): + mock_flag = mock.Mock() + self.endpoint_from_flag.return_value = mock_flag + self.octavia_dashboard_charm.purge_packages = ['n1'] + self.octavia_dashboard_charm.packages = ['p1', 'p2'] handlers.dashboard_available() self.octavia_dashboard_charm.assess_status.assert_called_once_with() + mock_flag.publish_plugin_info.assert_called_once_with( + "", None, conflicting_packages=['n1'], + install_packages=['p1', 'p2'])