Merge "Implement service creation"

This commit is contained in:
Jenkins 2015-01-08 15:10:47 +00:00 committed by Gerrit Code Review
commit d8df3b3a4c
4 changed files with 28 additions and 1 deletions

View File

@ -82,6 +82,9 @@ class Service(base.APIBase):
service_definition_url = wtypes.text
"""URL for service file to create the service"""
service_data = wtypes.text
"""Data for service to create the service"""
links = wsme.wsattr([link.Link], readonly=True)
"""A list containing a self link and associated service links"""
@ -296,6 +299,8 @@ class ServicesController(rest.RestController):
# ignore service_definition_url as it was used for create service
if field == 'service_definition_url':
continue
if field == 'service_data':
continue
try:
patch_val = getattr(service, field)
except AttributeError:

View File

@ -68,8 +68,9 @@ class Handler(object):
def service_create(self, ctxt, service):
LOG.debug("service_create")
k8s_master_url = _retrive_k8s_master_url(ctxt, service)
# trigger a kubectl command
status = self.kube_cli.service_create(service)
status = self.kube_cli.service_create(k8s_master_url, service)
if not status:
return None
# call the service object to persist in db

View File

@ -36,6 +36,7 @@ class Service(base.MagnumObject):
'ip': obj_utils.str_or_none,
'port': int,
'service_definition_url': obj_utils.str_or_none,
'service_data': obj_utils.str_or_none,
}
@staticmethod
@ -45,6 +46,8 @@ class Service(base.MagnumObject):
# ignore service_definition_url as it was used for create service
if field == 'service_definition_url':
continue
if field == 'service_data':
continue
service[field] = db_service[field]
service.obj_reset_changes()

View File

@ -28,6 +28,9 @@ class TestKube(base.BaseTestCase):
def mock_pod(self):
return objects.Pod({})
def mock_service(self):
return objects.Service({})
def mock_bay(self):
return objects.Bay({})
@ -89,3 +92,18 @@ class TestKube(base.BaseTestCase):
self.kube_handler.pod_create({}, expected_pod)
self.assertEqual('failed', expected_pod.status)
@patch('magnum.conductor.handlers.kube._retrive_k8s_master_url')
def test_service_create_with_success(self,
mock_retrive_k8s_master_url):
expected_master_url = 'master_address'
expected_service = self.mock_service()
expected_service.create = mock.MagicMock()
mock_retrive_k8s_master_url.return_value = expected_master_url
with patch.object(self.kube_handler, 'kube_cli') as mock_kube_cli:
mock_kube_cli.service_create.return_value = True
self.kube_handler.service_create({}, expected_service)
mock_kube_cli.service_create.assert_called_once_with(
expected_master_url, expected_service)