Support Trilio encryption options

Add suppot for Trilio encryption options TRILIO_ENCRYPTION_SUPPORT
and OPENSTACK_ENCRYPTION_SUPPORT. TRILIO_ENCRYPTION_SUPPORT should
set to True for trilio > 4.2. OPENSTACK_ENCRYPTION_SUPPORT should
be set to True if Barbican is present in the deployment. It would
be nice if Barbicans presence was detected via a relation but since
this option is going in Trilio 5.X exposing this as a charm
option is a tactical fix. As part of the work the charm classes
were restructured a little as this charm does not support 4.0.

func-test-pr: https://github.com/openstack-charmers/zaza-openstack-tests/pull/856

Change-Id: I29e83cab68ba670204f27f15010459836d8f8160
This commit is contained in:
Liam Young 2022-08-15 14:51:32 +00:00
parent 36075ac962
commit 89bf944119
6 changed files with 75 additions and 19 deletions

View File

@ -7,3 +7,7 @@ options:
type: string
default: "deb [trusted=yes] https://apt.fury.io/triliodata-4-0/ /"
description: Repository address of triliovault packages
openstack-encryption-support:
type: boolean
default: False
description: If Openstack has encryption(barbican) support (will be deprecated from 5.0)

View File

@ -25,19 +25,15 @@ HORIZON_PATH = "/usr/share/openstack-dashboard"
MANAGE_PY = os.path.join(HORIZON_PATH, "manage.py")
class TrilioHorizonPluginQueensCharm(
class TrilioHorizonPluginBase(
charms_openstack.plugins.TrilioVaultSubordinateCharm
):
abstract_class = True
service_name = name = "trilio-horizon-plugin"
release = "queens"
trilio_release = "4.0"
required_relations = []
packages = ["python-workloadmgrclient", "tvault-horizon-plugin"]
# Setting an empty source_config_key activates special handling of release
# selection suitable for subordinate charms
source_config_key = ''
@ -48,16 +44,46 @@ class TrilioHorizonPluginQueensCharm(
@classmethod
def trilio_version_package(cls):
return 'tvault-horizon-plugin'
return 'python3-tvault-horizon-plugin'
def trilio_encryption_supported(self):
return False
def local_settings(self):
settings = (
"TRILIO_ENCRYPTION_SUPPORT = {}\n"
"OPENSTACK_ENCRYPTION_SUPPORT = {}").format(
self.trilio_encryption_supported(),
self.config['openstack-encryption-support'])
return settings
class TrilioHorizonPluginCharm(TrilioHorizonPluginQueensCharm):
class TrilioHorizonPluginCharmQueens41(TrilioHorizonPluginBase):
release = "queens"
trilio_release = "4.1"
packages = ["python-workloadmgrclient", "tvault-horizon-plugin"]
class TrilioHorizonPluginCharmQueens42(TrilioHorizonPluginBase):
release = "queens"
trilio_release = "4.2"
packages = ["python-workloadmgrclient", "tvault-horizon-plugin"]
def trilio_encryption_supported(self):
return True
class TrilioHorizonPluginCharmRocky41(TrilioHorizonPluginCharmQueens41):
release = "rocky"
trilio_release = "4.0"
trilio_release = "4.1"
packages = ["python3-workloadmgrclient", "python3-tvault-horizon-plugin"]
@classmethod
def trilio_version_package(cls):
return 'python3-tvault-horizon-plugin'
class TrilioHorizonPluginCharmRocky42(TrilioHorizonPluginCharmQueens42):
release = "rocky"
trilio_release = "4.2"
packages = ["python3-workloadmgrclient", "python3-tvault-horizon-plugin"]

View File

@ -29,3 +29,18 @@ def install_source_changed():
"""Trigger re-install of charm if source configuration options change"""
reactive.clear_flag("charm.installed")
reactive.set_flag("upgrade.triliovault")
@reactive.when_not('is-update-status-hook')
@reactive.when('dashboard-plugin.available')
def dashboard_available():
"""Relation to OpenStack Dashboard principal charm complete.
"""
with charm.provide_charm_instance() as charm_instance:
dashboard_relation = reactive.endpoint_from_flag(
'dashboard-plugin.available')
dashboard_relation.publish_plugin_info(
charm_instance.local_settings(),
1,
conflicting_packages=[],
install_packages=[])

View File

@ -1,6 +1,6 @@
charm_name: trilio-horizon-plugin
tests:
- zaza.charm_tests.noop.tests.NoopTest
- zaza.openstack.charm_tests.trilio.tests.TrilioHorizonPluginTest
configure:
- zaza.openstack.charm_tests.trilio.setup.basic_setup
- zaza.openstack.charm_tests.vault.setup.auto_initialize

View File

@ -100,9 +100,16 @@ class TestDmapiHandlers(test_utils.PatchHelper):
when_patterns = {
"install_source_changed": (
"config.changed.triliovault-pkg-source",
),
"dashboard_available": (
"dashboard-plugin.available",
)
}
when_not_patterns = {
"dashboard_available": (
"is-update-status-hook",
)
}
when_not_patterns = {}
# check the when hooks are attached to the expected functions
for t, p in [
(_when_args, when_patterns),

View File

@ -20,19 +20,23 @@ import charms_openstack.test_utils as test_utils
class Helper(test_utils.PatchHelper):
def setUp(self):
super().setUp()
self.patch_release(trilio_horizon.TrilioHorizonPluginCharm.release)
self.patch_release(
trilio_horizon.TrilioHorizonPluginCharmQueens42.release)
self.patch_release(
trilio_horizon.TrilioHorizonPluginCharmRocky42.release)
class TestTrilioHorizonCharm(Helper):
def test_packages_queens(self):
dm_charm = trilio_horizon.TrilioHorizonPluginQueensCharm()
dm_charm = trilio_horizon.TrilioHorizonPluginCharmQueens42()
self.assertEqual(
dm_charm.packages,
["python-workloadmgrclient", "tvault-horizon-plugin"],
)
def test_packages_rocky(self):
dm_charm = trilio_horizon.TrilioHorizonPluginCharm()
dm_charm = trilio_horizon.TrilioHorizonPluginCharmRocky42()
self.assertEqual(
dm_charm.packages,
["python3-workloadmgrclient", "python3-tvault-horizon-plugin"],