Merge "[2183 fix]"
This commit is contained in:
commit
afe704e3ba
|
@ -94,12 +94,12 @@ class JSONHandler(object):
|
|||
fields=fields or cls.fields
|
||||
)
|
||||
|
||||
def checked_data(self, validate_method=None):
|
||||
def checked_data(self, validate_method=None, **kwargs):
|
||||
try:
|
||||
if validate_method:
|
||||
data = validate_method(web.data())
|
||||
data = validate_method(web.data(), **kwargs)
|
||||
else:
|
||||
data = self.validator.validate(web.data())
|
||||
data = self.validator.validate(web.data(), **kwargs)
|
||||
except (
|
||||
errors.InvalidInterfacesInfo,
|
||||
errors.InvalidMetadata
|
||||
|
|
|
@ -95,7 +95,7 @@ class ClusterHandler(JSONHandler):
|
|||
* 404 (cluster not found in db)
|
||||
"""
|
||||
cluster = self.get_object_or_404(Cluster, cluster_id)
|
||||
data = self.checked_data()
|
||||
data = self.checked_data(cluster_id=cluster_id)
|
||||
network_manager = NetworkManager()
|
||||
|
||||
for key, value in data.iteritems():
|
||||
|
|
|
@ -22,8 +22,9 @@ from nailgun.errors import errors
|
|||
|
||||
class ClusterValidator(BasicValidator):
|
||||
@classmethod
|
||||
def validate(cls, data):
|
||||
def validate(cls, data, **kwargs):
|
||||
d = cls.validate_json(data)
|
||||
cluster_id = kwargs.get("cluster_id") or d.get("id")
|
||||
if d.get("name"):
|
||||
if db().query(Cluster).filter_by(
|
||||
name=d["name"]
|
||||
|
@ -39,6 +40,15 @@ class ClusterValidator(BasicValidator):
|
|||
"Invalid release id",
|
||||
log_message=True
|
||||
)
|
||||
if cluster_id:
|
||||
cluster = db().query(Cluster).get(cluster_id)
|
||||
if cluster:
|
||||
for k in ("net_provider", "net_segment_type"):
|
||||
if k in d and getattr(cluster, k) != d[k]:
|
||||
raise errors.InvalidData(
|
||||
"Change of '%s' is prohibited" % k,
|
||||
log_message=True
|
||||
)
|
||||
return d
|
||||
|
||||
|
||||
|
|
|
@ -97,6 +97,35 @@ class TestHandlers(BaseIntegrationTest):
|
|||
self.db.refresh(cluster)
|
||||
self.assertEquals(cluster.net_manager, "VlanManager")
|
||||
|
||||
def test_cluster_update_fails_on_net_provider_change(self):
|
||||
cluster = self.env.create_cluster(api=False)
|
||||
self.assertEquals(cluster.net_provider, "nova_network")
|
||||
resp = self.app.put(
|
||||
reverse('ClusterHandler', kwargs={'cluster_id': cluster.id}),
|
||||
json.dumps({'net_provider': 'neutron'}),
|
||||
headers=self.default_headers,
|
||||
expect_errors=True
|
||||
)
|
||||
self.assertEquals(resp.status, 400)
|
||||
self.assertEquals(resp.body, "Change of 'net_provider' is prohibited")
|
||||
|
||||
def test_cluster_update_fails_on_net_segment_type_change(self):
|
||||
cluster = self.env.create_cluster(
|
||||
api=False,
|
||||
net_provider='neutron',
|
||||
net_segment_type='gre'
|
||||
)
|
||||
self.assertEquals(cluster.net_provider, "neutron")
|
||||
resp = self.app.put(
|
||||
reverse('ClusterHandler', kwargs={'cluster_id': cluster.id}),
|
||||
json.dumps({'net_segment_type': 'vlan'}),
|
||||
headers=self.default_headers,
|
||||
expect_errors=True
|
||||
)
|
||||
self.assertEquals(resp.status, 400)
|
||||
self.assertEquals(resp.body,
|
||||
"Change of 'net_segment_type' is prohibited")
|
||||
|
||||
def test_cluster_node_list_update(self):
|
||||
node1 = self.env.create_node(api=False)
|
||||
node2 = self.env.create_node(api=False)
|
||||
|
|
Loading…
Reference in New Issue