You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2010/12/08 13:34:25 UTC

[PATCH core 4/4] Added support for Addresses to EC2 driver

From: Michal Fojtik <mf...@redhat.com>

---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb |   74 ++++++++++++++++++++++-
 1 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index efbfcc8..7cd0146 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -28,7 +28,7 @@ module Deltacloud
 class EC2Driver < Deltacloud::BaseDriver
 
   def supported_collections
-    DEFAULT_COLLECTIONS + [ :keys, :buckets, :load_balancers ]
+    DEFAULT_COLLECTIONS + [ :keys, :buckets, :load_balancers, :addresses ]
   end
 
   feature :instances, :user_data
@@ -284,6 +284,71 @@ class EC2Driver < Deltacloud::BaseDriver
     snapshots
   end
 
+  def addresses(credentials, opts={})
+    ec2 = new_client( credentials )
+    addresses = []
+    safely do
+      response = ec2.describe_addresses
+      response.addressesSet.item.each do |address|
+        addresses << convert_address(address)
+      end if response.addressesSet
+    end
+    addresses
+  end
+
+  def address(credentials, opts={})
+    ec2 = new_client( credentials )
+    address = nil
+    safely do
+      address_response = ec2.describe_addresses(:public_ip => [opts[:id]])
+      if address_response.addressesSet
+        address = convert_address(address_response.addressesSet.item.first)
+      end
+    end
+    address
+  end
+
+  def create_address(credentials, opts={})
+    ec2 = new_client( credentials )
+    address = nil
+    safely do
+      address_response = ec2.allocate_address
+      if address_response['publicIp']
+        address = convert_address(address_response['publicIp'], :create)
+      end
+      if opts[:instance_id] and opts[:instance_id].lenght!=0
+        associate_address(credentials, {
+          :instance_id => opts[:instance_id],
+          :id => address.id
+        })
+      end
+    end
+    address
+  end
+
+  def destroy_address(credentials, opts={})
+    ec2 = new_client( credentials )
+    retval = false
+    safely do
+      retval = ec2.release_address(:public_ip => opts[:id])
+    end
+    retval
+  end
+
+  def associate_address(credentials, opts={})
+    ec2 = new_client( credentials )
+    safely do
+      ec2.associate_address(:instance_id => opts[:instance_id], :public_ip => opts[:id])
+    end
+  end
+
+  def release_address(credentials, opts={})
+    ec2 = new_client( credentials )
+    safely do
+      ec2.disassociate_address(:public_ip => opts[:id])
+    end
+  end
+
   def key(credentials, opts=nil)
     keys(credentials, opts).first
   end
@@ -542,6 +607,13 @@ class EC2Driver < Deltacloud::BaseDriver
     balancer
   end
 
+  def convert_address(address, mode=nil)
+    Address.new(
+      :id => address['publicIp'],
+      :instance_id => address['instanceId'],
+      :visibility => :public
+    )
+  end
 
   def convert_key(key)
     Key.new({
-- 
1.7.3.2