Use permanent identifier as a node key
Using permanent identifier instead of hostname based identifier fixes problems which might be caused by renaming a host Change-Id: I17d84da97296144acbf5983ea18139ffdee0db8a Closes-bug: #1548332
This commit is contained in:
parent
32afbeb2f8
commit
235c1622f2
@ -1054,6 +1054,10 @@ class Node(NailgunObject):
|
||||
|
||||
@classmethod
|
||||
def default_slave_name(cls, instance):
|
||||
return cls.permanent_id(instance)
|
||||
|
||||
@classmethod
|
||||
def permanent_id(cls, instance):
|
||||
return u"node-{node_id}".format(node_id=instance.id)
|
||||
|
||||
@classmethod
|
||||
|
@ -585,7 +585,7 @@ class DeploymentHASerializer90(DeploymentHASerializer80):
|
||||
attrs = super(DeploymentHASerializer90, self).get_common_attrs(cluster)
|
||||
|
||||
for node in objects.Cluster.get_nodes_not_for_deletion(cluster):
|
||||
name = objects.Node.get_slave_name(node)
|
||||
name = objects.Node.permanent_id(node)
|
||||
node_attrs = attrs['network_metadata']['nodes'][name]
|
||||
|
||||
node_attrs['nova_cpu_pinning_enabled'] = \
|
||||
|
@ -1066,8 +1066,10 @@ class NeutronNetworkDeploymentSerializer70(
|
||||
name = objects.Node.get_slave_name(node)
|
||||
node_roles = objects.Node.all_roles(node)
|
||||
network_roles = cls.get_network_role_mapping_to_ip(node)
|
||||
# Use permanent identifier as a node key
|
||||
key = objects.Node.permanent_id(node)
|
||||
|
||||
nodes[name] = {
|
||||
nodes[key] = {
|
||||
"uid": node.uid,
|
||||
"fqdn": objects.Node.get_node_fqdn(node),
|
||||
"name": name,
|
||||
|
@ -363,6 +363,8 @@ class NovaNetworkDeploymentSerializer70(NovaNetworkDeploymentSerializer61):
|
||||
for n in Cluster.get_nodes_not_for_deletion(cluster):
|
||||
name = Node.get_slave_name(n)
|
||||
node_roles = Node.all_roles(n)
|
||||
# Use permanent identifier as a node key
|
||||
key = Node.permanent_id(n)
|
||||
|
||||
ip_by_net = {
|
||||
'fuelweb_admin': None,
|
||||
@ -412,7 +414,7 @@ class NovaNetworkDeploymentSerializer70(NovaNetworkDeploymentSerializer61):
|
||||
'ceph/radosgw': ip_by_net['public'],
|
||||
}
|
||||
|
||||
nodes[name] = {
|
||||
nodes[key] = {
|
||||
"uid": n.uid,
|
||||
"fqdn": Node.get_node_fqdn(n),
|
||||
"name": name,
|
||||
|
@ -17,10 +17,13 @@
|
||||
import mock
|
||||
import six
|
||||
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
from nailgun import consts
|
||||
from nailgun import objects
|
||||
from nailgun.orchestrator import deployment_serializers
|
||||
from nailgun.plugins import adapters
|
||||
from nailgun.utils import reverse
|
||||
|
||||
from nailgun.orchestrator.neutron_serializers import \
|
||||
NeutronNetworkDeploymentSerializer90
|
||||
@ -430,6 +433,26 @@ class TestDeploymentAttributesSerialization90(
|
||||
for node_attrs in six.itervalues(nodes_attrs):
|
||||
self.assertFalse(node_attrs['nova_hugepages_enabled'])
|
||||
|
||||
def test_immutable_metadata_key(self):
|
||||
node = self.env.create_node(
|
||||
api=True,
|
||||
cluster_id=self.cluster_db.id,
|
||||
pending_roles=['controller'],
|
||||
pending_addition=True)
|
||||
self.db.flush()
|
||||
resp = self.app.put(
|
||||
reverse('NodeHandler', kwargs={'obj_id': node['id']}),
|
||||
jsonutils.dumps({'hostname': 'new-name'}),
|
||||
headers=self.default_headers)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
objects.Cluster.prepare_for_deployment(self.cluster_db)
|
||||
serialized_for_astute = self.serializer.serialize(
|
||||
self.cluster_db, self.cluster_db.nodes)
|
||||
for node_data in serialized_for_astute:
|
||||
for k, v in six.iteritems(node_data['network_metadata']['nodes']):
|
||||
node = objects.Node.get_by_uid(v['uid'])
|
||||
self.assertEqual(objects.Node.permanent_id(node), k)
|
||||
|
||||
|
||||
class TestDeploymentLCMSerialization90(
|
||||
TestSerializer90Mixin,
|
||||
@ -717,7 +740,7 @@ class TestSriovSerialization90(
|
||||
):
|
||||
def setUp(self, *args):
|
||||
super(TestSriovSerialization90, self).setUp()
|
||||
self.env.create(
|
||||
cluster = self.env.create(
|
||||
release_kwargs={'version': self.env_version},
|
||||
cluster_kwargs={
|
||||
'mode': consts.CLUSTER_MODES.ha_compact,
|
||||
@ -725,6 +748,7 @@ class TestSriovSerialization90(
|
||||
'net_segment_type': consts.NEUTRON_SEGMENT_TYPES.vlan,
|
||||
'status': consts.CLUSTER_STATUSES.new},
|
||||
)
|
||||
self.cluster_db = objects.Cluster.get_by_uid(cluster['id'])
|
||||
self.env.create_nodes_w_interfaces_count(
|
||||
nodes_count=1, if_count=3, cluster_id=self.env.clusters[0].id,
|
||||
pending_roles=['compute'], pending_addition=True)
|
||||
|
Loading…
Reference in New Issue
Block a user