19 from ec2.base.action
import Action, CLMException
20 from ec2.error
import InsufficientAddressCapacity, MissingParameter, \
21 UndefinedError, InvalidInstanceID, InvalidAddress, InvalidIPAddress, \
22 InternalError, InvalidParameterValue, InvalidFilter
23 from ec2.helpers.entities
import Entity
24 from ec2.helpers.filters
import applyEc2Filters, validateEc2Filters
25 from ec2.helpers.parse
import parseSequenceArguments, parseFilters, \
28 """@package src.ec2.address
30 EC2 actions for IP addresses
32 @author: Oleksandr Gituliar <oleksandr@gituliar.org>
33 @author Łukasz Chrząszcz <l.chrzaszcz@gmail.com>
34 @copyright: Copyright (c) 2012 IFJ PAN <http://www.ifj.edu.pl/>
41 address = self.cluster_manager.user.public_ip.request()
42 except CLMException, error:
43 if error.status ==
'public_lease_limit':
44 raise InsufficientAddressCapacity()
45 if error.status ==
'public_lease_request':
48 return {
'publicIp': address}
54 instance_id = parseID(self.parameters[
'InstanceId'], Entity.instance)
56 raise InvalidParameterValue
57 instance_id = int(instance_id)
59 public_ip = self.parameters[
'PublicIp']
60 except KeyError, error:
61 raise MissingParameter(parameter=error.args[0])
62 except ValueError, error:
63 raise InvalidInstanceID.Malformed(image_id=instance_id)
65 addresses = self.cluster_manager.user.public_ip.get_list()
66 for address
in addresses + [
None]:
67 if address
and address[
'address'] == public_ip:
70 raise InvalidAddress.NotFound
73 instances = self.cluster_manager.user.vm.get_list()
74 for instance
in instances:
75 if instance[
'vm_id'] == instance_id:
76 print instance[
'leases'][0]
77 lease_id = instance[
'leases'][0][
'lease_id']
79 raise InvalidInstanceID.NotFound(image_id=instance_id)
82 self.cluster_manager.user.public_ip.assign(
83 {
'lease_id': lease_id,
'public_ip_id': address[
'public_ip_id']}
85 except CLMException, error:
86 if error.status ==
'public_lease_assigned':
87 raise InvalidIPAddress.InUse
88 print 'NIE PRZECHWYCONY WYJATEK', error.status
96 available_filters = [
'instance-id',
'public-ip']
109 addresses = self.cluster_manager.user.public_ip.get_list()
111 addresses = [address
for address
in addresses
if address[
'address']
in public_ips]
112 for address
in addresses:
114 lease_id = address[
'lease_id']
116 instances = self.cluster_manager.user.vm.get_list()
117 for instance
in instances:
118 for lease
in instance[
'leases']:
119 if lease[
'lease_id'] == lease_id:
120 vm_id = instance[
'vm_id']
123 'domain':
'standard',
124 'instance-id': vm_id,
125 'public-ip': address[
'address'],
130 return {
'addresses': result}
136 public_ip = self.parameters[
'PublicIp']
137 except KeyError, error:
138 raise MissingParameter(parameter=error.args[0])
140 addresses = self.cluster_manager.user.public_ip.get_list()
142 for address
in addresses:
143 if address[
'address'] == public_ip:
144 lease_id = address[
'lease_id']
147 self.cluster_manager.user.public_ip.unassign({
'lease_id':lease_id})
155 public_ip = unicode(self.parameters[
'PublicIp'])
157 raise MissingParameter(parameter=
'PublicIp')
158 print type(public_ip)
161 addresses = self.cluster_manager.user.public_ip.get_list()
164 return_address[
'address'] = -1
165 for address
in addresses :
166 if address.get(
'address') == public_ip:
167 return_address = address
169 if return_address[
'address'] == -1:
170 raise InvalidAddress.NotFound
173 self.cluster_manager.user.public_ip.release({
'public_ip_id': return_address[
'public_ip_id']})
174 except CLMException, error:
175 if error.status ==
'user_get':
177 if error.status ==
'public_lease_assigned':
178 raise InvalidIPAddress.InUse