Introduce BayType that declares valid COEs

Restrict COE field to be one of 'kubernetes', 'swarm' and 'mesos'

Change-Id: I8967b1cd826c8c22fa5c1d847776e5e0dd65c629
Closes-Bug: #1497134
This commit is contained in:
Hongbin Lu 2015-09-28 00:00:17 -04:00
parent 4f24b74a87
commit 618f019f4d
4 changed files with 40 additions and 3 deletions

View File

@ -16,6 +16,7 @@ from magnum.common import exception
from magnum.common import utils
from magnum.db import api as dbapi
from magnum.objects import base
from magnum.objects import fields as m_fields
@base.MagnumObjectRegistry.register
@ -26,7 +27,8 @@ class BayModel(base.MagnumPersistentObject, base.MagnumObject,
# Version 1.2: Added 'network_driver' field
# Version 1.3: Added 'labels' attribute
# Version 1.4: Added 'insecure' attribute
VERSION = '1.4'
# Version 1.5: Changed type of 'coe' from StringField to BayTypeField
VERSION = '1.5'
dbapi = dbapi.get_instance()
@ -48,7 +50,7 @@ class BayModel(base.MagnumPersistentObject, base.MagnumObject,
'docker_volume_size': fields.IntegerField(nullable=True),
'ssh_authorized_key': fields.StringField(nullable=True),
'cluster_distro': fields.StringField(nullable=True),
'coe': fields.StringField(nullable=True),
'coe': m_fields.BayTypeField(nullable=True),
'http_proxy': fields.StringField(nullable=True),
'https_proxy': fields.StringField(nullable=True),
'no_proxy': fields.StringField(nullable=True),

View File

@ -46,6 +46,17 @@ class ContainerStatus(fields.Enum):
valid_values=ContainerStatus.ALL)
class BayType(fields.Enum):
ALL = (
KUBERNETES, SWARM, MESOS,
) = (
'kubernetes', 'swarm', 'mesos',
)
def __init__(self):
super(BayType, self).__init__(valid_values=BayType.ALL)
class ListOfDictsField(fields.AutoTypedField):
AUTO_TYPE = fields.List(fields.Dict(fields.FieldType()))
@ -56,3 +67,7 @@ class BayStatusField(fields.BaseEnumField):
class ContainerStatusField(fields.BaseEnumField):
AUTO_TYPE = ContainerStatus()
class BayTypeField(fields.BaseEnumField):
AUTO_TYPE = BayType()

View File

@ -64,3 +64,23 @@ class TestContainerStatus(test_fields.TestField):
def test_stringify_invalid(self):
self.assertRaises(ValueError, self.field.stringify, 'DELETED')
class TestBayType(test_fields.TestField):
def setUp(self):
super(TestBayType, self).setUp()
self.field = fields.BayTypeField()
self.coerce_good_values = [('kubernetes', 'kubernetes'),
('swarm', 'swarm'),
('mesos', 'mesos'), ]
self.coerce_bad_values = ['invalid']
self.to_primitive_values = self.coerce_good_values[0:1]
self.from_primitive_values = self.coerce_good_values[0:1]
def test_stringify(self):
self.assertEqual("'kubernetes'",
self.field.stringify('kubernetes'))
def test_stringify_invalid(self):
self.assertRaises(ValueError, self.field.stringify, 'invalid')

View File

@ -426,7 +426,7 @@ class _TestObject(object):
object_data = {
'Bay': '1.0-35edde13ad178e9419e7ea8b6d580bcd',
'BayLock': '1.0-7d1eb08cf2070523bd210369c7a2e076',
'BayModel': '1.4-68d7979ff1d81f948180fb620e6f84c7',
'BayModel': '1.5-b76d9b1e15e0ddef469eed9d986d4983',
'Certificate': '1.0-2aff667971b85c1edf8d15684fd7d5e2',
'Container': '1.0-e12affbba5f8a748882a3ae98aced282',
'MyObj': '1.0-b43567e512438205e32f4e95ca616697',