Add new interface 'dashboard'

openstack-dashboard exposes the hostnames (and IP addresses) that can be
used by users to load Horizon. There are 3 possible sources, they are
juju units ingress-address, os-public-hostname and vip config options

Closes-Bug: #2030094
Change-Id: I5eb524c6258f72980ef43175f2bed21d7ca078be
(cherry picked from commit 484b7d8260)
(cherry picked from commit 83ffa9eb3a)
This commit is contained in:
Felipe Reyes 2023-09-01 17:41:00 -04:00
parent 6080af8efd
commit d71c4ea6d6
5 changed files with 41 additions and 0 deletions

View File

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

View File

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

View File

@ -224,6 +224,7 @@ def config_changed():
ha_relation_joined(relation_id=relid)
websso_trusted_dashboard_changed()
dashboard_relation_changed()
@hooks.hook('identity-service-relation-joined')
@ -463,6 +464,25 @@ def websso_trusted_dashboard_changed():
})
@hooks.hook('dashboard-relation-joined',
'dashboard-relation-changed')
def dashboard_relation_changed():
"""
Provide dashboard information.
"""
relations = relation_ids('dashboard')
if not relations:
return
relation_settings = {
'os-public-hostname': config('os-public-hostname'),
'vip': config('vip'),
}
for rel_id in relations:
relation_set(rel_id, relation_settings=relation_settings, app=True)
def main():
try:
hooks.execute(sys.argv)

View File

@ -22,6 +22,8 @@ provides:
scope: container
websso-trusted-dashboard:
interface: websso-trusted-dashboard
dashboard:
interface: dashboard
requires:
identity-service:
interface: keystone

View File

@ -230,6 +230,7 @@ class TestHorizonHooks(CharmTestCase):
],
'certificates': [],
'ha': [],
'dashboard': [],
}[rname]
self.relation_ids.side_effect = relation_ids_side_effect
@ -457,3 +458,19 @@ class TestHorizonHooks(CharmTestCase):
self.register_configs().write_all.assert_called_with()
_service_reload.assert_called_with('apache2')
self.enable_ssl.assert_called_with()
def test_dashboard_relation_changed(self):
self.relation_ids.return_value = None
hooks.dashboard_relation_changed()
self.test_config.set('os-public-hostname', 'mydashboard.local')
self.test_config.set('vip', '1.2.3.4')
self.relation_ids.return_value = ['dashboard:0']
hooks.dashboard_relation_changed()
self.relation_set.assert_called_with(
'dashboard:0',
relation_settings={'os-public-hostname': 'mydashboard.local',
'vip': '1.2.3.4'},
app=True,
)