Add devstack services

Added support for following service:
* mysql
* rabbitmq
* nova-api
* glance-api
* nova-compute
* nova-scheduler
Changed devstack verify command to check connectivity to screen.

Change-Id: I75ed016fc44137cb6bf29d111c3748b68bda504e
This commit is contained in:
Anton Studenov
2016-10-20 16:28:18 +03:00
parent 59441c2114
commit 62cd010552
2 changed files with 53 additions and 6 deletions

View File

@@ -33,7 +33,48 @@ class DevStackNode(node_collection.NodeCollection):
class KeystoneService(service.ServiceAsProcess):
SERVICE_NAME = 'keystone'
GREP = '[k]eystone-'
RESTART_CMD = 'service apache2 restart'
RESTART_CMD = 'sudo service apache2 restart'
class MySQLService(service.ServiceAsProcess):
SERVICE_NAME = 'mysql'
GREP = '[m]ysqld'
RESTART_CMD = 'sudo service mysql restart'
PORT = ('tcp', 3307)
class RabbitMQService(service.ServiceAsProcess):
SERVICE_NAME = 'rabbitmq'
GREP = '[r]abbitmq-server'
RESTART_CMD = 'sudo service rabbitmq-server restart'
class NovaAPIService(service.ServiceAsProcess):
SERVICE_NAME = 'nova-api'
GREP = '[n]ova-api'
RESTART_CMD = ("screen -S stack -p n-api -X "
"stuff $'\\003'$'\\033[A'$(printf \\\\r)")
class GlanceAPIService(service.ServiceAsProcess):
SERVICE_NAME = 'glance-api'
GREP = '[g]lance-api'
RESTART_CMD = ("screen -S stack -p g-api -X "
"stuff $'\\003'$'\\033[A'$(printf \\\\r)")
class NovaComputeService(service.ServiceAsProcess):
SERVICE_NAME = 'nova-compute'
GREP = '[n]ova-compute'
RESTART_CMD = ("screen -S stack -p n-cpu -X "
"stuff $'\\003'$'\\033[A'$(printf \\\\r)")
class NovaSchedulerService(service.ServiceAsProcess):
SERVICE_NAME = 'nova-scheduler'
GREP = '[n]ova-scheduler'
RESTART_CMD = ("screen -S stack -p n-sch -X "
"stuff $'\\003'$'\\033[A'$(printf \\\\r)")
class DevStackManagement(cloud_management.CloudManagement):
@@ -42,6 +83,12 @@ class DevStackManagement(cloud_management.CloudManagement):
NODE_CLS = DevStackNode
SERVICE_NAME_TO_CLASS = {
'keystone': KeystoneService,
'mysql': MySQLService,
'rabbitmq': RabbitMQService,
'nova-api': NovaAPIService,
'glance-api': GlanceAPIService,
'nova-compute': NovaComputeService,
'nova-scheduler': NovaSchedulerService,
}
SUPPORTED_SERVICES = list(SERVICE_NAME_TO_CLASS.keys())
SUPPORTED_NETWORKS = ['all-in-one']
@@ -67,12 +114,12 @@ class DevStackManagement(cloud_management.CloudManagement):
self.cloud_executor = executor.AnsibleRunner(
remote_user=self.username, private_key_file=self.private_key_file,
become=True)
become=False)
self.host = None
def verify(self):
"""Verify connection to the cloud."""
task = {'command': 'hostname'}
task = {'shell': 'screen -ls | grep stack'}
hostname = self.execute_on_cloud(
[self.address], task)[0].payload['stdout']
LOG.debug('DevStack hostname: %s', hostname)

View File

@@ -63,7 +63,7 @@ class DevStackManagementTestCase(test.TestCase):
devstack_management.verify()
ansible_runner_inst.execute.assert_called_once_with(
['10.0.0.2'], {'command': 'hostname'})
['10.0.0.2'], {'shell': 'screen -ls | grep stack'})
@mock.patch('os_faults.ansible.executor.AnsibleRunner', autospec=True)
def test_execute_on_cloud(self, mock_ansible_runner):
@@ -100,7 +100,7 @@ class DevStackManagementTestCase(test.TestCase):
nodes.hosts)
@mock.patch('os_faults.ansible.executor.AnsibleRunner', autospec=True)
@ddt.data(('keystone', devstack.KeystoneService))
@ddt.data(*devstack.DevStackManagement.SERVICE_NAME_TO_CLASS.items())
@ddt.unpack
def test_get_service_nodes(self, service_name, service_cls,
mock_ansible_runner):
@@ -137,7 +137,7 @@ class DevStackServiceTestCase(test.TestCase):
self.conf = {'address': '10.0.0.2', 'username': 'root'}
@mock.patch('os_faults.ansible.executor.AnsibleRunner', autospec=True)
@ddt.data(('keystone', devstack.KeystoneService))
@ddt.data(*devstack.DevStackManagement.SERVICE_NAME_TO_CLASS.items())
@ddt.unpack
def test_restart(self, service_name, service_cls, mock_ansible_runner):
ansible_runner_inst = mock_ansible_runner.return_value