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):
|
def environment_version(self):
|
||||||
return self.release.environment_version
|
return self.release.environment_version
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
return self.release.id
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def roles_metadata(self):
|
def roles_metadata(self):
|
||||||
return self.release.roles_metadata
|
return self.release.roles_metadata
|
||||||
|
@ -136,6 +140,10 @@ class NailgunNetworkManager(object):
|
||||||
self.cluster = cluster
|
self.cluster = cluster
|
||||||
self.net_manager = net_manager
|
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):
|
def update(self, network_configuration):
|
||||||
self.net_manager.update(self.cluster, network_configuration)
|
self.net_manager.update(self.cluster, network_configuration)
|
||||||
|
|
||||||
|
|
|
@ -229,6 +229,72 @@ class TestUpgradeHelperCloneCluster(base_tests.BaseCloneClusterTest):
|
||||||
self.assertEqual('image',
|
self.assertEqual('image',
|
||||||
attrs['editable']['provision']['method']['value'])
|
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):
|
def test_change_env_settings_no_editable_provision(self):
|
||||||
new_cluster = self.helper.create_cluster_clone(self.src_cluster,
|
new_cluster = self.helper.create_cluster_clone(self.src_cluster,
|
||||||
self.data)
|
self.data)
|
||||||
|
|
|
@ -20,6 +20,7 @@ import collections
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from nailgun import consts
|
from nailgun import consts
|
||||||
|
from nailgun.db import db
|
||||||
from nailgun.extensions.network_manager.objects.serializers import \
|
from nailgun.extensions.network_manager.objects.serializers import \
|
||||||
network_configuration
|
network_configuration
|
||||||
from nailgun import objects
|
from nailgun import objects
|
||||||
|
@ -100,6 +101,7 @@ class UpgradeHelper(object):
|
||||||
relations.UpgradeRelationObject.create_relation(orig_cluster.id,
|
relations.UpgradeRelationObject.create_relation(orig_cluster.id,
|
||||||
new_cluster.id)
|
new_cluster.id)
|
||||||
cls.change_env_settings(orig_cluster, new_cluster)
|
cls.change_env_settings(orig_cluster, new_cluster)
|
||||||
|
cls.sync_network_groups(orig_cluster, new_cluster)
|
||||||
return new_cluster
|
return new_cluster
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -136,6 +138,55 @@ class UpgradeHelper(object):
|
||||||
attrs = new_cluster.attributes
|
attrs = new_cluster.attributes
|
||||||
attrs['editable']['provision']['method']['value'] = 'image'
|
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
|
@classmethod
|
||||||
def copy_node_groups(cls, orig_cluster, new_cluster):
|
def copy_node_groups(cls, orig_cluster, new_cluster):
|
||||||
for ng in orig_cluster.node_groups:
|
for ng in orig_cluster.node_groups:
|
||||||
|
@ -259,3 +310,12 @@ class UpgradeHelper(object):
|
||||||
mapping[orig_cluster.get_admin_network_group().id] = \
|
mapping[orig_cluster.get_admin_network_group().id] = \
|
||||||
seed_cluster.get_admin_network_group().id
|
seed_cluster.get_admin_network_group().id
|
||||||
return mapping
|
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