class CloudServer(instance.Instance):
"""Resource for Rackspace Cloud Servers."""
- properties_schema = {'ServerName': {'Type': 'String', 'Required': True},
- 'Flavor': {'Type': 'String', 'Required': True},
+ properties_schema = {'Flavor': {'Type': 'String', 'Required': True},
'ImageName': {'Type': 'String', 'Required': True},
'UserData': {'Type': 'String'},
'key_name': {'Type': 'String'},
- 'Volumes': {'Type': 'List'}}
+ 'Volumes': {'Type': 'List'},
+ 'name': {'Type': 'String'}}
attributes_schema = {'PrivateDnsName': ('Private DNS name of the specified'
' instance.'),
# Template keys supported for handle_update. Properties not
# listed here trigger an UpdateReplace
update_allowed_keys = ('Metadata', 'Properties')
- update_allowed_properties = ('Flavor', 'ServerName')
+ update_allowed_properties = ('Flavor', 'name')
def __init__(self, name, json_snippet, stack):
super(CloudServer, self).__init__(name, json_snippet, stack)
json_snippet,
stack)
+ def physical_resource_name(self):
+ name = self.properties.get('name')
+ if name:
+ return name
+
+ return super(CloudServer, self).physical_resource_name()
+
def nova(self):
return self.rs.nova() # Override the Instance method
# Create server
client = self.nova().servers
- server = client.create(self.properties['ServerName'],
+ server = client.create(self.physical_resource_name(),
self.image_id,
flavor,
files=personality_files)
self.flavor)
resize(wait_time=1.0)
- # If ServerName is the only update, fail update
- if prop_diff.keys() == ['ServerName'] and \
+ # If name is the only update, fail update
+ if prop_diff.keys() == ['name'] and \
tmpl_diff.keys() == ['Properties']:
raise exception.NotSupported(feature="Cloud Server rename")
# Other updates were successful, so don't cause update to fail
- elif 'ServerName' in prop_diff:
+ elif 'name' in prop_diff:
logger.info("Cloud Server rename not supported.")
return True
from heat.engine.resources.rackspace import rackspace_resource
from heat.openstack.common import uuidutils
from heat.tests.common import HeatTestCase
+from heat.tests import utils
from heat.tests.utils import setup_dummy_db
"Type": "Rackspace::Cloud::Server",
"Properties": {
"ImageName" : "Fedora 17 (Beefy Miracle)",
- "ServerName" : "Heat test",
"Flavor" : "2",
"UserData" : "wordpress"
}
stack_name = '%s_stack' % name
(t, stack) = self._setup_test_stack(stack_name)
- server_name = "Heat test"
- t['Resources']['WebServer']['Properties']['ServerName'] = server_name
cs_name = 'Fedora 17 (Beefy Miracle)'
t['Resources']['WebServer']['Properties']['ImageName'] = cs_name
t['Resources']['WebServer']['Properties']['Flavor'] = '2'
flavor = t['Resources']['WebServer']['Properties']['Flavor']
self.m.StubOutWithMock(self.fc.servers, 'create')
- self.fc.servers.create(server_name, "1", flavor,
+ self.fc.servers.create(utils.PhysName(stack_name, cs.name),
+ "1", flavor,
files=mox.IgnoreArg()).AndReturn(return_server)
return_server.adminPass = "foobar"