Service create need filename as parameter

This is the backend change for patch Iaae8486

The k8s service create only has one parameter as filename, this
patch is updating magnum backend api can use filename as parameter
when creating service.

Change-Id: I67f0cea72b00f1ce35bf3e8c49153daf1d2fff68
changes/87/143787/3
Jay Lau (Guangya Liu) 2014-12-31 07:43:09 -05:00
parent 01e4d151e6
commit 8ac4dc813f
4 changed files with 21 additions and 4 deletions

View File

@ -79,6 +79,9 @@ class Service(base.APIBase):
port = wtypes.IntegerType()
"""Port of this service"""
service_definition_url = wtypes.text
"""URL for service file to create the service"""
links = wsme.wsattr([link.Link], readonly=True)
"""A list containing a self link and associated service links"""
@ -290,6 +293,9 @@ class ServicesController(rest.RestController):
# Update only the fields that have changed
for field in objects.Service.fields:
# ignore service_definition_url as it was used for create service
if field == 'service_definition_url':
continue
try:
patch_val = getattr(service, field)
except AttributeError:
@ -314,4 +320,4 @@ class ServicesController(rest.RestController):
rpc_service = objects.Service.get_by_uuid(pecan.request.context,
service_uuid)
pecan.request.rpcapi.service_delete(rpc_service)
pecan.request.rpcapi.service_delete(rpc_service)

View File

@ -35,7 +35,13 @@ class KubeClient(object):
def service_create(service):
LOG.debug("service_create with contents %s" % service)
try:
out, err = utils.trycmd('kubectl', 'create', '-f', service)
if service.service_definition_url:
out, err = utils.trycmd('kubectl', 'create', '-f',
service.service_definition_url)
else:
# TODO(jay-lau-513) Translate the contents to a json stdin
out, err = utils.trycmd('echo service | kubectl', 'create',
'-f', '-')
if err:
return False
except Exception as e:

View File

@ -34,13 +34,17 @@ class Service(base.MagnumObject):
'labels': obj_utils.dict_or_none,
'selector': obj_utils.dict_or_none,
'ip': obj_utils.str_or_none,
'port': int
'port': int,
'service_definition_url': obj_utils.str_or_none,
}
@staticmethod
def _from_db_object(service, db_service):
"""Converts a database entity to a formal object."""
for field in service.fields:
# ignore service_definition_url as it was used for create service
if field == 'service_definition_url':
continue
service[field] = db_service[field]
service.obj_reset_changes()

View File

@ -32,7 +32,8 @@ class TestServiceController(db_base.DbTestCase):
'"bay_uuid": "7ae81bb3-dec3-4289-8d6c-da80bd8001ae",' \
'"labels": {"bar": "foo"},' \
'"selector": {"bar": "foo"}, "ip": "172.17.2.3",' \
'"port": 88}'
'"port": 88,' \
'"service_definition_url": "http://172.17.1.2/svc.json"}'
response = self.app.post('/v1/services',
params=params,
content_type='application/json')