Add check on docker_volume_size
In magnum server side, docker_volume_size allowed minimum value is 1GB. In fact, the minimum value should be 3GB when docker-storage-driver is devicemapper, because the limitation of docker-storage-setup. So, I add check on "--docker-volume-size". If "--docker-storage-driver=devicemapper", the minimum docker-volume-size should be 3GB, otherwise it should 1GB. Change-Id: I53c6a9c93ee156fa9afabdbd72a87bb4044d71ca Closes-Bug: #1583878
This commit is contained in:
parent
7a66c1cf56
commit
635e79e82e
|
@ -47,7 +47,7 @@ Create a baymodel, by default TLS is enabled in Magnum::
|
|||
--external-network-id public \
|
||||
--image-id fedora-atomic-latest \
|
||||
--flavor-id m1.small \
|
||||
--docker-volume-size 1 \
|
||||
--docker-volume-size 3 \
|
||||
--coe kubernetes \
|
||||
--network-driver flannel
|
||||
|
||||
|
@ -65,7 +65,7 @@ Create a baymodel, by default TLS is enabled in Magnum::
|
|||
| keypair_id | default |
|
||||
| public | False |
|
||||
| labels | {} |
|
||||
| docker_volume_size | 1 |
|
||||
| docker_volume_size | 3 |
|
||||
| external_network_id | public |
|
||||
| cluster_distro | fedora-atomic |
|
||||
| image_id | fedora-atomic-latest |
|
||||
|
|
|
@ -200,7 +200,9 @@ They are loosely grouped as: mandatory, infrastructure, COE specific.
|
|||
--docker-volume-size \<docker-volume-size\>
|
||||
The size in GB for the local storage on each server for the Docker
|
||||
daemon to cache the images and host the containers. Cinder volumes
|
||||
provide the storage. The default is 25 GB.
|
||||
provide the storage. The default is 25 GB. For the 'devicemapper'
|
||||
storage driver, the minimum value is 3GB. For the 'overlay' storage
|
||||
driver, the minimum value is 1GB.
|
||||
|
||||
--docker-storage-driver \<docker-storage-driver\>
|
||||
The name of a driver to manage the storage for the images and the
|
||||
|
|
|
@ -318,6 +318,7 @@ class BayModelsController(rest.RestController):
|
|||
@expose.expose(BayModel, body=BayModel, status_code=201)
|
||||
@validation.enforce_network_driver_types_create()
|
||||
@validation.enforce_volume_driver_types_create()
|
||||
@validation.enforce_volume_storage_size_create()
|
||||
def post(self, baymodel):
|
||||
"""Create a new baymodel.
|
||||
|
||||
|
|
|
@ -133,6 +133,16 @@ def enforce_volume_driver_types_create():
|
|||
return wrapper
|
||||
|
||||
|
||||
def enforce_volume_storage_size_create():
|
||||
@decorator.decorator
|
||||
def wrapper(func, *args, **kwargs):
|
||||
baymodel = args[1]
|
||||
_enforce_volume_storage_size(baymodel.as_dict())
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def enforce_volume_driver_types_update():
|
||||
@decorator.decorator
|
||||
def wrapper(func, *args, **kwargs):
|
||||
|
@ -157,6 +167,19 @@ def _enforce_volume_driver_types(baymodel):
|
|||
validator.validate_volume_driver(baymodel['volume_driver'])
|
||||
|
||||
|
||||
def _enforce_volume_storage_size(baymodel):
|
||||
if not baymodel.get('docker_volume_size'):
|
||||
return
|
||||
volume_size = baymodel.get('docker_volume_size')
|
||||
storage_driver = baymodel.get('docker_storage_driver')
|
||||
if storage_driver == 'devicemapper':
|
||||
if volume_size < 3:
|
||||
raise exception.InvalidParameterValue(
|
||||
'docker volume size %s GB is not valid, '
|
||||
'expecting minimum value 3GB for %s storage '
|
||||
'driver.') % (volume_size, storage_driver)
|
||||
|
||||
|
||||
def validate_bay_properties(delta):
|
||||
|
||||
update_disallowed_properties = delta - bay_update_allowed_properties
|
||||
|
|
|
@ -541,6 +541,12 @@ class TestPost(api_base.FunctionalTest):
|
|||
def test_create_baymodel_with_invalid_docker_volume_size(self):
|
||||
self._create_baymodel_raises_app_error(docker_volume_size=0)
|
||||
self._create_baymodel_raises_app_error(docker_volume_size=-1)
|
||||
self._create_baymodel_raises_app_error(
|
||||
docker_volume_size=1,
|
||||
docker_storage_driver="devicemapper")
|
||||
self._create_baymodel_raises_app_error(
|
||||
docker_volume_size=2,
|
||||
docker_storage_driver="devicemapper")
|
||||
self._create_baymodel_raises_app_error(docker_volume_size='notanint')
|
||||
|
||||
def test_create_baymodel_with_invalid_dns_nameserver(self):
|
||||
|
@ -583,6 +589,20 @@ class TestPost(api_base.FunctionalTest):
|
|||
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')
|
||||
def test_create_baymodel_with_overlay(self, mock_image_data):
|
||||
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(
|
||||
docker_volume_size=1, docker_storage_driver="overlay")
|
||||
response = self.post_json('/baymodels', bdict)
|
||||
self.assertEqual(bdict['docker_volume_size'],
|
||||
response.json['docker_volume_size'])
|
||||
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')
|
||||
def test_create_baymodel_generate_uuid(self,
|
||||
mock_image_data):
|
||||
|
|
Loading…
Reference in New Issue