"AllowedValues": ["us-east-1", "us-west-1", "us-west-2",
"sa-east-1", "eu-west-1", "ap-southeast-1",
"ap-northeast-1"],
- "ConstraintDescription": "must be a valid EC2 instance type." }
+ "ConstraintDescription": "must be a valid EC2 instance type."}
if parms != None:
self._apply_user_parameters(parms)
self.resources[r] = resources.GenericResource(r,
self.t['Resources'][r], self)
- self.calulate_dependencies(self.t['Resources'][r], self.resources[r])
+ self.calulate_dependencies(self.t['Resources'][r],
+ self.resources[r])
def validate(self):
'''
If you are wondering where the actual validation is, me too.
it is just not obvious how to respond to validation failures.
- http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_ValidateTemplate.html
+ http://docs.amazonwebservices.com/AWSCloudFormation/latest/ \
+ APIReference/API_ValidateTemplate.html
'''
- response = { 'ValidateTemplateResult': {
+ response = {'ValidateTemplateResult': {
'Description': 'bla',
- 'Parameters': []
- }
- }
+ 'Parameters': []}}
for p in self.parms:
jp = {'member': {}}
order = self.get_create_order()
failed = False
for r in order:
+ failed_str = self.resources[r].CREATE_FAILED
if not failed:
try:
self.resources[r].create()
except Exception as ex:
logger.exception('create')
failed = True
- self.resources[r].state_set(self.resources[r].CREATE_FAILED, str(ex))
+ self.resources[r].state_set(failed_str, str(ex))
else:
self.resources[r].state_set(self.resources[r].CREATE_FAILED)
-
def create(self):
pool = eventlet.GreenPool()
def delete_blocking(self):
'''
- delete all the resources in the reverse order specified by get_create_order
+ delete all the resources in the reverse order specified by
+ get_create_order().
'''
order = self.get_create_order()
order.reverse()
if res:
return res.FnGetAtt(key_name)
else:
- raise exception.InvalidTemplateAttribute(resource=resource_name, key=key_name)
+ raise exception.InvalidTemplateAttribute(
+ resource=resource_name, key=key_name)
return rc
else:
s[i] = self.resolve_attributes(s[i])
def resolve_joins(self, s):
'''
- looking for { "Fn::join": [] }
+ looking for { "Fn::join": []}
'''
if isinstance(s, dict):
for i in s:
def FnGetRefId(self):
'''
-http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html
+ http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/ \
+ intrinsic-function-reference-ref.html
'''
if self.instance_id != None:
return unicode(self.instance_id)
def FnGetAtt(self, key):
'''
-http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html
+ http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/ \
+ intrinsic-function-reference-getatt.html
'''
raise exception.InvalidTemplateAttribute(resource=self.name, key=key)
def FnBase64(self, data):
'''
-http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-base64.html
+ http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/ \
+ intrinsic-function-reference-base64.html
'''
return base64.b64encode(data)
break
if not sec:
- sec = self.nova().security_groups.create(self.name, self.description)
+ sec = self.nova().security_groups.create(self.name,
+ self.description)
self.instance_id_set(sec.id)
i['CidrIp'])
except BadRequest as ex:
if ex.message.find('already exists') >= 0:
- pass # no worries, the rule is already there
+ # no worries, the rule is already there
+ pass
else:
- raise # unexpected error
+ # unexpected error
+ raise
+
self.state_set(self.CREATE_COMPLETE)
def delete(self):
self.ipaddress = ''
if 'Domain' in self.t['Properties']:
- logger.warn('*** can\'t support Domain %s yet' % (self.t['Properties']['Domain']))
+ logger.warn('*** can\'t support Domain %s yet' % \
+ (self.t['Properties']['Domain']))
def create(self):
"""Allocate a floating IP for the current tenant."""
if key == 'AllocationId':
return unicode(self.instance_id)
else:
- raise exception.InvalidTemplateAttribute(resource=self.name, key=key)
+ raise exception.InvalidTemplateAttribute(resource=self.name,
+ key=key)
class ElasticIpAssociation(Resource):
return
self.state_set(self.CREATE_IN_PROGRESS)
super(ElasticIpAssociation, self).create()
- print 'ElasticIpAssociation %s.add_floating_ip(%s)' % (self.t['Properties']['InstanceId'],
- self.t['Properties']['EIP'])
+ print 'ElasticIpAssociation %s.add_floating_ip(%s)' % \
+ (self.t['Properties']['InstanceId'],
+ self.t['Properties']['EIP'])
server = self.nova().servers.get(self.t['Properties']['InstanceId'])
server.add_floating_ip(self.t['Properties']['EIP'])
self.state_set(self.CREATE_IN_PROGRESS)
super(VolumeAttachment, self).create()
- print 'Attaching InstanceId %s VolumeId %s Device %s' % \
- (self.t['Properties']['InstanceId'],
- self.t['Properties']['VolumeId'],
- self.t['Properties']['Device'])
- va = self.nova().volumes.create_server_volume(server_id=self.t['Properties']['InstanceId'],
- volume_id=self.t['Properties']['VolumeId'],
- device=self.t['Properties']['Device'])
+ server_id = self.t['Properties']['InstanceId']
+ volume_id = self.t['Properties']['VolumeId']
+ print 'Attaching InstanceId %s VolumeId %s Device %s' % (server_id,
+ volume_id, self.t['Properties']['Device'])
+ volapi = self.nova().volumes
+ va = volapi.create_server_volume(server_id=server_id,
+ volume_id=volume_id,
+ device=self.t['Properties']['Device'])
- vol = self.nova('volume').volumes.get(va.id)
+ vol = volapi.get(va.id)
while vol.status == 'available' or vol.status == 'attaching':
eventlet.sleep(1)
vol.get()
self.state_set(self.DELETE_IN_PROGRESS)
Resource.delete(self)
- print 'VolumeAttachment un-attaching %s %s' % (self.t['Properties']['InstanceId'],
- self.instance_id)
+ print 'VolumeAttachment un-attaching %s %s' % \
+ (self.t['Properties']['InstanceId'],
+ self.instance_id)
- self.nova().volumes.delete_server_volume(self.t['Properties']['InstanceId'],
- self.instance_id)
+ volapi = self.nova().volumes
+ volapi.delete_server_volume(self.t['Properties']['InstanceId'],
+ self.instance_id)
vol = self.nova('volume').volumes.get(self.t['Properties']['VolumeId'])
+ print 'un-attaching %s, status %s' % (self.instance_id, vol.status)
while vol.status == 'in-use':
- print 'trying to un-attach %s, but still %s' % (self.instance_id, vol.status)
+ print 'trying to un-attach %s, but still %s' % (self.instance_id,
+ vol.status)
eventlet.sleep(1)
try:
- self.nova().volumes.delete_server_volume(self.t['Properties']['InstanceId'],
- self.instance_id)
+ volapi.delete_server_volume(self.t['Properties']['InstanceId'],
+ self.instance_id)
except Exception:
pass
vol.get()
elif key == 'PublicIp':
res = self.ipaddress
else:
- raise exception.InvalidTemplateAttribute(resource=self.name, key=key)
+ raise exception.InvalidTemplateAttribute(resource=self.name,
+ key=key)
# TODO(asalkeld) PrivateDnsName, PublicDnsName & PrivateIp
mime_blob.attach(msg)
server = self.nova().servers.create(name=self.name, image=image_id,
- flavor=flavor_id, key_name=key_name,
+ flavor=flavor_id,
+ key_name=key_name,
security_groups=security_groups,
userdata=mime_blob.as_string())
while server.status == 'BUILD':
"""init a 'topic' publisher.
"""
super(TopicPublisher, self).__init__(session,
- "%s/%s" % (config.FLAGS.control_exchange, topic))
+ "%s/%s" % (config.FLAGS.control_exchange, topic))
class FanoutPublisher(Publisher):
"""init a 'topic' publisher.
"""
super(NotifyPublisher, self).__init__(session,
- "%s/%s" % (config.FLAGS.control_exchange, topic),
+ "%s/%s" % (config.FLAGS.control_exchange, topic),
{"durable": True})
self.connection.sasl_mechanisms = config.FLAGS.qpid_sasl_mechanisms
self.connection.reconnect = config.FLAGS.qpid_reconnect
if config.FLAGS.qpid_reconnect_timeout:
- self.connection.reconnect_timeout = config.FLAGS.qpid_reconnect_timeout
+ self.connection.reconnect_timeout = \
+ config.FLAGS.qpid_reconnect_timeout
if config.FLAGS.qpid_reconnect_limit:
self.connection.reconnect_limit = config.FLAGS.qpid_reconnect_limit
if config.FLAGS.qpid_reconnect_interval_max:
self.connection.reconnect_interval_min = (
config.FLAGS.qpid_reconnect_interval_min)
if config.FLAGS.qpid_reconnect_interval:
- self.connection.reconnect_interval = config.FLAGS.qpid_reconnect_interval
+ self.connection.reconnect_interval = \
+ config.FLAGS.qpid_reconnect_interval
self.connection.hearbeat = config.FLAGS.qpid_heartbeat
self.connection.protocol = config.FLAGS.qpid_protocol
self.connection.tcp_nodelay = config.FLAGS.qpid_tcp_nodelay