Configure HA resources when HA-relation complete

Also add some missing unit tests
This commit is contained in:
Frode Nordahl 2018-10-10 08:14:59 +02:00
parent 87b96027c4
commit dbf447025c
No known key found for this signature in database
GPG Key ID: 6A5D59A3BA48373F
5 changed files with 86 additions and 5 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
.stestr
*__pycache__*
*.pyc
build

View File

@ -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()

View File

@ -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

View File

@ -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)

View File

@ -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()