Sync network groups during cloning environment
for creating of network groups in the seed cluster such as in the original cluster Change-Id: I17f95756fa26ef0f7df0e969f9f1ba4331047c8d Closes-Bug: #1616817
This commit is contained in:
parent
e2b9dbf1ca
commit
821f8373ab
|
@ -121,6 +121,10 @@ class NailgunReleaseAdapter(object):
|
|||
def environment_version(self):
|
||||
return self.release.environment_version
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.release.id
|
||||
|
||||
@property
|
||||
def roles_metadata(self):
|
||||
return self.release.roles_metadata
|
||||
|
@ -136,6 +140,10 @@ class NailgunNetworkManager(object):
|
|||
self.cluster = cluster
|
||||
self.net_manager = net_manager
|
||||
|
||||
def create(self, network_configuration, group_id=None):
|
||||
self.net_manager.create_network_group(self.cluster,
|
||||
network_configuration, group_id)
|
||||
|
||||
def update(self, network_configuration):
|
||||
self.net_manager.update(self.cluster, network_configuration)
|
||||
|
||||
|
|
|
@ -229,6 +229,72 @@ class TestUpgradeHelperCloneCluster(base_tests.BaseCloneClusterTest):
|
|||
self.assertEqual('image',
|
||||
attrs['editable']['provision']['method']['value'])
|
||||
|
||||
def check_different_attributes(self, orig_cluster, new_cluster):
|
||||
release = new_cluster.release.id
|
||||
nodegroups_id_maping = self.helper.get_nodegroups_id_mapping(
|
||||
orig_cluster, new_cluster
|
||||
)
|
||||
orig_ngs = self.serialize_nets(orig_cluster.cluster)['networks']
|
||||
seed_ngs = self.serialize_nets(new_cluster.cluster)['networks']
|
||||
for seed_ng in seed_ngs:
|
||||
for orig_ng in orig_ngs:
|
||||
if orig_ng['name'] == seed_ng['name'] \
|
||||
and orig_ng['name'] != "fuelweb_admin":
|
||||
|
||||
self.assertEqual(seed_ng['group_id'],
|
||||
nodegroups_id_maping[orig_ng['group_id']])
|
||||
|
||||
if seed_ng.get('release'):
|
||||
self.assertEqual(seed_ng['release'], release)
|
||||
|
||||
def skip_different_attributes(self, orig_cluster, new_cluster):
|
||||
orig_ngs = self.serialize_nets(orig_cluster.cluster)['networks']
|
||||
seed_ngs = self.serialize_nets(new_cluster.cluster)['networks']
|
||||
keys = ['release', 'id', 'group_id']
|
||||
orig_ngs_names = {ng['name']: ng for ng in orig_ngs}
|
||||
for seed_ng in seed_ngs:
|
||||
if seed_ng['name'] == 'fuelweb_admin':
|
||||
continue
|
||||
orig_ng = orig_ngs_names.get(seed_ng['name'])
|
||||
if not orig_ng:
|
||||
continue
|
||||
for key in keys:
|
||||
orig_ng.pop(key, None)
|
||||
seed_ng.pop(key, None)
|
||||
return orig_ngs, seed_ngs
|
||||
|
||||
def test_sync_network_groups(self):
|
||||
new_cluster = self.helper.create_cluster_clone(self.src_cluster,
|
||||
self.data)
|
||||
self.helper.sync_network_groups(self.src_cluster, new_cluster)
|
||||
self.check_different_attributes(self.src_cluster, new_cluster)
|
||||
orig_ngs, seed_ngs = self.skip_different_attributes(self.src_cluster,
|
||||
new_cluster)
|
||||
self.assertEqual(orig_ngs, seed_ngs)
|
||||
|
||||
def test_remove_network_groups(self):
|
||||
new_cluster = self.helper.create_cluster_clone(self.src_cluster,
|
||||
self.data)
|
||||
self.helper.remove_network_groups(new_cluster)
|
||||
seed_ngs = self.serialize_nets(new_cluster.cluster)['networks']
|
||||
self.assertEqual(len(seed_ngs), 1)
|
||||
self.assertEqual(seed_ngs[0]['name'], 'fuelweb_admin')
|
||||
|
||||
def test_copy_network_groups(self):
|
||||
new_cluster = self.helper.create_cluster_clone(self.src_cluster,
|
||||
self.data)
|
||||
nodegroups_id_maping = self.helper.get_nodegroups_id_mapping(
|
||||
self.src_cluster, new_cluster
|
||||
)
|
||||
release = new_cluster.release.id
|
||||
self.helper.remove_network_groups(new_cluster)
|
||||
self.helper.copy_network_groups(self.src_cluster, nodegroups_id_maping,
|
||||
release)
|
||||
self.check_different_attributes(self.src_cluster, new_cluster)
|
||||
orig_ngs, seed_ngs = self.skip_different_attributes(self.src_cluster,
|
||||
new_cluster)
|
||||
self.assertEqual(orig_ngs, seed_ngs)
|
||||
|
||||
def test_change_env_settings_no_editable_provision(self):
|
||||
new_cluster = self.helper.create_cluster_clone(self.src_cluster,
|
||||
self.data)
|
||||
|
|
|
@ -20,6 +20,7 @@ import collections
|
|||
import six
|
||||
|
||||
from nailgun import consts
|
||||
from nailgun.db import db
|
||||
from nailgun.extensions.network_manager.objects.serializers import \
|
||||
network_configuration
|
||||
from nailgun import objects
|
||||
|
@ -100,6 +101,7 @@ class UpgradeHelper(object):
|
|||
relations.UpgradeRelationObject.create_relation(orig_cluster.id,
|
||||
new_cluster.id)
|
||||
cls.change_env_settings(orig_cluster, new_cluster)
|
||||
cls.sync_network_groups(orig_cluster, new_cluster)
|
||||
return new_cluster
|
||||
|
||||
@classmethod
|
||||
|
@ -136,6 +138,55 @@ class UpgradeHelper(object):
|
|||
attrs = new_cluster.attributes
|
||||
attrs['editable']['provision']['method']['value'] = 'image'
|
||||
|
||||
@classmethod
|
||||
def sync_network_groups(cls, orig_cluster, new_cluster):
|
||||
cls.remove_network_groups(new_cluster)
|
||||
nodegroups_id_maping = cls.get_nodegroups_id_mapping(orig_cluster,
|
||||
new_cluster)
|
||||
release = new_cluster.release.id
|
||||
cls.copy_network_groups(orig_cluster, nodegroups_id_maping, release)
|
||||
|
||||
@classmethod
|
||||
def remove_network_groups(cls, cluster):
|
||||
seed_ng = cluster.get_network_groups()
|
||||
for ng in seed_ng:
|
||||
if ng.name == 'fuelweb_admin':
|
||||
continue
|
||||
objects.NetworkGroup.delete(ng.network_group)
|
||||
|
||||
@classmethod
|
||||
def copy_network_groups(cls, orig_cluster, nodegroups_id_maping, release):
|
||||
nets_serializer = cls.network_serializers[orig_cluster.net_provider]
|
||||
orig_net = nets_serializer.serialize_for_cluster(orig_cluster.cluster)
|
||||
for ng in orig_net['networks']:
|
||||
if ng['name'] == 'fuelweb_admin':
|
||||
continue
|
||||
meta = ng['meta']
|
||||
metadata = {
|
||||
'notation': 'cidr',
|
||||
'render_type': None,
|
||||
'map_priority': 2,
|
||||
'configurable': True,
|
||||
'use_gateway': False,
|
||||
'name': ng['name'],
|
||||
'vlan_start': ng['vlan_start']
|
||||
}
|
||||
metadata.update(meta)
|
||||
if metadata['notation'] == 'ip_ranges':
|
||||
metadata['ip_range'] = ng['ip_ranges'][0]
|
||||
metadata['cidr'] = ng['cidr']
|
||||
data = {
|
||||
'name': ng['name'],
|
||||
'release': release,
|
||||
'vlan_start': ng['vlan_start'],
|
||||
'cidr': ng['cidr'],
|
||||
'gateway': ng['gateway'],
|
||||
'group_id': nodegroups_id_maping[ng['group_id']],
|
||||
'meta': metadata
|
||||
}
|
||||
objects.NetworkGroup.create(data)
|
||||
db().commit()
|
||||
|
||||
@classmethod
|
||||
def copy_node_groups(cls, orig_cluster, new_cluster):
|
||||
for ng in orig_cluster.node_groups:
|
||||
|
@ -259,3 +310,12 @@ class UpgradeHelper(object):
|
|||
mapping[orig_cluster.get_admin_network_group().id] = \
|
||||
seed_cluster.get_admin_network_group().id
|
||||
return mapping
|
||||
|
||||
@classmethod
|
||||
def get_nodegroups_id_mapping(cls, orig_cluster, seed_cluster):
|
||||
orig_ng = orig_cluster.node_groups
|
||||
seed_ng = seed_cluster.node_groups
|
||||
|
||||
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)
|
||||
return mapping
|
||||
|
|
Loading…
Reference in New Issue