Add mandatory_attrs to BayModelPatchType
Magnum baymodel requires some mandatory attrs, this patch adds them to mandatory_attrs() of BayModelPatchType to forbid removing them when do baymodel-update remove ${attr} Closes-Bug: #1530506 Change-Id: Iea59fd4811835cda1f232a77f3f345ca7e374fa4
This commit is contained in:
parent
7ec7d019db
commit
afc1fb14c2
|
@ -33,7 +33,12 @@ from magnum import objects
|
|||
|
||||
|
||||
class BayModelPatchType(types.JsonPatchType):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def mandatory_attrs():
|
||||
return ['/image_id', '/keypair_id', '/external_network_id', '/coe',
|
||||
'/tls_disabled', '/public', '/registry_enabled',
|
||||
'/server_type', '/cluster_distro', '/network_driver']
|
||||
|
||||
|
||||
class BayModel(base.APIBase):
|
||||
|
|
|
@ -326,37 +326,35 @@ class TestPatch(api_base.FunctionalTest):
|
|||
baymodel = obj_utils.create_test_baymodel(self.context,
|
||||
uuid=utils.generate_uuid())
|
||||
response = self.get_json('/baymodels/%s' % baymodel.uuid)
|
||||
self.assertIsNotNone(response['image_id'])
|
||||
self.assertIsNotNone(response['dns_nameserver'])
|
||||
|
||||
response = self.patch_json('/baymodels/%s' % baymodel.uuid,
|
||||
[{'path': '/image_id', 'op': 'remove'}])
|
||||
[{'path': '/dns_nameserver',
|
||||
'op': 'remove'}])
|
||||
self.assertEqual('application/json', response.content_type)
|
||||
self.assertEqual(200, response.status_code)
|
||||
|
||||
response = self.get_json('/baymodels/%s' % baymodel.uuid)
|
||||
self.assertIsNone(response['image_id'])
|
||||
self.assertIsNone(response['dns_nameserver'])
|
||||
# Assert nothing else was changed
|
||||
self.assertEqual(baymodel.uuid, response['uuid'])
|
||||
self.assertEqual(baymodel.name, response['name'])
|
||||
self.assertEqual(baymodel.apiserver_port, response['apiserver_port'])
|
||||
self.assertEqual(self.baymodel.fixed_network,
|
||||
self.assertEqual(baymodel.image_id,
|
||||
response['image_id'])
|
||||
self.assertEqual(baymodel.fixed_network,
|
||||
response['fixed_network'])
|
||||
self.assertEqual(self.baymodel.network_driver,
|
||||
self.assertEqual(baymodel.network_driver,
|
||||
response['network_driver'])
|
||||
self.assertEqual(self.baymodel.docker_volume_size,
|
||||
self.assertEqual(baymodel.docker_volume_size,
|
||||
response['docker_volume_size'])
|
||||
self.assertEqual(self.baymodel.ssh_authorized_key,
|
||||
self.assertEqual(baymodel.ssh_authorized_key,
|
||||
response['ssh_authorized_key'])
|
||||
self.assertEqual(self.baymodel.coe,
|
||||
response['coe'])
|
||||
self.assertEqual(self.baymodel.http_proxy,
|
||||
response['http_proxy'])
|
||||
self.assertEqual(self.baymodel.https_proxy,
|
||||
response['https_proxy'])
|
||||
self.assertEqual(self.baymodel.no_proxy,
|
||||
response['no_proxy'])
|
||||
self.assertEqual(self.baymodel.labels,
|
||||
response['labels'])
|
||||
self.assertEqual(baymodel.coe, response['coe'])
|
||||
self.assertEqual(baymodel.http_proxy, response['http_proxy'])
|
||||
self.assertEqual(baymodel.https_proxy, response['https_proxy'])
|
||||
self.assertEqual(baymodel.no_proxy, response['no_proxy'])
|
||||
self.assertEqual(baymodel.labels, response['labels'])
|
||||
|
||||
def test_remove_non_existent_property_fail(self):
|
||||
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||
|
@ -366,6 +364,20 @@ class TestPatch(api_base.FunctionalTest):
|
|||
self.assertEqual(400, response.status_code)
|
||||
self.assertTrue(response.json['error_message'])
|
||||
|
||||
def test_remove_mandatory_property_fail(self):
|
||||
mandatory_properties = ('/image_id', '/keypair_id',
|
||||
'/external_network_id', '/coe',
|
||||
'/tls_disabled', '/public',
|
||||
'/registry_enabled', '/server_type',
|
||||
'/cluster_distro', '/network_driver')
|
||||
for p in mandatory_properties:
|
||||
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||
[{'path': p, 'op': 'remove'}],
|
||||
expect_errors=True)
|
||||
self.assertEqual('application/json', response.content_type)
|
||||
self.assertEqual(400, response.status_code)
|
||||
self.assertTrue(response.json['error_message'])
|
||||
|
||||
def test_add_root_non_existent(self):
|
||||
response = self.patch_json(
|
||||
'/baymodels/%s' % self.baymodel.uuid,
|
||||
|
|
Loading…
Reference in New Issue