Configure HA resources when HA-relation complete
Also add some missing unit tests
This commit is contained in:
parent
87b96027c4
commit
dbf447025c
|
@ -2,3 +2,4 @@
|
|||
.stestr
|
||||
*__pycache__*
|
||||
*.pyc
|
||||
build
|
||||
|
|
|
@ -51,3 +51,12 @@ def init_db():
|
|||
octavia_charm.restart_all()
|
||||
reactive.set_state('db.synced')
|
||||
octavia_charm.assess_status()
|
||||
|
||||
|
||||
@reactive.when('ha.connected')
|
||||
@reactive.when_not('ha.available')
|
||||
def cluster_connected(hacluster):
|
||||
"""Configure HA resources in corosync."""
|
||||
with charm.provide_charm_instance() as octavia_charm:
|
||||
octavia_charm.configure_ha_resources(hacluster)
|
||||
octavia_charm.assess_status()
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
series: bionic
|
||||
relations:
|
||||
- - keystone
|
||||
- mysql
|
||||
- - octavia
|
||||
- mysql
|
||||
- - octavia
|
||||
- keystone
|
||||
- - octavia
|
||||
- rabbitmq-server
|
||||
- - octavia
|
||||
- hacluster-octavia
|
||||
applications:
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: cloud:bionic-rocky
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
hacluster-octavia:
|
||||
charm: cs:~openstack-charmers-next/hacluster
|
||||
num_units: 0
|
||||
octavia:
|
||||
charm: octavia
|
||||
num_units: 3
|
||||
options:
|
||||
openstack-origin: cloud:bionic-rocky
|
||||
vip: 'ADD YOUR VIP HERE'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
|
@ -39,3 +39,19 @@ class TestOctaviaCharm(Helper):
|
|||
result = c.get_database_setup()
|
||||
self.assertEqual(result, [{'database': 'octavia',
|
||||
'username': 'octavia'}])
|
||||
|
||||
def test_enable_webserver_site(self):
|
||||
self.patch('os.path.exists', 'exists')
|
||||
self.patch('subprocess.call', 'sp_call')
|
||||
self.patch('subprocess.check_call', 'sp_check_call')
|
||||
self.patch('charmhelpers.core.host.service_reload', 'service_reload')
|
||||
self.exists.return_value = True
|
||||
self.sp_call.return_value = True
|
||||
c = octavia.OctaviaCharm()
|
||||
c.enable_webserver_site()
|
||||
self.exists.assert_called_with(
|
||||
'/etc/apache2/sites-available/octavia-api.conf')
|
||||
self.sp_call.assert_called_with(['a2query', '-s', 'octavia-api'])
|
||||
self.sp_check_call.assert_called_with(['a2ensite', 'octavia-api'])
|
||||
self.service_reload.assert_called_with(
|
||||
'apache2', restart_on_failure=True)
|
||||
|
|
|
@ -39,9 +39,11 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
|
|||
'identity-service.available',
|
||||
'amqp.available',),
|
||||
'init_db': ('config.rendered',),
|
||||
'cluster_connected': ('ha.connected',),
|
||||
},
|
||||
'when_not': {
|
||||
'init_db': ('db.synced',),
|
||||
'cluster_connected': ('ha.available',),
|
||||
},
|
||||
}
|
||||
# test that the hooks were registered via the
|
||||
|
@ -51,14 +53,34 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
|
|||
|
||||
class TestRender(test_utils.PatchHelper):
|
||||
|
||||
def test_render(self):
|
||||
octavia_charm = mock.MagicMock()
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.octavia_charm = mock.MagicMock()
|
||||
self.patch_object(handlers.charm, 'provide_charm_instance',
|
||||
new=mock.MagicMock())
|
||||
self.provide_charm_instance().__enter__.return_value = octavia_charm
|
||||
self.provide_charm_instance().__enter__.return_value = \
|
||||
self.octavia_charm
|
||||
self.provide_charm_instance().__exit__.return_value = None
|
||||
|
||||
def test_render(self):
|
||||
self.patch('charms.reactive.set_state', 'set_state')
|
||||
handlers.render('arg1', 'arg2')
|
||||
octavia_charm.render_with_interfaces.assert_called_once_with(
|
||||
self.octavia_charm.render_with_interfaces.assert_called_once_with(
|
||||
('arg1', 'arg2'))
|
||||
octavia_charm.assess_status.assert_called_once_with()
|
||||
self.octavia_charm.assess_status.assert_called_once_with()
|
||||
self.set_state.assert_called_once_with('config.rendered')
|
||||
|
||||
def test_init_db(self):
|
||||
self.patch('charms.reactive.set_state', 'set_state')
|
||||
handlers.init_db()
|
||||
self.octavia_charm.db_sync.assert_called_once_with()
|
||||
self.octavia_charm.restart_all.assert_called_once_with()
|
||||
self.set_state.assert_called_once_with('db.synced')
|
||||
self.octavia_charm.assess_status.assert_called_once_with()
|
||||
|
||||
def test_cluster_connected(self):
|
||||
hacluster = mock.MagicMock()
|
||||
handlers.cluster_connected(hacluster)
|
||||
self.octavia_charm.configure_ha_resources.assert_called_once_with(
|
||||
hacluster)
|
||||
self.octavia_charm.assess_status.assert_called_once_with()
|
||||
|
|
Loading…
Reference in New Issue