[Core] Allow adding services in config
Change-Id: Ie6c8144a4d03ec04af2db05ddf9affb5e89b0ec6
This commit is contained in:
parent
a5945210c6
commit
2d72d2b9d6
@ -63,6 +63,21 @@ CONFIG_SCHEMA = {
|
||||
'required': ['driver', 'args'],
|
||||
'additionalProperties': False,
|
||||
},
|
||||
'services': {
|
||||
'type': 'object',
|
||||
'patternProperties': {
|
||||
'.*': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'driver': {'type': 'string'},
|
||||
'args': {'type': 'object'},
|
||||
},
|
||||
'required': ['driver', 'args'],
|
||||
'additionalProperties': False,
|
||||
}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
},
|
||||
'cloud_management': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
@ -134,6 +149,11 @@ def connect(cloud_config=None, config_filename=None):
|
||||
cloud_management_conf = cloud_config['cloud_management']
|
||||
cloud_management = _init_driver(cloud_management_conf)
|
||||
|
||||
services = cloud_config.get('services')
|
||||
if services:
|
||||
cloud_management.update_services(services)
|
||||
cloud_management.validate_services()
|
||||
|
||||
node_discover_conf = cloud_config.get('node_discover')
|
||||
if node_discover_conf:
|
||||
node_discover = _init_driver(node_discover_conf)
|
||||
|
@ -15,6 +15,7 @@ import abc
|
||||
import copy
|
||||
import logging
|
||||
|
||||
import jsonschema
|
||||
import six
|
||||
|
||||
from os_faults.api import base_driver
|
||||
@ -43,6 +44,14 @@ class CloudManagement(base_driver.BaseDriver):
|
||||
def set_node_discover(self, node_discover):
|
||||
self.node_discover = node_discover
|
||||
|
||||
def update_services(self, services):
|
||||
self.services.update(services)
|
||||
|
||||
def validate_services(self):
|
||||
for service_name, serive_conf in self.services.items():
|
||||
serive_cls = registry.get_driver(serive_conf["driver"])
|
||||
jsonschema.validate(serive_conf['args'], serive_cls.CONFIG_SCHEMA)
|
||||
|
||||
@abc.abstractmethod
|
||||
def verify(self):
|
||||
"""Verify connection to the cloud.
|
||||
@ -74,7 +83,7 @@ class CloudManagement(base_driver.BaseDriver):
|
||||
def get_service(self, name):
|
||||
"""Get service with specified name
|
||||
|
||||
:param name: name of the serives
|
||||
:param name: name of the service
|
||||
:return: Service
|
||||
"""
|
||||
if name not in self.services:
|
||||
|
@ -189,6 +189,10 @@ class DevStackManagementTestCase(test.TestCase):
|
||||
fqdn='')],
|
||||
nodes.hosts)
|
||||
|
||||
def test_validate_services(self):
|
||||
devstack_management = devstack.DevStackManagement(self.conf)
|
||||
devstack_management.validate_services()
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class DevStackServiceTestCase(test.TestCase):
|
||||
|
@ -197,3 +197,10 @@ class FuelManagementTestCase(test.TestCase):
|
||||
})
|
||||
self.assertRaises(error.ServiceError,
|
||||
fuel_managment.get_service, 'unknown')
|
||||
|
||||
def test_validate_services(self):
|
||||
fuel_managment = fuel.FuelManagement({
|
||||
'address': 'fuel.local',
|
||||
'username': 'root',
|
||||
})
|
||||
fuel_managment.validate_services()
|
||||
|
@ -148,6 +148,10 @@ class TCPCloudManagementTestCase(test.TestCase):
|
||||
mock.call(['10.0.0.2', '10.0.0.3'], {'command': 'hostname'}),
|
||||
])
|
||||
|
||||
def test_validate_services(self):
|
||||
tcp_managment = tcpcloud.TCPCloudManagement(self.tcp_conf)
|
||||
tcp_managment.validate_services()
|
||||
|
||||
@mock.patch('os_faults.ansible.executor.AnsibleRunner', autospec=True)
|
||||
def test_get_nodes(self, mock_ansible_runner):
|
||||
ansible_runner_inst = mock_ansible_runner.return_value
|
||||
|
@ -62,6 +62,17 @@ class OSFaultsTestCase(test.TestCase):
|
||||
destructor = os_faults.connect(cloud_config)
|
||||
self.assertIsInstance(destructor, devstack.DevStackManagement)
|
||||
|
||||
def test_config_with_services(self):
|
||||
self.cloud_config['services'] = {
|
||||
'app': {
|
||||
'driver': 'process',
|
||||
'args': {'grep': 'myapp'}
|
||||
}
|
||||
}
|
||||
destructor = os_faults.connect(self.cloud_config)
|
||||
app = destructor.get_service('app')
|
||||
self.assertIsNotNone(app)
|
||||
|
||||
def test_connect_fuel_with_libvirt(self):
|
||||
destructor = os_faults.connect(self.cloud_config)
|
||||
self.assertIsInstance(destructor, fuel.FuelManagement)
|
||||
|
Loading…
x
Reference in New Issue
Block a user