self.ipaddress = ips.ip
self.resource_id_set(ips.id)
+ if self.properties['InstanceId']:
+ server = self.nova().servers.get(self.properties['InstanceId'])
+ res = server.add_floating_ip(self._ipaddress())
+
def handle_delete(self):
+ if self.properties['InstanceId']:
+ try:
+ server = self.nova().servers.get(self.properties['InstanceId'])
+ if server:
+ server.remove_floating_ip(self._ipaddress())
+ except clients.novaclient.exceptions.NotFound as ex:
+ pass
+
"""De-allocate a floating IP."""
if self.resource_id is not None:
self.nova().floating_ips.delete(self.resource_id)
class ElasticIpAssociation(resource.Resource):
properties_schema = {'InstanceId': {'Type': 'String',
- 'Required': True},
+ 'Required': False},
'EIP': {'Type': 'String'},
'AllocationId': {'Type': 'String',
'Implemented': False}}
(self.properties['InstanceId'],
self.properties['EIP']))
- server = self.nova().servers.get(self.properties['InstanceId'])
- server.add_floating_ip(self.properties['EIP'])
+ if self.properties['InstanceId']:
+ server = self.nova().servers.get(self.properties['InstanceId'])
+ server.add_floating_ip(self.properties['EIP'])
self.resource_id_set(self.properties['EIP'])
def handle_delete(self):
"""Remove a floating IP address from a server."""
- try:
- server = self.nova().servers.get(self.properties['InstanceId'])
- if server:
- server.remove_floating_ip(self.properties['EIP'])
- except clients.novaclient.exceptions.NotFound as ex:
- pass
+ if self.properties['InstanceId']:
+ try:
+ server = self.nova().servers.get(self.properties['InstanceId'])
+ if server:
+ server.remove_floating_ip(self.properties['EIP'])
+ except clients.novaclient.exceptions.NotFound as ex:
+ pass
def resource_mapping():
eip_template = '''
+{
+ "AWSTemplateFormatVersion" : "2010-09-09",
+ "Description" : "EIP Test",
+ "Parameters" : {},
+ "Resources" : {
+ "IPAddress" : {
+ "Type" : "AWS::EC2::EIP",
+ "Properties" : {
+ "InstanceId" : { "Ref" : "WebServer" }
+ }
+ },
+ "WebServer": {
+ "Type": "AWS::EC2::Instance",
+ }
+ }
+}
+'''
+
+eip_template_ipassoc = '''
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "EIP Test",
def test_eip(self):
eip.ElasticIp.nova().MultipleTimes().AndReturn(self.fc)
+ self.fc.servers.get('WebServer').AndReturn(self.fc.servers.list()[0])
+ self.fc.servers.get('WebServer')
self.m.ReplayAll()
self.m.ReplayAll()
- t = template_format.parse(eip_template)
+ t = template_format.parse(eip_template_ipassoc)
stack = parse_stack(t)
rsrc = self.create_eip(t, stack, 'IPAddress')