Charm class and handlers for Cinder plugin
Add a charm class to base Cinder plugins from and associated default handlers. Depends-On: Icad5f72939b1e33d15adf2638f8e344235a9318b Change-Id: Ieb5f274c54c693c7c1f5ebbc57bcfe218827ffeb
This commit is contained in:
parent
34bc40a2f8
commit
d658c0974c
|
@ -24,12 +24,14 @@ from charms_openstack.charm.core import (
|
|||
register_os_release_selector,
|
||||
)
|
||||
from charms_openstack.charm.classes import (
|
||||
CinderStoragePluginCharm,
|
||||
OpenStackCharm,
|
||||
OpenStackAPICharm,
|
||||
HAOpenStackCharm,
|
||||
)
|
||||
|
||||
__all__ = (
|
||||
"CinderStoragePluginCharm",
|
||||
"OpenStackCharm",
|
||||
"OpenStackAPICharm",
|
||||
"HAOpenStackCharm",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import base64
|
||||
import contextlib
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
import re
|
||||
|
@ -843,3 +844,53 @@ class HAOpenStackCharm(OpenStackAPICharm):
|
|||
cluster.set_address(
|
||||
os_ip.ADDRESS_MAP[addr_type]['binding'],
|
||||
laddr)
|
||||
|
||||
|
||||
class CinderStoragePluginCharm(OpenStackCharm):
|
||||
|
||||
abstract_class = True
|
||||
|
||||
# The name of the charm (for printing, etc.)
|
||||
name = ''
|
||||
|
||||
# List of packages to install
|
||||
# XXX execd_preinstall
|
||||
packages = []
|
||||
|
||||
version_package = ''
|
||||
# The list of required services that are checked for assess_status
|
||||
# e.g. required_relations = ['identity-service', 'shared-db']
|
||||
required_relations = []
|
||||
|
||||
# A dictionary of:
|
||||
# {
|
||||
# 'config.file': ['list', 'of', 'services', 'to', 'restart'],
|
||||
# 'config2.file': ['more', 'services'],
|
||||
# }
|
||||
# The files that for the keys of the dict are monitored and if the file
|
||||
# changes the corresponding services are restarted
|
||||
# XXX This is more involved in the tradioional charm so we're
|
||||
# probably missing something herw!
|
||||
restart_map = {}
|
||||
|
||||
# first_release = this is the first release in which this charm works
|
||||
release = ''
|
||||
|
||||
@property
|
||||
def stateless(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
@property
|
||||
def service_name(self):
|
||||
return hookenv.service_name()
|
||||
|
||||
def cinder_configuration(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
def send_storage_backend_data(self):
|
||||
cbend = relations.endpoint_from_flag('storage-backend.connected')
|
||||
cbend.send_plugin_configuration(
|
||||
backend_name=self.service_name,
|
||||
subordinate_configuration=json.dumps(
|
||||
self.cinder_configuration()),
|
||||
stateless=self.stateless)
|
||||
|
|
|
@ -21,6 +21,7 @@ ALLOWED_DEFAULT_HANDLERS = [
|
|||
'update-status',
|
||||
'upgrade-charm',
|
||||
'certificates.available',
|
||||
'storage-backend.connected',
|
||||
]
|
||||
|
||||
# Where to store the default handler functions for each default state
|
||||
|
@ -146,6 +147,16 @@ def make_default_certificates_available_handler():
|
|||
reactive.set_state('charms.openstack.do-default-certificates.available')
|
||||
|
||||
|
||||
@_map_default_handler('storage-backend.connected')
|
||||
def make_default_storage_backend_connected_handler():
|
||||
"""Set the default storage-backend.connected state so that the default
|
||||
handler in layer-openstack can run.
|
||||
Convoluted, because charms.reactive will only run handlers in the reactive
|
||||
or hooks directory.
|
||||
"""
|
||||
reactive.set_state('charms.openstack.do-default-storage-backend.connected')
|
||||
|
||||
|
||||
@_map_default_handler('shared-db.connected')
|
||||
def make_default_setup_database_handler():
|
||||
"""Set the default shared-db.connected state so that the default handler in
|
||||
|
|
|
@ -1020,3 +1020,33 @@ class TestHAOpenStackCharm(BaseOpenStackCharmTest):
|
|||
with self.target.update_central_cacerts(['file1']):
|
||||
pass
|
||||
self.assertFalse(self.run_update_certs.called)
|
||||
|
||||
|
||||
class TestCinderStoragePluginCharm(BaseOpenStackCharmTest):
|
||||
|
||||
def setUp(self):
|
||||
super(TestCinderStoragePluginCharm, self).setUp(
|
||||
chm.CinderStoragePluginCharm,
|
||||
TEST_CONFIG)
|
||||
|
||||
def test_stateless(self):
|
||||
with self.assertRaises(NotImplementedError):
|
||||
self.target.stateless
|
||||
|
||||
def test_service_name(self):
|
||||
self.patch_object(chm.hookenv, 'service_name', return_value='svc1')
|
||||
self.assertEqual(self.target.service_name, 'svc1')
|
||||
|
||||
def test_cinder_configuration(self):
|
||||
with self.assertRaises(NotImplementedError):
|
||||
self.target.cinder_configuration()
|
||||
|
||||
def test_send_storage_backend_data(self):
|
||||
self.patch_object(chm.hookenv, 'service_name', return_value='svc1')
|
||||
ep_mock = mock.MagicMock()
|
||||
self.patch_object(
|
||||
chm.relations,
|
||||
'endpoint_from_flag',
|
||||
return_value=ep_mock)
|
||||
with self.assertRaises(NotImplementedError):
|
||||
self.target.send_storage_backend_data()
|
||||
|
|
Loading…
Reference in New Issue