diff --git a/magnum/api/controllers/v1/service.py b/magnum/api/controllers/v1/service.py index 9e4ecbd208..b79f3ee4f7 100644 --- a/magnum/api/controllers/v1/service.py +++ b/magnum/api/controllers/v1/service.py @@ -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: diff --git a/magnum/conductor/handlers/kube.py b/magnum/conductor/handlers/kube.py index fe397ab609..33259ead23 100644 --- a/magnum/conductor/handlers/kube.py +++ b/magnum/conductor/handlers/kube.py @@ -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 diff --git a/magnum/objects/service.py b/magnum/objects/service.py index edff4aeeba..41168eb4bb 100644 --- a/magnum/objects/service.py +++ b/magnum/objects/service.py @@ -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() diff --git a/magnum/tests/conductor/handlers/test_kube.py b/magnum/tests/conductor/handlers/test_kube.py index bd775a580d..aaf45b386c 100644 --- a/magnum/tests/conductor/handlers/test_kube.py +++ b/magnum/tests/conductor/handlers/test_kube.py @@ -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) \ No newline at end of file