You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by ma...@apache.org on 2012/09/26 11:04:52 UTC

[5/5] git commit: Adds Address collection support for Mock driver

Adds Address collection support for Mock driver

Signed-off-by: marios <ma...@redhat.com>


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/e58f73ed
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/e58f73ed
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/e58f73ed

Branch: refs/heads/master
Commit: e58f73ed2f62f4e77150ecb2f7b23d6388c813ed
Parents: 54a51e8
Author: marios <ma...@redhat.com>
Authored: Tue Sep 18 16:33:19 2012 +0300
Committer: marios <ma...@redhat.com>
Committed: Tue Sep 25 11:13:50 2012 +0300

----------------------------------------------------------------------
 .../drivers/mock/data/addresses/192.168.0.1.yml    |    3 +
 .../drivers/mock/data/addresses/192.168.0.2.yml    |    3 +
 .../drivers/mock/data/addresses/192.168.0.3.yml    |    3 +
 .../drivers/mock/data/addresses/192.168.0.4.yml    |    3 +
 server/lib/deltacloud/drivers/mock/mock_driver.rb  |   62 +++++++++++++++
 5 files changed, 74 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/e58f73ed/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml
new file mode 100644
index 0000000..e34604a
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml
@@ -0,0 +1,3 @@
+---
+:id: 192.168.0.1
+:instance_id: 

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/e58f73ed/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml
new file mode 100644
index 0000000..929c4cc
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml
@@ -0,0 +1,3 @@
+---
+:id: 192.168.0.2
+:instance_id: 

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/e58f73ed/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml
new file mode 100644
index 0000000..9862f21
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml
@@ -0,0 +1,3 @@
+---
+:id: "192.168.0.3"
+:instance_id:

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/e58f73ed/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml
new file mode 100644
index 0000000..64124f7
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml
@@ -0,0 +1,3 @@
+---
+:id: "192.168.0.4"
+:instance_id:

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/e58f73ed/server/lib/deltacloud/drivers/mock/mock_driver.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index b02e653..e765a9f 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -17,6 +17,7 @@
 require 'yaml'
 require 'base64'
 require 'etc'
+require 'ipaddr'
 
 require_relative 'mock_client'
 require_relative 'mock_driver_cimi_methods'
@@ -333,6 +334,48 @@ module Deltacloud::Drivers::Mock
       @client.destroy(:keys, key.id)
     end
 
+    def addresses(credentials, opts={})
+      check_credentials(credentials)
+      addresses = @client.build_all(Address)
+      addresses = filter_on( addresses, :id, opts )
+    end
+
+    def create_address(credentials, opts={})
+      check_credentials(credentials)
+      address = {:id => allocate_mock_address.to_s, :instance_id=>nil}
+      @client.store(:addresses, address)
+      Address.new(address)
+    end
+
+    def destroy_address(credentials, opts={})
+      check_credentials(credentials)
+      address = @client.load(:addresses, opts[:id])
+      raise "AddressInUse" unless address[:instance_id].nil?
+      @client.destroy(:addresses, opts[:id])
+    end
+
+    def associate_address(credentials, opts={})
+      check_credentials(credentials)
+      address = @client.load(:addresses, opts[:id])
+      raise "AddressInUse" unless address[:instance_id].nil?
+      instance = @client.load(:instances, opts[:instance_id])
+      address[:instance_id] = instance[:id]
+      instance[:public_addresses] = [InstanceAddress.new(address[:id])]
+      @client.store(:addresses, address)
+      @client.store(:instances, instance)
+    end
+
+    def disassociate_address(credentials, opts={})
+      check_credentials(credentials)
+      address = @client.load(:addresses, opts[:id])
+      raise "AddressNotInUse" unless address[:instance_id]
+      instance = @client.load(:instances, address[:instance_id])
+      address[:instance_id] = nil
+      instance[:public_addresses] = [InstanceAddress.new("#{instance[:image_id]}.#{instance[:id]}.public.com", :type => :hostname)]
+      @client.store(:addresses, address)
+      @client.store(:instances, instance)
+    end
+
     #--
     # Buckets
     #--
@@ -530,6 +573,17 @@ module Deltacloud::Drivers::Mock
       end
     end
 
+    #Mock allocation of 'new' address
+    #There is a synchronization problem (but it's the mock driver,
+    #mutex seemed overkill)
+    def allocate_mock_address
+      addresses = []
+      @client.members(:addresses).each do |addr|
+        addresses << IPAddr.new("#{addr}").to_i
+      end
+      IPAddr.new(addresses.sort.pop+1, Socket::AF_INET)
+    end
+
     def attach_volume_instance(volume_id, device, instance_id)
       volume = @client.load(:storage_volumes, volume_id)
       instance = @client.load(:instances, instance_id)
@@ -597,6 +651,14 @@ module Deltacloud::Drivers::Mock
         message "Key with same name already exists"
       end
 
+      on /AddressInUse/ do
+        status 403
+      end
+
+      on /AddressNotInUse/ do
+        status 403
+      end
+
       on /BucketNotExist/ do
         status 404
       end