Validate network roles for new cluster
Checks that network roles mapping from original release is a subset of network roles mapping of new cluster's release. Change-Id: I521e70bf3df289abf3e71c5c1558faf7126db964 Partial-Bug: #1619162
This commit is contained in:
parent
821f8373ab
commit
4150121e8a
|
@ -18,6 +18,7 @@ import copy
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from nailgun.api.v1.handlers import base
|
from nailgun.api.v1.handlers import base
|
||||||
|
from nailgun import errors
|
||||||
from nailgun import objects
|
from nailgun import objects
|
||||||
from nailgun.task import manager
|
from nailgun.task import manager
|
||||||
|
|
||||||
|
@ -53,6 +54,13 @@ class ClusterUpgradeCloneHandler(base.BaseHandler):
|
||||||
request_data = self.checked_data(cluster=orig_cluster)
|
request_data = self.checked_data(cluster=orig_cluster)
|
||||||
new_cluster = upgrade.UpgradeHelper.clone_cluster(orig_cluster,
|
new_cluster = upgrade.UpgradeHelper.clone_cluster(orig_cluster,
|
||||||
request_data)
|
request_data)
|
||||||
|
valid = upgrade.UpgradeHelper.validate_network_roles(
|
||||||
|
orig_cluster, new_cluster,
|
||||||
|
)
|
||||||
|
if not valid:
|
||||||
|
raise errors.InvalidData("Network changes during upgrade"
|
||||||
|
" is not supported.")
|
||||||
|
|
||||||
return new_cluster.to_dict()
|
return new_cluster.to_dict()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,9 @@ class NailgunClusterAdapter(object):
|
||||||
def get_admin_network_group(self):
|
def get_admin_network_group(self):
|
||||||
return objects.NetworkGroup.get_admin_network_group()
|
return objects.NetworkGroup.get_admin_network_group()
|
||||||
|
|
||||||
|
def get_network_roles(self):
|
||||||
|
return objects.Cluster.get_network_roles(self.cluster)
|
||||||
|
|
||||||
|
|
||||||
class NailgunReleaseAdapter(object):
|
class NailgunReleaseAdapter(object):
|
||||||
def __init__(self, release):
|
def __init__(self, release):
|
||||||
|
|
|
@ -319,3 +319,25 @@ class UpgradeHelper(object):
|
||||||
seed_ng_dict = dict((ng.name, ng.id) for ng in seed_ng)
|
seed_ng_dict = dict((ng.name, ng.id) for ng in seed_ng)
|
||||||
mapping = dict((ng.id, seed_ng_dict[ng.name]) for ng in orig_ng)
|
mapping = dict((ng.id, seed_ng_dict[ng.name]) for ng in orig_ng)
|
||||||
return mapping
|
return mapping
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def validate_network_roles(cls, orig_cluster, seed_cluster):
|
||||||
|
if not orig_cluster.network_template:
|
||||||
|
return cls._compare_releases_roles(orig_cluster, seed_cluster)
|
||||||
|
else:
|
||||||
|
# TODO network template case
|
||||||
|
return True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _compare_releases_roles(cls, orig_cluster, seed_cluster):
|
||||||
|
orig_roles = orig_cluster.get_network_roles()
|
||||||
|
new_roles = seed_cluster.get_network_roles()
|
||||||
|
|
||||||
|
orig_mapping = cls._get_release_mapping(orig_roles)
|
||||||
|
new_mapping = cls._get_release_mapping(new_roles)
|
||||||
|
|
||||||
|
return orig_mapping.issubset(new_mapping)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_release_mapping(roles):
|
||||||
|
return {(role['id'], role['default_mapping']) for role in roles}
|
||||||
|
|
Loading…
Reference in New Issue