Merge "[openstack-hypervisor] Add support for sev" into main

This commit is contained in:
Zuul 2025-02-25 09:00:58 +00:00 committed by Gerrit Code Review
commit 97e82b6cec
3 changed files with 44 additions and 0 deletions

View File

@ -42,6 +42,13 @@ config:
use-data-binding:
default: false
type: boolean
reserved-host-memory-mb-for-sev:
type: string
description: |
Memory to be reserved for host for SEV enabled compute
hosts. This memory will be used for instances. The compute
usage report deducts this memory from the available
memory sent to the placement service.
actions:
set-hypervisor-local-settings:
@ -81,6 +88,9 @@ actions:
Only lists guests created by the OpenStack cloud.
additionalProperties: false
list-flavors:
description: |
List the flavors or compute host capabilities.
requires:
amqp:

View File

@ -191,6 +191,10 @@ class HypervisorOperatorCharm(sunbeam_charm.OSBaseOperatorCharm):
self.on.running_guests_action,
self._running_guests_action,
)
self.framework.observe(
self.on.list_flavors_action,
self._list_flavors_action,
)
self.framework.observe(
self.on.install,
self._on_install,
@ -422,6 +426,18 @@ class HypervisorOperatorCharm(sunbeam_charm.OSBaseOperatorCharm):
# cli returns a json list
event.set_results({"result": stdout})
def _list_flavors_action(self, event: ActionEvent):
"""List compute host capabilities."""
cache = self.get_snap_cache()
hypervisor = cache["openstack-hypervisor"]
try:
flavors = hypervisor.get("compute.flavors", typed=True)
except snap.SnapError as e:
logger.debug(e)
flavors = ""
event.set_results({"result": flavors})
def ensure_services_running(self):
"""Ensure systemd services running."""
# This should taken care of by the snap
@ -575,6 +591,9 @@ class HypervisorOperatorCharm(sunbeam_charm.OSBaseOperatorCharm):
"node.ip-address": config("ip-address") or local_ip,
"rabbitmq.url": contexts.amqp.transport_url,
"monitoring.enable": self.enable_monitoring,
"sev.reserved-host-memory-mb": config(
"reserved-host-memory-mb-for-sev"
),
}
except AttributeError as e:
raise sunbeam_guard.WaitingExceptionError(

View File

@ -174,6 +174,7 @@ class TestCharm(test_utils.CharmTestCase):
"telemetry.enable": False,
"ca.bundle": None,
"masakari.enable": False,
"sev.reserved-host-memory-mb": None,
}
hypervisor_snap_mock.set.assert_any_call(expect_settings, typed=True)
@ -287,6 +288,7 @@ class TestCharm(test_utils.CharmTestCase):
"telemetry.publisher-secret": "FAKE_SECRET",
"ca.bundle": None,
"masakari.enable": True,
"sev.reserved-host-memory-mb": None,
}
hypervisor_snap_mock.set.assert_any_call(expect_settings, typed=True)
@ -346,3 +348,16 @@ class TestCharm(test_utils.CharmTestCase):
self.subprocess.run = subprocess_run_mock
with self.assertRaises(ops.testing.ActionFailed):
self.harness.run_action("list-nics")
def test_list_flavors(self):
"""Check action return flavors."""
flavors = "flavor1,flavor2"
self.harness.begin()
hypervisor_snap_mock = MagicMock()
hypervisor_snap_mock.present = True
self.snap.SnapCache.return_value = {
"openstack-hypervisor": hypervisor_snap_mock
}
hypervisor_snap_mock.get.return_value = flavors
action_output = self.harness.run_action("list-flavors")
assert action_output.results["result"] == flavors