]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Use physical resource names with a short_id
authorZane Bitter <zbitter@redhat.com>
Mon, 17 Jun 2013 10:24:49 +0000 (12:24 +0200)
committerZane Bitter <zbitter@redhat.com>
Mon, 17 Jun 2013 10:24:49 +0000 (12:24 +0200)
The short_id is a random, but stable, 12-character alphanumeric ID.

This will allow two resources of the same name to exist concurrently. That
is necessary for resources to be replaced during an update without
interruption.

Change-Id: If32904a47c6f8fb651e317ce91f2a04f6eadcc0b

heat/engine/resource.py
heat/tests/utils.py

index cc5f560f334a23b71c2cc1bd3318b78dc0c3ff9c..3c3b1fd6f3268b3df9bdfb94eba7e6522fb88715 100644 (file)
@@ -21,6 +21,7 @@ from heat.common import exception
 from heat.openstack.common import excutils
 from heat.db import api as db_api
 from heat.common import identifier
+from heat.common import short_id
 from heat.engine import timestamp
 from heat.engine.properties import Properties
 
@@ -397,7 +398,11 @@ class Resource(object):
             self.state_set(self.UPDATE_COMPLETE)
 
     def physical_resource_name(self):
-        return '%s-%s' % (self.stack.name, self.name)
+        assert self.id is not None
+
+        return '%s-%s-%s' % (self.stack.name,
+                             self.name,
+                             short_id.get_id(self.id))
 
     def validate(self):
         logger.info('Validating %s' % str(self))
index 85d6791f3cb0150148778dd70f5847eaae15fe5a..396f549071c65c847cf60422b43f24c1cdc6a6a3 100644 (file)
@@ -75,10 +75,23 @@ class PhysName(object):
         self.resource_name = resource_name
 
     def __eq__(self, physical_name):
-        return physical_name == repr(self)
+        try:
+            stack, res, short_id = str(physical_name).rsplit('-', 2)
+        except ValueError:
+            return False
+
+        if self.stack_name != stack or self.resource_name != res:
+            return False
+
+        if len(short_id) != 12:
+            return False
+
+        return True
 
     def __ne__(self, physical_name):
         return not self.__eq__(physical_name)
 
     def __repr__(self):
-        return '%s-%s' % (self.stack_name, self.resource_name)
+        return '%s-%s-%s' % (self.stack_name,
+                             self.resource_name,
+                             'x' * 12)