From 453952d10286266c8acdea9c7354d8a095ddbb02 Mon Sep 17 00:00:00 2001 From: "Jay Lau (Guangya Liu)" Date: Tue, 30 Dec 2014 08:41:47 -0500 Subject: [PATCH] Add more fields for service Change-Id: I37ff2b98cd97bdebf599d5345a45e52bdd80b696 --- magnum/api/controllers/v1/service.py | 21 +++++++++++++++++-- .../2581ebaf0cb2_initial_migration.py | 4 ++++ magnum/db/sqlalchemy/models.py | 4 ++++ magnum/objects/service.py | 4 ++++ .../tests/api/controllers/v1/test_service.py | 9 +++++++- 5 files changed, 39 insertions(+), 3 deletions(-) diff --git a/magnum/api/controllers/v1/service.py b/magnum/api/controllers/v1/service.py index 3385bdfe86..6929054a8a 100644 --- a/magnum/api/controllers/v1/service.py +++ b/magnum/api/controllers/v1/service.py @@ -69,6 +69,18 @@ class Service(base.APIBase): bay_uuid = types.uuid """Unique UUID of the bay the service runs on""" + labels = {wtypes.text: wtypes.text} + """Labels of this service""" + + selector = {wtypes.text: wtypes.text} + """Selector of this service""" + + ip = wtypes.text + """IP of this service""" + + port = wtypes.IntegerType() + """Port of this service""" + links = wsme.wsattr([link.Link], readonly=True) """A list containing a self link and associated service links""" @@ -92,7 +104,8 @@ class Service(base.APIBase): @staticmethod def _convert_with_links(service, url, expand=True): if not expand: - service.unset_fields_except(['uuid', 'name', 'bay_uuid']) + service.unset_fields_except(['uuid', 'name', 'bay_uuid', 'labels', + 'selector', 'ip', 'port']) # never expose the service_id attribute service.service_id = wtypes.Unset @@ -114,6 +127,10 @@ class Service(base.APIBase): sample = cls(uuid='fe78db47-9a37-4e9f-8572-804a10abc0aa', name='MyService', bay_uuid='7ae81bb3-dec3-4289-8d6c-da80bd8001ae', + labels={'label1': 'foo'}, + selector={'label1': 'foo'}, + ip='172.17.2.2', + port=80, created_at=datetime.datetime.utcnow(), updated_at=datetime.datetime.utcnow()) sample._service_uuid = '87504bd9-ca50-40fd-b14e-bcb23ed42b27' @@ -311,4 +328,4 @@ class ServicesController(rest.RestController): rpc_service = objects.Service.get_by_uuid(pecan.request.context, service_uuid) - self.backend_api.service_delete(rpc_service) \ No newline at end of file + self.backend_api.service_delete(rpc_service) diff --git a/magnum/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py b/magnum/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py index 6005eaf0cd..1d6d75e587 100644 --- a/magnum/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py +++ b/magnum/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py @@ -105,6 +105,10 @@ def upgrade(): sa.Column('uuid', sa.String(length=36), nullable=True), sa.Column('name', sa.String(length=255), nullable=True), sa.Column('bay_uuid', sa.String(length=36), nullable=True), + sa.Column('labels', sa.Text, nullable=True), + sa.Column('selector', sa.Text, nullable=True), + sa.Column('ip', sa.String(length=36), nullable=True), + sa.Column('port', sa.Integer(), nullable=True), sa.PrimaryKeyConstraint('id'), mysql_ENGINE='InnoDB', mysql_DEFAULT_CHARSET='UTF8' diff --git a/magnum/db/sqlalchemy/models.py b/magnum/db/sqlalchemy/models.py index 7cf87d607b..5da3bff64d 100644 --- a/magnum/db/sqlalchemy/models.py +++ b/magnum/db/sqlalchemy/models.py @@ -200,3 +200,7 @@ class Service(Base): uuid = Column(String(36)) name = Column(String(255)) bay_uuid = Column(String(36)) + labels = Column(JSONEncodedDict) + selector = Column(JSONEncodedDict) + ip = Column(String(36)) + port = Column(Integer()) diff --git a/magnum/objects/service.py b/magnum/objects/service.py index bd5908f8ad..ea0f5fb231 100644 --- a/magnum/objects/service.py +++ b/magnum/objects/service.py @@ -31,6 +31,10 @@ class Service(base.MagnumObject): 'uuid': obj_utils.str_or_none, 'name': obj_utils.str_or_none, 'bay_uuid': obj_utils.str_or_none, + 'labels': obj_utils.dict_or_none, + 'selector': obj_utils.dict_or_none, + 'ip': obj_utils.str_or_none, + 'port': int } @staticmethod diff --git a/magnum/tests/api/controllers/v1/test_service.py b/magnum/tests/api/controllers/v1/test_service.py index 80bc701ff1..b7ce6ff562 100644 --- a/magnum/tests/api/controllers/v1/test_service.py +++ b/magnum/tests/api/controllers/v1/test_service.py @@ -29,7 +29,10 @@ class TestServiceController(db_base.DbTestCase): mock_method.side_effect = self.mock_service_create # Create a service params = '{"name": "service_foo",'\ - '"bay_uuid": "7ae81bb3-dec3-4289-8d6c-da80bd8001ae"}' + '"bay_uuid": "7ae81bb3-dec3-4289-8d6c-da80bd8001ae",' \ + '"labels": {"bar": "foo"},' \ + '"selector": {"bar": "foo"}, "ip": "172.17.2.3",' \ + '"port": 88}' response = self.app.post('/v1/services', params=params, content_type='application/json') @@ -43,6 +46,10 @@ class TestServiceController(db_base.DbTestCase): self.assertEqual('service_foo', c.get('name')) self.assertEqual('7ae81bb3-dec3-4289-8d6c-da80bd8001ae', c.get('bay_uuid')) + self.assertEqual('foo', c.get('labels')['bar']) + self.assertEqual('foo', c.get('selector')['bar']) + self.assertEqual('172.17.2.3', c.get('ip')) + self.assertEqual(88, c.get('port')) # Get just the one we created response = self.app.get('/v1/services/%s' % c.get('uuid'))