Adds volume_driver in db api
Adds volume_driver to the following: 1. api baymodel attribute 2. a new column to the baymodel db 3. objects.Note: Updates baymodel object version 4. Unit tests Co-Authored By: Kai Qiang Wu(Kennan)<wkqwu@cn.ibm.com> Co-Authored By: Ton Ngo<ton@us.ibm.com> Partially-Implements: blueprint magnum-integrate-with-cinder Change-Id: I25506bd39ab4be513ef99c39f8c52a502b300d92
This commit is contained in:
parent
e5397eabeb
commit
6dc4816521
|
@ -119,6 +119,9 @@ class BayModel(base.APIBase):
|
|||
"""Its comma separated list of ip for which proxies should not
|
||||
used in the bay"""
|
||||
|
||||
volume_driver = wtypes.StringType(min_length=1, max_length=255)
|
||||
"""The name of the driver used for instantiating container volume driver"""
|
||||
|
||||
registry_enabled = wsme.wsattr(types.boolean, default=False)
|
||||
"""Indicates whether the docker registry is enabled"""
|
||||
|
||||
|
@ -177,6 +180,7 @@ class BayModel(base.APIBase):
|
|||
external_network_id='ffc44e4a-2319-4062-bce0-9ae1c38b05ba',
|
||||
fixed_network='private',
|
||||
network_driver='libnetwork',
|
||||
volume_driver='cinder',
|
||||
apiserver_port=8080,
|
||||
docker_volume_size=25,
|
||||
cluster_distro='fedora-atomic',
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""add volume driver
|
||||
|
||||
Revision ID: 05d3e97de9ee
|
||||
Revises: 57fbdf2327a2
|
||||
Create Date: 2016-01-12 06:21:24.880838
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '05d3e97de9ee'
|
||||
down_revision = '57fbdf2327a2'
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column('baymodel', sa.Column('volume_driver',
|
||||
sa.String(length=255), nullable=True))
|
|
@ -152,6 +152,7 @@ class BayModel(Base):
|
|||
external_network_id = Column(String(255))
|
||||
fixed_network = Column(String(255))
|
||||
network_driver = Column(String(255))
|
||||
volume_driver = Column(String(255))
|
||||
dns_nameserver = Column(String(255))
|
||||
apiserver_port = Column(Integer())
|
||||
docker_volume_size = Column(Integer())
|
||||
|
|
|
@ -31,7 +31,8 @@ class BayModel(base.MagnumPersistentObject, base.MagnumObject,
|
|||
# Version 1.6: Change 'insecure' to 'tls_disabled'
|
||||
# Version 1.7: Added 'public' field
|
||||
# Version 1.8: Added 'server_type' field
|
||||
VERSION = '1.8'
|
||||
# Version 1.9: Added 'volume_driver' field
|
||||
VERSION = '1.9'
|
||||
|
||||
dbapi = dbapi.get_instance()
|
||||
|
||||
|
@ -49,6 +50,7 @@ class BayModel(base.MagnumPersistentObject, base.MagnumObject,
|
|||
'external_network_id': fields.StringField(nullable=True),
|
||||
'fixed_network': fields.StringField(nullable=True),
|
||||
'network_driver': fields.StringField(nullable=True),
|
||||
'volume_driver': fields.StringField(nullable=True),
|
||||
'apiserver_port': fields.IntegerField(nullable=True),
|
||||
'docker_volume_size': fields.IntegerField(nullable=True),
|
||||
'ssh_authorized_key': fields.StringField(nullable=True),
|
||||
|
|
|
@ -52,7 +52,7 @@ class TestListBayModel(api_base.FunctionalTest):
|
|||
'image_id', 'registry_enabled', 'no_proxy',
|
||||
'keypair_id', 'https_proxy', 'tls_disabled',
|
||||
'public', 'labels', 'ssh_authorized_key',
|
||||
'master_flavor_id',)
|
||||
'master_flavor_id', 'volume_driver')
|
||||
|
||||
def test_empty(self):
|
||||
response = self.get_json('/baymodels')
|
||||
|
@ -200,6 +200,7 @@ class TestPatch(api_base.FunctionalTest):
|
|||
image_id='nerdherd',
|
||||
apiserver_port=8080,
|
||||
fixed_network='private',
|
||||
volume_driver='rexray',
|
||||
public=False,
|
||||
docker_volume_size=20,
|
||||
ssh_authorized_key='ssh-rsa AAAAB3NzaC1ycEAAAADA'
|
||||
|
@ -284,6 +285,8 @@ class TestPatch(api_base.FunctionalTest):
|
|||
response['fixed_network'])
|
||||
self.assertEqual(self.baymodel.network_driver,
|
||||
response['network_driver'])
|
||||
self.assertEqual(self.baymodel.volume_driver,
|
||||
response['volume_driver'])
|
||||
self.assertEqual(self.baymodel.docker_volume_size,
|
||||
response['docker_volume_size'])
|
||||
self.assertEqual(self.baymodel.ssh_authorized_key,
|
||||
|
@ -323,6 +326,8 @@ class TestPatch(api_base.FunctionalTest):
|
|||
response['fixed_network'])
|
||||
self.assertEqual(baymodel.network_driver,
|
||||
response['network_driver'])
|
||||
self.assertEqual(baymodel.volume_driver,
|
||||
response['volume_driver'])
|
||||
self.assertEqual(baymodel.docker_volume_size,
|
||||
response['docker_volume_size'])
|
||||
self.assertEqual(baymodel.ssh_authorized_key,
|
||||
|
@ -452,7 +457,7 @@ class TestPost(api_base.FunctionalTest):
|
|||
"dns_nameserver", "keypair_id", "external_network_id",
|
||||
"cluster_distro", "fixed_network", "apiserver_port",
|
||||
"docker_volume_size", "http_proxy", "https_proxy",
|
||||
"no_proxy", "network_driver", "labels"]
|
||||
"no_proxy", "network_driver", "labels", "volume_driver"]
|
||||
for field in fields:
|
||||
self._create_baymodel_raises_app_error(**{field: 'i' * 256})
|
||||
|
||||
|
@ -461,7 +466,8 @@ class TestPost(api_base.FunctionalTest):
|
|||
"dns_nameserver", "keypair_id", "external_network_id",
|
||||
"cluster_distro", "fixed_network", "apiserver_port",
|
||||
"docker_volume_size", "ssh_authorized_key", "labels",
|
||||
"http_proxy", "https_proxy", "no_proxy", "network_driver"]
|
||||
"http_proxy", "https_proxy", "no_proxy", "network_driver",
|
||||
"volume_driver"]
|
||||
for field in fields:
|
||||
self._create_baymodel_raises_app_error(**{field: ''})
|
||||
|
||||
|
@ -590,6 +596,39 @@ class TestPost(api_base.FunctionalTest):
|
|||
config_dict,
|
||||
expect_errors_flag)
|
||||
|
||||
@mock.patch('magnum.api.attr_validator.validate_image')
|
||||
@mock.patch('magnum.api.attr_validator.validate_keypair')
|
||||
def test_create_baymodel_with_volume_driver(self, mock_keypair_exists,
|
||||
mock_image_data):
|
||||
mock_keypair_exists.return_value = None
|
||||
with mock.patch.object(self.dbapi, 'create_baymodel',
|
||||
wraps=self.dbapi.create_baymodel) as cc_mock:
|
||||
mock_keypair_exists.return_value = None
|
||||
mock_image_data.return_value = {'name': 'mock_name',
|
||||
'os_distro': 'fedora-atomic'}
|
||||
bdict = apiutils.baymodel_post_data(volume_driver='rexray')
|
||||
response = self.post_json('/baymodels', bdict)
|
||||
self.assertEqual(bdict['volume_driver'],
|
||||
response.json['volume_driver'])
|
||||
cc_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertNotIn('id', cc_mock.call_args[0][0])
|
||||
|
||||
@mock.patch('magnum.api.attr_validator.validate_image')
|
||||
@mock.patch('magnum.api.attr_validator.validate_keypair')
|
||||
def test_create_baymodel_with_no_volume_driver(self, mock_keypair_exists,
|
||||
mock_image_data):
|
||||
mock_keypair_exists.return_value = None
|
||||
with mock.patch.object(self.dbapi, 'create_baymodel',
|
||||
wraps=self.dbapi.create_baymodel) as cc_mock:
|
||||
mock_image_data.return_value = {'name': 'mock_name',
|
||||
'os_distro': 'fedora-atomic'}
|
||||
bdict = apiutils.baymodel_post_data()
|
||||
response = self.post_json('/baymodels', bdict)
|
||||
self.assertEqual(bdict['volume_driver'],
|
||||
response.json['volume_driver'])
|
||||
cc_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertNotIn('id', cc_mock.call_args[0][0])
|
||||
|
||||
@mock.patch('magnum.api.attr_validator.validate_image')
|
||||
@mock.patch('magnum.api.attr_validator.validate_keypair')
|
||||
@mock.patch.object(magnum_policy, 'enforce')
|
||||
|
|
|
@ -33,6 +33,7 @@ def get_test_baymodel(**kw):
|
|||
'd1f02cfb-d27f-4068-9332-84d907cb0e2e'),
|
||||
'fixed_network': kw.get('fixed_network', 'private'),
|
||||
'network_driver': kw.get('network_driver'),
|
||||
'volume_driver': kw.get('volume_driver'),
|
||||
'dns_nameserver': kw.get('dns_nameserver', '8.8.1.1'),
|
||||
'apiserver_port': kw.get('apiserver_port', 8080),
|
||||
'docker_volume_size': kw.get('docker_volume_size', 20),
|
||||
|
|
|
@ -424,7 +424,7 @@ class _TestObject(object):
|
|||
# http://docs.openstack.org/developer/magnum/objects.html
|
||||
object_data = {
|
||||
'Bay': '1.3-5c09d266a4f21301b3243848d4c09a90',
|
||||
'BayModel': '1.8-a4bb0976be245f06edbd1db087a18071',
|
||||
'BayModel': '1.9-d5d32553721d0cadfcc45ddc316d9c1a',
|
||||
'Certificate': '1.0-2aff667971b85c1edf8d15684fd7d5e2',
|
||||
'Container': '1.3-e2d9d2e8a8844d421148cd9fde6c6bd6',
|
||||
'MyObj': '1.0-b43567e512438205e32f4e95ca616697',
|
||||
|
|
Loading…
Reference in New Issue