deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mfoj...@redhat.com
Subject [PATCH core 2/2] Added initial OpenStack unit tests
Date Mon, 27 Aug 2012 12:57:18 GMT
From: Michal Fojtik <mfojtik@redhat.com>


Signed-off-by: Michal fojtik <mfojtik@redhat.com>
---
 server/Rakefile                                    |    2 +-
 server/tests/drivers/openstack/common.rb           |   26 +
 ...001_must_throw_error_when_wrong_credentials.yml |   35 +
 ..._0002_must_return_list_of_hardware_profiles.yml |  223 ++++++
 .../test_0002_must_return_list_of_images.yml       |  415 ++++++++++
 .../test_0002_must_return_list_of_instances.yml    |  239 ++++++
 .../test_0002_must_return_list_of_keys.yml         |  197 +++++
 .../test_0002_must_return_list_of_realms.yml       |  205 +++++
 ...0003_must_allow_to_filter_hardware_profiles.yml |  188 +++++
 .../test_0003_must_allow_to_filter_images.yml      |  825 ++++++++++++++++++++
 .../test_0003_must_allow_to_filter_instances.yml   |  109 +++
 .../test_0003_must_allow_to_filter_keys.yml        |  197 +++++
 .../test_0003_must_allow_to_filter_realms.yml      |  205 +++++
 ...t_allow_to_retrieve_single_hardware_profile.yml |  188 +++++
 ...st_0004_must_allow_to_retrieve_single_image.yml |  413 ++++++++++
 ...0004_must_allow_to_retrieve_single_instance.yml |  109 +++
 ...test_0004_must_allow_to_retrieve_single_key.yml |  197 +++++
 ...st_0004_must_allow_to_retrieve_single_realm.yml |  205 +++++
 ...eate_and_destroy_an_instance-inst_launch-10.yml |   93 +++
 ...ust_allow_to_create_and_destroy_an_instance.yml |  152 ++++
 ...t_0005_must_allow_to_create_and_destroy_key.yml |  690 ++++++++++++++++
 .../drivers/openstack/hardware_profiles_test.rb    |   46 ++
 server/tests/drivers/openstack/images_test.rb      |   50 ++
 server/tests/drivers/openstack/instances_test.rb   |   66 ++
 server/tests/drivers/openstack/keys_test.rb        |   61 ++
 server/tests/drivers/openstack/realms_test.rb      |   46 ++
 26 files changed, 5181 insertions(+), 1 deletion(-)
 create mode 100644 server/tests/drivers/openstack/common.rb
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0001_must_throw_error_when_wrong_credentials.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_hardware_profiles.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_images.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_instances.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_keys.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_realms.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_hardware_profiles.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_images.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_instances.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_keys.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_realms.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_hardware_profile.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_image.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_instance.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_key.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_realm.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance-inst_launch-10.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance.yml
 create mode 100644 server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_key.yml
 create mode 100644 server/tests/drivers/openstack/hardware_profiles_test.rb
 create mode 100644 server/tests/drivers/openstack/images_test.rb
 create mode 100644 server/tests/drivers/openstack/instances_test.rb
 create mode 100644 server/tests/drivers/openstack/keys_test.rb
 create mode 100644 server/tests/drivers/openstack/realms_test.rb

diff --git a/server/Rakefile b/server/Rakefile
index f38b05e..617b16b 100644
--- a/server/Rakefile
+++ b/server/Rakefile
@@ -116,7 +116,7 @@ task :routes do
   end
 end
 
-DRIVERS = [:mock, :ec2, :rhevm, :google, :gogrid]
+DRIVERS = [:mock, :ec2, :rhevm, :google, :gogrid, :openstack]
 
 desc 'Run all tests'
 task :test do
diff --git a/server/tests/drivers/openstack/common.rb b/server/tests/drivers/openstack/common.rb
new file mode 100644
index 0000000..a452cc2
--- /dev/null
+++ b/server/tests/drivers/openstack/common.rb
@@ -0,0 +1,26 @@
+require 'openstack'
+require 'vcr'
+
+def credentials
+  {
+    :user => 'admin+admin',
+    :password => 'password',
+    :provider => 'http://10.34.32.211:5000/v2.0'
+  }
+end
+
+def openstack_image_id
+  'bf7ce59a-d9f9-45d4-9313-f45b16436602'
+end
+
+unless Time.respond_to? :be
+  require_relative '../../test_helper.rb'
+end
+
+VCR.configure do |c|
+  # NOTE: Empty this directory before re-recording
+  c.cassette_library_dir = File.join(File.dirname(__FILE__), 'fixtures')
+  c.hook_into :webmock
+  # Set this to :new_episodes when you want to 're-record'
+  c.default_cassette_options = { :record => :new_episodes }
+end
diff --git a/server/tests/drivers/openstack/fixtures/test_0001_must_throw_error_when_wrong_credentials.yml b/server/tests/drivers/openstack/fixtures/test_0001_must_throw_error_when_wrong_credentials.yml
new file mode 100644
index 0000000..8124c17
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0001_must_throw_error_when_wrong_credentials.yml
@@ -0,0 +1,35 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"unknown","password":"wrong"},"tenantName":"wrong"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 401
+      message: Not Authorized
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '89'
+      Date:
+      - Mon, 27 Aug 2012 16:15:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"error": {"message": "Invalid user / password", "code": 401, "title":
+        "Not Authorized"}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_hardware_profiles.yml b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_hardware_profiles.yml
new file mode 100644
index 0000000..8c28c01
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_hardware_profiles.yml
@@ -0,0 +1,223 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:33Z", "id": "f8b3945d217945818abf0e3e280a2506",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - f8b3945d217945818abf0e3e280a2506
+      X-Storage-Token:
+      - f8b3945d217945818abf0e3e280a2506
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-a2825759-60c6-462e-8b38-dff28f2d2095
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:33Z", "id": "c15f642a54a148529eef8da828ce334c",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - c15f642a54a148529eef8da828ce334c
+      X-Storage-Token:
+      - c15f642a54a148529eef8da828ce334c
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-0c1023a4-140a-491f-ae36-ce7d42a1a82c
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_images.yml b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_images.yml
new file mode 100644
index 0000000..62f82a1
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_images.yml
@@ -0,0 +1,415 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:27Z", "id": "0345b893a9e34d44b5714cfe749564bf",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:27Z", "id": "dbbfac2b279848aba9ccbff62058b43d",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - dbbfac2b279848aba9ccbff62058b43d
+      X-Storage-Token:
+      - dbbfac2b279848aba9ccbff62058b43d
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-4be081ef-75b4-4571-9455-b8610c0b3999
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 0345b893a9e34d44b5714cfe749564bf
+      X-Storage-Token:
+      - 0345b893a9e34d44b5714cfe749564bf
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-cde495e8-6a06-4e93-ab9c-2197ffbffb63
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '688'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"images": [{"status": "ACTIVE", "updated": "2012-08-24T15:51:45Z",
+        "name": "f16-jeos", "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}, {"href": "http://10.34.32.211:9292/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "type": "application/vnd.openstack.image", "rel": "alternate"}], "created":
+        "2012-08-24T15:41:42Z", "progress": 100, "minRam": 0, "minDisk": 0, "id":
+        "bf7ce59a-d9f9-45d4-9313-f45b16436602", "metadata": {}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:28Z", "id": "32b0e8c84902405384486ba89407d529",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:28Z", "id": "54a9790141b74e8b88ff4fa0a5a77bd2",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 54a9790141b74e8b88ff4fa0a5a77bd2
+      X-Storage-Token:
+      - 54a9790141b74e8b88ff4fa0a5a77bd2
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-759b2e01-eff9-4e6c-9c46-51b28f6aa973
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 32b0e8c84902405384486ba89407d529
+      X-Storage-Token:
+      - 32b0e8c84902405384486ba89407d529
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-6ac1cfc4-e515-42a7-a33f-b9bc171a2dfd
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '688'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"images": [{"status": "ACTIVE", "updated": "2012-08-24T15:51:45Z",
+        "name": "f16-jeos", "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}, {"href": "http://10.34.32.211:9292/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "type": "application/vnd.openstack.image", "rel": "alternate"}], "created":
+        "2012-08-24T15:41:42Z", "progress": 100, "minRam": 0, "minDisk": 0, "id":
+        "bf7ce59a-d9f9-45d4-9313-f45b16436602", "metadata": {}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_instances.yml b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_instances.yml
new file mode 100644
index 0000000..61e7761
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_instances.yml
@@ -0,0 +1,239 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:17:33Z", "id": "3d86c2c60db740048679f407ce56b8dc",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 3d86c2c60db740048679f407ce56b8dc
+      X-Storage-Token:
+      - 3d86c2c60db740048679f407ce56b8dc
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-12f4d254-1dca-4f59-95f8-5358f5ab2dce
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '2824'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"servers": [{"OS-EXT-STS:task_state": null, "addresses": {"demonet":
+        [{"version": 4, "addr": "10.0.0.7"}]}, "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/632f0a99-7c2d-4624-afaf-b9d2421279bc",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/632f0a99-7c2d-4624-afaf-b9d2421279bc",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-00000011", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "632f0a99-7c2d-4624-afaf-b9d2421279bc", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
+        "", "status": "ACTIVE", "updated": "2012-08-27T15:44:08Z", "hostId": "13942eef5ee69ea6fabcd918042084b1ec915973056bb1b497b43dfa",
+        "OS-EXT-SRV-ATTR:host": "openstack-01.lab.eng.brq.redhat.com", "key_name":
+        "", "OS-EXT-SRV-ATTR:hypervisor_hostname": null, "name": "server2012-08-27
+        13:55:22 +0200", "created": "2012-08-27T15:44:04Z", "tenant_id": "e827289fd66f4effb5b9b5012282fdb7",
+        "metadata": {}}, {"OS-EXT-STS:task_state": null, "addresses": {"demonet":
+        [{"version": 4, "addr": "10.0.0.2"}]}, "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-0000000c", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "fef00348-9991-404c-b0d4-655d18f84345", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
+        "", "status": "ACTIVE", "updated": "2012-08-27T15:27:16Z", "hostId": "13942eef5ee69ea6fabcd918042084b1ec915973056bb1b497b43dfa",
+        "OS-EXT-SRV-ATTR:host": "openstack-01.lab.eng.brq.redhat.com", "key_name":
+        "", "OS-EXT-SRV-ATTR:hypervisor_hostname": null, "name": "test-3", "created":
+        "2012-08-27T15:27:12Z", "tenant_id": "e827289fd66f4effb5b9b5012282fdb7", "metadata":
+        {}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:17:33Z", "id": "cd515949e1314be9b29cc84d92f282b4",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - cd515949e1314be9b29cc84d92f282b4
+      X-Storage-Token:
+      - cd515949e1314be9b29cc84d92f282b4
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-8b6053a6-6fbc-4c56-a6ae-d09fc553fa0e
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '2824'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"servers": [{"OS-EXT-STS:task_state": null, "addresses": {"demonet":
+        [{"version": 4, "addr": "10.0.0.7"}]}, "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/632f0a99-7c2d-4624-afaf-b9d2421279bc",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/632f0a99-7c2d-4624-afaf-b9d2421279bc",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-00000011", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "632f0a99-7c2d-4624-afaf-b9d2421279bc", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
+        "", "status": "ACTIVE", "updated": "2012-08-27T15:44:08Z", "hostId": "13942eef5ee69ea6fabcd918042084b1ec915973056bb1b497b43dfa",
+        "OS-EXT-SRV-ATTR:host": "openstack-01.lab.eng.brq.redhat.com", "key_name":
+        "", "OS-EXT-SRV-ATTR:hypervisor_hostname": null, "name": "server2012-08-27
+        13:55:22 +0200", "created": "2012-08-27T15:44:04Z", "tenant_id": "e827289fd66f4effb5b9b5012282fdb7",
+        "metadata": {}}, {"OS-EXT-STS:task_state": null, "addresses": {"demonet":
+        [{"version": 4, "addr": "10.0.0.2"}]}, "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-0000000c", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "fef00348-9991-404c-b0d4-655d18f84345", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
+        "", "status": "ACTIVE", "updated": "2012-08-27T15:27:16Z", "hostId": "13942eef5ee69ea6fabcd918042084b1ec915973056bb1b497b43dfa",
+        "OS-EXT-SRV-ATTR:host": "openstack-01.lab.eng.brq.redhat.com", "key_name":
+        "", "OS-EXT-SRV-ATTR:hypervisor_hostname": null, "name": "test-3", "created":
+        "2012-08-27T15:27:12Z", "tenant_id": "e827289fd66f4effb5b9b5012282fdb7", "metadata":
+        {}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_keys.yml b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_keys.yml
new file mode 100644
index 0000000..6ce7ea7
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_keys.yml
@@ -0,0 +1,197 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:39Z", "id": "0e68e226f6b946798f4915fc86857fe0",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 0e68e226f6b946798f4915fc86857fe0
+      X-Storage-Token:
+      - 0e68e226f6b946798f4915fc86857fe0
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-d46958de-0035-4d87-b06e-18915e3da8fd
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '756'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypairs": [{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLRqcGJtIWRsRlm9E+BAX1YThZc8y2zdXUF9KY3R1e8sWGnDjBIS91WWliaIgP8CrSMfFEWSzUJbyqrsBui4E0JDP04vcS5W0ioY/BmJD99nRaRncS+KKHChUuVMIjQ6cn+hI76OgfpPqM3GNgkxl2grW2arwXrzWRJ2tEP6QnlQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test1", "fingerprint":
+        "9a:be:87:83:75:ae:06:0e:b7:c4:19:be:f7:52:bd:a8"}}, {"keypair": {"public_key":
+        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQq0Nu2t2KLs7AQLIUHX6x94tx6sacAXSgkHvlVJLM9HHHPMFlXeerYEeaPSC/vS7mwl0bXNN/ETXRpJ5Thd6BAnLDEAJcvrm63NHeJ4axvALzs6mQyndAu7UpFrK3nEaDPKgZPnEAKCUvBD+vLoySWilaNWGxsVH5kFpbT+73NQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test2", "fingerprint":
+        "cc:1d:51:aa:d7:dd:b7:07:ec:3b:3c:0c:1a:0c:04:c5"}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:39Z", "id": "53d0cb9cfb1e499ca0ded559e07b5aaa",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 53d0cb9cfb1e499ca0ded559e07b5aaa
+      X-Storage-Token:
+      - 53d0cb9cfb1e499ca0ded559e07b5aaa
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-0fb19aca-2b82-419a-b5c7-8eef53784a1d
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '756'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypairs": [{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLRqcGJtIWRsRlm9E+BAX1YThZc8y2zdXUF9KY3R1e8sWGnDjBIS91WWliaIgP8CrSMfFEWSzUJbyqrsBui4E0JDP04vcS5W0ioY/BmJD99nRaRncS+KKHChUuVMIjQ6cn+hI76OgfpPqM3GNgkxl2grW2arwXrzWRJ2tEP6QnlQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test1", "fingerprint":
+        "9a:be:87:83:75:ae:06:0e:b7:c4:19:be:f7:52:bd:a8"}}, {"keypair": {"public_key":
+        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQq0Nu2t2KLs7AQLIUHX6x94tx6sacAXSgkHvlVJLM9HHHPMFlXeerYEeaPSC/vS7mwl0bXNN/ETXRpJ5Thd6BAnLDEAJcvrm63NHeJ4axvALzs6mQyndAu7UpFrK3nEaDPKgZPnEAKCUvBD+vLoySWilaNWGxsVH5kFpbT+73NQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test2", "fingerprint":
+        "cc:1d:51:aa:d7:dd:b7:07:ec:3b:3c:0c:1a:0c:04:c5"}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_realms.yml b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_realms.yml
new file mode 100644
index 0000000..b3eaf18
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0002_must_return_list_of_realms.yml
@@ -0,0 +1,205 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:15:34Z", "id": "e92cde551ebf403c9824440f7edc47ca",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/limits
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - e92cde551ebf403c9824440f7edc47ca
+      X-Storage-Token:
+      - e92cde551ebf403c9824440f7edc47ca
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-6baf6807-52cd-4a74-b0a5-04aeff385b3e
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '900'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"limits": {"rate": [{"regex": ".*", "limit": [{"next-available":
+        "2012-08-27T15:44:04Z", "unit": "MINUTE", "verb": "POST", "remaining": 9,
+        "value": 10}, {"next-available": "2012-08-27T16:15:34Z", "unit": "MINUTE",
+        "verb": "PUT", "remaining": 10, "value": 10}, {"next-available": "2012-08-27T15:39:45Z",
+        "unit": "MINUTE", "verb": "DELETE", "remaining": 99, "value": 100}], "uri":
+        "*"}, {"regex": "^/servers", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "DAY", "verb": "POST", "remaining": 50, "value": 50}], "uri": "*/servers"},
+        {"regex": ".*changes-since.*", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "MINUTE", "verb": "GET", "remaining": 3, "value": 3}], "uri": "*changes-since*"}],
+        "absolute": {"maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128,
+        "maxPersonalitySize": 10240, "maxTotalCores": 20, "maxTotalInstances": 10,
+        "maxTotalRAMSize": 51200}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:15:34Z", "id": "6366d82b5dd04fee88c37bf950f24172",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/limits
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 6366d82b5dd04fee88c37bf950f24172
+      X-Storage-Token:
+      - 6366d82b5dd04fee88c37bf950f24172
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-96f38078-c22f-4fdf-a3f0-a2ec6bbb2212
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '900'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"limits": {"rate": [{"regex": ".*", "limit": [{"next-available":
+        "2012-08-27T15:44:04Z", "unit": "MINUTE", "verb": "POST", "remaining": 9,
+        "value": 10}, {"next-available": "2012-08-27T16:15:34Z", "unit": "MINUTE",
+        "verb": "PUT", "remaining": 10, "value": 10}, {"next-available": "2012-08-27T15:39:45Z",
+        "unit": "MINUTE", "verb": "DELETE", "remaining": 99, "value": 100}], "uri":
+        "*"}, {"regex": "^/servers", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "DAY", "verb": "POST", "remaining": 50, "value": 50}], "uri": "*/servers"},
+        {"regex": ".*changes-since.*", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "MINUTE", "verb": "GET", "remaining": 3, "value": 3}], "uri": "*changes-since*"}],
+        "absolute": {"maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128,
+        "maxPersonalitySize": 10240, "maxTotalCores": 20, "maxTotalInstances": 10,
+        "maxTotalRAMSize": 51200}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_hardware_profiles.yml b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_hardware_profiles.yml
new file mode 100644
index 0000000..fa860cc
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_hardware_profiles.yml
@@ -0,0 +1,188 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:33Z", "id": "acfe5cb6720045c4ba3a61bbc85fe08e",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - acfe5cb6720045c4ba3a61bbc85fe08e
+      X-Storage-Token:
+      - acfe5cb6720045c4ba3a61bbc85fe08e
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-108270e7-7fea-4cfe-82eb-76f1d733ac63
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '353'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavor": {"vcpus": 1, "disk": 0, "name": "m1.tiny", "links": [{"href":
+        "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:33Z", "id": "e3b855ebbafe41cb9e510cdcb79b1ad9",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/unknown
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - e3b855ebbafe41cb9e510cdcb79b1ad9
+      X-Storage-Token:
+      - e3b855ebbafe41cb9e510cdcb79b1ad9
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 404
+      message: Not Found
+    headers:
+      Content-Length:
+      - '78'
+      Content-Type:
+      - application/json; charset=UTF-8
+      X-Compute-Request-Id:
+      - req-173cf567-daf8-4ebf-9751-f472df4316e9
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"itemNotFound": {"message": "The resource could not be found.",
+        "code": 404}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_images.yml b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_images.yml
new file mode 100644
index 0000000..7aeb324
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_images.yml
@@ -0,0 +1,825 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:26 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:26Z", "id": "2cdc8562eed4480eaf404bf7719fc4d1",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:44 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:26 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:26Z", "id": "bdabcf1bb3104cb5968c4c4b24400b67",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:44 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - bdabcf1bb3104cb5968c4c4b24400b67
+      X-Storage-Token:
+      - bdabcf1bb3104cb5968c4c4b24400b67
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-e265ef32-452c-494a-a960-7408c096a1c7
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:26 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:44 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 2cdc8562eed4480eaf404bf7719fc4d1
+      X-Storage-Token:
+      - 2cdc8562eed4480eaf404bf7719fc4d1
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-0eb06258-b825-4052-a604-4c02a360bc7d
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '685'
+      Date:
+      - Mon, 27 Aug 2012 16:16:26 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"image": {"status": "ACTIVE", "updated": "2012-08-24T15:51:45Z",
+        "name": "f16-jeos", "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}, {"href": "http://10.34.32.211:9292/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "type": "application/vnd.openstack.image", "rel": "alternate"}], "created":
+        "2012-08-24T15:41:42Z", "progress": 100, "minRam": 0, "minDisk": 0, "id":
+        "bf7ce59a-d9f9-45d4-9313-f45b16436602", "metadata": {}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:44 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:26 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:26Z", "id": "c5f8836121b2418b96a3feb3eae5cf6e",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:26 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:26Z", "id": "2787674866c1448ab65b5915429e1208",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 2787674866c1448ab65b5915429e1208
+      X-Storage-Token:
+      - 2787674866c1448ab65b5915429e1208
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-5db489bc-cb62-4d8b-a92d-613e413425c8
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - c5f8836121b2418b96a3feb3eae5cf6e
+      X-Storage-Token:
+      - c5f8836121b2418b96a3feb3eae5cf6e
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-21ddef3c-a974-472b-bf30-5cc4702b5084
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '688'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"images": [{"status": "ACTIVE", "updated": "2012-08-24T15:51:45Z",
+        "name": "f16-jeos", "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}, {"href": "http://10.34.32.211:9292/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "type": "application/vnd.openstack.image", "rel": "alternate"}], "created":
+        "2012-08-24T15:41:42Z", "progress": 100, "minRam": 0, "minDisk": 0, "id":
+        "bf7ce59a-d9f9-45d4-9313-f45b16436602", "metadata": {}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:27Z", "id": "3cc0eefd97c344fdbeb8d4db06359fa0",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:27Z", "id": "f55967d736684f4bb13cdf019604e96d",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - f55967d736684f4bb13cdf019604e96d
+      X-Storage-Token:
+      - f55967d736684f4bb13cdf019604e96d
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-ba6f44bc-9626-4cc5-9b18-093abe696ec9
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 3cc0eefd97c344fdbeb8d4db06359fa0
+      X-Storage-Token:
+      - 3cc0eefd97c344fdbeb8d4db06359fa0
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-9fefe16f-8925-46a5-a2ff-23432205dd93
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '688'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"images": [{"status": "ACTIVE", "updated": "2012-08-24T15:51:45Z",
+        "name": "f16-jeos", "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}, {"href": "http://10.34.32.211:9292/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "type": "application/vnd.openstack.image", "rel": "alternate"}], "created":
+        "2012-08-24T15:41:42Z", "progress": 100, "minRam": 0, "minDisk": 0, "id":
+        "bf7ce59a-d9f9-45d4-9313-f45b16436602", "metadata": {}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:27Z", "id": "7c22b6e46a08419f95b2acf98262c8bb",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:27Z", "id": "cdf2d4d03b2e428e884183ffc6a48c4d",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - cdf2d4d03b2e428e884183ffc6a48c4d
+      X-Storage-Token:
+      - cdf2d4d03b2e428e884183ffc6a48c4d
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-768f3c48-83a0-4417-a692-61f86f6f9b3e
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/unknown
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 7c22b6e46a08419f95b2acf98262c8bb
+      X-Storage-Token:
+      - 7c22b6e46a08419f95b2acf98262c8bb
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 404
+      message: Not Found
+    headers:
+      Content-Length:
+      - '62'
+      Content-Type:
+      - application/json; charset=UTF-8
+      X-Compute-Request-Id:
+      - req-3840624b-109f-42bd-968e-0b09b7a51bcb
+      Date:
+      - Mon, 27 Aug 2012 16:16:27 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"itemNotFound": {"message": "Image not found.", "code": 404}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:45 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_instances.yml b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_instances.yml
new file mode 100644
index 0000000..1c475d9
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_instances.yml
@@ -0,0 +1,109 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:17:33Z", "id": "7fa6728dbb9349dabbf7da4b10a665a7",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 7fa6728dbb9349dabbf7da4b10a665a7
+      X-Storage-Token:
+      - 7fa6728dbb9349dabbf7da4b10a665a7
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-be0221ae-72b3-40cc-9ebc-fd70e8542735
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1403'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"server": {"OS-EXT-STS:task_state": null, "addresses": {"demonet":
+        [{"version": 4, "addr": "10.0.0.2"}]}, "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-0000000c", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "fef00348-9991-404c-b0d4-655d18f84345", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
+        "", "status": "ACTIVE", "updated": "2012-08-27T15:27:16Z", "hostId": "13942eef5ee69ea6fabcd918042084b1ec915973056bb1b497b43dfa",
+        "OS-EXT-SRV-ATTR:host": "openstack-01.lab.eng.brq.redhat.com", "key_name":
+        "", "OS-EXT-SRV-ATTR:hypervisor_hostname": null, "name": "test-3", "created":
+        "2012-08-27T15:27:12Z", "tenant_id": "e827289fd66f4effb5b9b5012282fdb7", "metadata":
+        {}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_keys.yml b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_keys.yml
new file mode 100644
index 0000000..25f247f
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_keys.yml
@@ -0,0 +1,197 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:39Z", "id": "2d7eb883d34c4549835b12ab72fa4863",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 2d7eb883d34c4549835b12ab72fa4863
+      X-Storage-Token:
+      - 2d7eb883d34c4549835b12ab72fa4863
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-92d34996-f7b5-4254-9893-2dc4b196dd0b
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '756'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypairs": [{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLRqcGJtIWRsRlm9E+BAX1YThZc8y2zdXUF9KY3R1e8sWGnDjBIS91WWliaIgP8CrSMfFEWSzUJbyqrsBui4E0JDP04vcS5W0ioY/BmJD99nRaRncS+KKHChUuVMIjQ6cn+hI76OgfpPqM3GNgkxl2grW2arwXrzWRJ2tEP6QnlQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test1", "fingerprint":
+        "9a:be:87:83:75:ae:06:0e:b7:c4:19:be:f7:52:bd:a8"}}, {"keypair": {"public_key":
+        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQq0Nu2t2KLs7AQLIUHX6x94tx6sacAXSgkHvlVJLM9HHHPMFlXeerYEeaPSC/vS7mwl0bXNN/ETXRpJ5Thd6BAnLDEAJcvrm63NHeJ4axvALzs6mQyndAu7UpFrK3nEaDPKgZPnEAKCUvBD+vLoySWilaNWGxsVH5kFpbT+73NQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test2", "fingerprint":
+        "cc:1d:51:aa:d7:dd:b7:07:ec:3b:3c:0c:1a:0c:04:c5"}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:39Z", "id": "1fab3d0817254f2fb3cf6070a5a95194",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 1fab3d0817254f2fb3cf6070a5a95194
+      X-Storage-Token:
+      - 1fab3d0817254f2fb3cf6070a5a95194
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-f3776a90-fafb-4b5e-89d9-d75b9a58a9fa
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '756'
+      Date:
+      - Mon, 27 Aug 2012 16:16:39 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypairs": [{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLRqcGJtIWRsRlm9E+BAX1YThZc8y2zdXUF9KY3R1e8sWGnDjBIS91WWliaIgP8CrSMfFEWSzUJbyqrsBui4E0JDP04vcS5W0ioY/BmJD99nRaRncS+KKHChUuVMIjQ6cn+hI76OgfpPqM3GNgkxl2grW2arwXrzWRJ2tEP6QnlQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test1", "fingerprint":
+        "9a:be:87:83:75:ae:06:0e:b7:c4:19:be:f7:52:bd:a8"}}, {"keypair": {"public_key":
+        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQq0Nu2t2KLs7AQLIUHX6x94tx6sacAXSgkHvlVJLM9HHHPMFlXeerYEeaPSC/vS7mwl0bXNN/ETXRpJ5Thd6BAnLDEAJcvrm63NHeJ4axvALzs6mQyndAu7UpFrK3nEaDPKgZPnEAKCUvBD+vLoySWilaNWGxsVH5kFpbT+73NQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test2", "fingerprint":
+        "cc:1d:51:aa:d7:dd:b7:07:ec:3b:3c:0c:1a:0c:04:c5"}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_realms.yml b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_realms.yml
new file mode 100644
index 0000000..669d52c
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0003_must_allow_to_filter_realms.yml
@@ -0,0 +1,205 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:15:34Z", "id": "bb95494b665b406090d2a2d5d72e5a71",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/limits
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - bb95494b665b406090d2a2d5d72e5a71
+      X-Storage-Token:
+      - bb95494b665b406090d2a2d5d72e5a71
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-6b2e205e-8069-45fc-b30c-63c072441a52
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '900'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"limits": {"rate": [{"regex": ".*", "limit": [{"next-available":
+        "2012-08-27T15:44:04Z", "unit": "MINUTE", "verb": "POST", "remaining": 9,
+        "value": 10}, {"next-available": "2012-08-27T16:15:34Z", "unit": "MINUTE",
+        "verb": "PUT", "remaining": 10, "value": 10}, {"next-available": "2012-08-27T15:39:45Z",
+        "unit": "MINUTE", "verb": "DELETE", "remaining": 99, "value": 100}], "uri":
+        "*"}, {"regex": "^/servers", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "DAY", "verb": "POST", "remaining": 50, "value": 50}], "uri": "*/servers"},
+        {"regex": ".*changes-since.*", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "MINUTE", "verb": "GET", "remaining": 3, "value": 3}], "uri": "*changes-since*"}],
+        "absolute": {"maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128,
+        "maxPersonalitySize": 10240, "maxTotalCores": 20, "maxTotalInstances": 10,
+        "maxTotalRAMSize": 51200}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:15:34Z", "id": "c1e33579df06479d94b8d4615511d528",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/limits
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - c1e33579df06479d94b8d4615511d528
+      X-Storage-Token:
+      - c1e33579df06479d94b8d4615511d528
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-6c5ec037-d2a5-49ac-a244-424e6332e383
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '900'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"limits": {"rate": [{"regex": ".*", "limit": [{"next-available":
+        "2012-08-27T15:44:04Z", "unit": "MINUTE", "verb": "POST", "remaining": 9,
+        "value": 10}, {"next-available": "2012-08-27T16:15:34Z", "unit": "MINUTE",
+        "verb": "PUT", "remaining": 10, "value": 10}, {"next-available": "2012-08-27T15:39:45Z",
+        "unit": "MINUTE", "verb": "DELETE", "remaining": 99, "value": 100}], "uri":
+        "*"}, {"regex": "^/servers", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "DAY", "verb": "POST", "remaining": 50, "value": 50}], "uri": "*/servers"},
+        {"regex": ".*changes-since.*", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "MINUTE", "verb": "GET", "remaining": 3, "value": 3}], "uri": "*changes-since*"}],
+        "absolute": {"maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128,
+        "maxPersonalitySize": 10240, "maxTotalCores": 20, "maxTotalInstances": 10,
+        "maxTotalRAMSize": 51200}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_hardware_profile.yml b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_hardware_profile.yml
new file mode 100644
index 0000000..d8a118a
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_hardware_profile.yml
@@ -0,0 +1,188 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:32 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:32Z", "id": "e212b8468a0b45d9b93b82fda11bd576",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:50 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - e212b8468a0b45d9b93b82fda11bd576
+      X-Storage-Token:
+      - e212b8468a0b45d9b93b82fda11bd576
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-5b5d5b66-a04e-4d30-ae7c-9655f708cbe5
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '353'
+      Date:
+      - Mon, 27 Aug 2012 16:16:32 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavor": {"vcpus": 1, "disk": 0, "name": "m1.tiny", "links": [{"href":
+        "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:32 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:32Z", "id": "d111ea498c1045d5893382890dba4cf3",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/unknown
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - d111ea498c1045d5893382890dba4cf3
+      X-Storage-Token:
+      - d111ea498c1045d5893382890dba4cf3
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 404
+      message: Not Found
+    headers:
+      Content-Length:
+      - '78'
+      Content-Type:
+      - application/json; charset=UTF-8
+      X-Compute-Request-Id:
+      - req-9f2c5888-17a5-4e06-a46f-fc88483748b9
+      Date:
+      - Mon, 27 Aug 2012 16:16:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"itemNotFound": {"message": "The resource could not be found.",
+        "code": 404}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:51 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_image.yml b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_image.yml
new file mode 100644
index 0000000..13bf673
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_image.yml
@@ -0,0 +1,413 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:28Z", "id": "ff51f69aad234317a671af4780f3821c",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:28Z", "id": "9e77961ce95143eeaba3ace09fd9893d",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 9e77961ce95143eeaba3ace09fd9893d
+      X-Storage-Token:
+      - 9e77961ce95143eeaba3ace09fd9893d
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-8f8f2042-97d8-4a7d-a1f7-3db71b1f0195
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/unknown
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - ff51f69aad234317a671af4780f3821c
+      X-Storage-Token:
+      - ff51f69aad234317a671af4780f3821c
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 404
+      message: Not Found
+    headers:
+      Content-Length:
+      - '62'
+      Content-Type:
+      - application/json; charset=UTF-8
+      X-Compute-Request-Id:
+      - req-0f2f8d88-89f4-44c0-becf-5676241b8845
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"itemNotFound": {"message": "Image not found.", "code": 404}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:28Z", "id": "1838fdd9bb1a4bdfb530f63d4daea4f1",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:28Z", "id": "1d0d5793af01471b9db1aebf4465f029",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/detail
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 1d0d5793af01471b9db1aebf4465f029
+      X-Storage-Token:
+      - 1d0d5793af01471b9db1aebf4465f029
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-4a3abfe1-254c-44b9-b40e-5aac80f7fd95
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1748'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"flavors": [{"vcpus": 2, "disk": 10, "name": "m1.medium", "links":
+        [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/3",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 40,
+        "ram": 4096, "id": "3", "swap": ""}, {"vcpus": 4, "disk": 10, "name": "m1.large",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/4",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 80,
+        "ram": 8192, "id": "4", "swap": ""}, {"vcpus": 1, "disk": 0, "name": "m1.tiny",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "ram":
+        512, "id": "1", "swap": ""}, {"vcpus": 8, "disk": 10, "name": "m1.xlarge",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/5",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 160,
+        "ram": 16384, "id": "5", "swap": ""}, {"vcpus": 1, "disk": 10, "name": "m1.small",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/2",
+        "rel": "bookmark"}], "rxtx_factor": 1.0, "OS-FLV-EXT-DATA:ephemeral": 20,
+        "ram": 2048, "id": "2", "swap": ""}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:46 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 1838fdd9bb1a4bdfb530f63d4daea4f1
+      X-Storage-Token:
+      - 1838fdd9bb1a4bdfb530f63d4daea4f1
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-a1c97d58-93c2-481e-b90e-62e5cab21265
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '685'
+      Date:
+      - Mon, 27 Aug 2012 16:16:28 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"image": {"status": "ACTIVE", "updated": "2012-08-24T15:51:45Z",
+        "name": "f16-jeos", "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}, {"href": "http://10.34.32.211:9292/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "type": "application/vnd.openstack.image", "rel": "alternate"}], "created":
+        "2012-08-24T15:41:42Z", "progress": 100, "minRam": 0, "minDisk": 0, "id":
+        "bf7ce59a-d9f9-45d4-9313-f45b16436602", "metadata": {}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:47 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_instance.yml b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_instance.yml
new file mode 100644
index 0000000..7bf2c32
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_instance.yml
@@ -0,0 +1,109 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:17:32 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:17:32Z", "id": "d20ae4dcd00a414aba6ca84918d2ffcc",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - d20ae4dcd00a414aba6ca84918d2ffcc
+      X-Storage-Token:
+      - d20ae4dcd00a414aba6ca84918d2ffcc
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-93e528c1-c7a7-49f6-a479-910b80ef9b1c
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1403'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"server": {"OS-EXT-STS:task_state": null, "addresses": {"demonet":
+        [{"version": 4, "addr": "10.0.0.2"}]}, "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/fef00348-9991-404c-b0d4-655d18f84345",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-0000000c", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "fef00348-9991-404c-b0d4-655d18f84345", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
+        "", "status": "ACTIVE", "updated": "2012-08-27T15:27:16Z", "hostId": "13942eef5ee69ea6fabcd918042084b1ec915973056bb1b497b43dfa",
+        "OS-EXT-SRV-ATTR:host": "openstack-01.lab.eng.brq.redhat.com", "key_name":
+        "", "OS-EXT-SRV-ATTR:hypervisor_hostname": null, "name": "test-3", "created":
+        "2012-08-27T15:27:12Z", "tenant_id": "e827289fd66f4effb5b9b5012282fdb7", "metadata":
+        {}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:51 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_key.yml b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_key.yml
new file mode 100644
index 0000000..213ad34
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_key.yml
@@ -0,0 +1,197 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:38Z", "id": "885c20fa32974e00924709c93eb0cd3d",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 885c20fa32974e00924709c93eb0cd3d
+      X-Storage-Token:
+      - 885c20fa32974e00924709c93eb0cd3d
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-91898e2c-2c32-495c-94ac-65e89d07383d
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '756'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypairs": [{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLRqcGJtIWRsRlm9E+BAX1YThZc8y2zdXUF9KY3R1e8sWGnDjBIS91WWliaIgP8CrSMfFEWSzUJbyqrsBui4E0JDP04vcS5W0ioY/BmJD99nRaRncS+KKHChUuVMIjQ6cn+hI76OgfpPqM3GNgkxl2grW2arwXrzWRJ2tEP6QnlQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test1", "fingerprint":
+        "9a:be:87:83:75:ae:06:0e:b7:c4:19:be:f7:52:bd:a8"}}, {"keypair": {"public_key":
+        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQq0Nu2t2KLs7AQLIUHX6x94tx6sacAXSgkHvlVJLM9HHHPMFlXeerYEeaPSC/vS7mwl0bXNN/ETXRpJ5Thd6BAnLDEAJcvrm63NHeJ4axvALzs6mQyndAu7UpFrK3nEaDPKgZPnEAKCUvBD+vLoySWilaNWGxsVH5kFpbT+73NQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test2", "fingerprint":
+        "cc:1d:51:aa:d7:dd:b7:07:ec:3b:3c:0c:1a:0c:04:c5"}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:38Z", "id": "0997526a1921466081a8d5a9a7eec4ab",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 0997526a1921466081a8d5a9a7eec4ab
+      X-Storage-Token:
+      - 0997526a1921466081a8d5a9a7eec4ab
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-3de59996-4ced-42aa-a914-e1d12bf4b73f
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '756'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypairs": [{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLRqcGJtIWRsRlm9E+BAX1YThZc8y2zdXUF9KY3R1e8sWGnDjBIS91WWliaIgP8CrSMfFEWSzUJbyqrsBui4E0JDP04vcS5W0ioY/BmJD99nRaRncS+KKHChUuVMIjQ6cn+hI76OgfpPqM3GNgkxl2grW2arwXrzWRJ2tEP6QnlQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test1", "fingerprint":
+        "9a:be:87:83:75:ae:06:0e:b7:c4:19:be:f7:52:bd:a8"}}, {"keypair": {"public_key":
+        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQq0Nu2t2KLs7AQLIUHX6x94tx6sacAXSgkHvlVJLM9HHHPMFlXeerYEeaPSC/vS7mwl0bXNN/ETXRpJ5Thd6BAnLDEAJcvrm63NHeJ4axvALzs6mQyndAu7UpFrK3nEaDPKgZPnEAKCUvBD+vLoySWilaNWGxsVH5kFpbT+73NQ==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "name": "test2", "fingerprint":
+        "cc:1d:51:aa:d7:dd:b7:07:ec:3b:3c:0c:1a:0c:04:c5"}}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:57 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_realm.yml b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_realm.yml
new file mode 100644
index 0000000..0cc577d
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0004_must_allow_to_retrieve_single_realm.yml
@@ -0,0 +1,205 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:15:34Z", "id": "0bfb2862179d47229291a25cf608398e",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/limits
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 0bfb2862179d47229291a25cf608398e
+      X-Storage-Token:
+      - 0bfb2862179d47229291a25cf608398e
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-776452b2-0885-4489-9efd-6dfa45880247
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '900'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"limits": {"rate": [{"regex": ".*", "limit": [{"next-available":
+        "2012-08-27T15:44:04Z", "unit": "MINUTE", "verb": "POST", "remaining": 9,
+        "value": 10}, {"next-available": "2012-08-27T16:15:34Z", "unit": "MINUTE",
+        "verb": "PUT", "remaining": 10, "value": 10}, {"next-available": "2012-08-27T15:39:45Z",
+        "unit": "MINUTE", "verb": "DELETE", "remaining": 99, "value": 100}], "uri":
+        "*"}, {"regex": "^/servers", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "DAY", "verb": "POST", "remaining": 50, "value": 50}], "uri": "*/servers"},
+        {"regex": ".*changes-since.*", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "MINUTE", "verb": "GET", "remaining": 3, "value": 3}], "uri": "*changes-since*"}],
+        "absolute": {"maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128,
+        "maxPersonalitySize": 10240, "maxTotalCores": 20, "maxTotalInstances": 10,
+        "maxTotalRAMSize": 51200}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:15:34Z", "id": "9c158b0229204befb2d9253e822bf0c8",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/limits
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 9c158b0229204befb2d9253e822bf0c8
+      X-Storage-Token:
+      - 9c158b0229204befb2d9253e822bf0c8
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-922f233b-ea8a-48aa-8e4e-0b7e60ff4100
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '900'
+      Date:
+      - Mon, 27 Aug 2012 16:15:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"limits": {"rate": [{"regex": ".*", "limit": [{"next-available":
+        "2012-08-27T15:44:04Z", "unit": "MINUTE", "verb": "POST", "remaining": 9,
+        "value": 10}, {"next-available": "2012-08-27T16:15:34Z", "unit": "MINUTE",
+        "verb": "PUT", "remaining": 10, "value": 10}, {"next-available": "2012-08-27T15:39:45Z",
+        "unit": "MINUTE", "verb": "DELETE", "remaining": 99, "value": 100}], "uri":
+        "*"}, {"regex": "^/servers", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "DAY", "verb": "POST", "remaining": 50, "value": 50}], "uri": "*/servers"},
+        {"regex": ".*changes-since.*", "limit": [{"next-available": "2012-08-27T16:15:34Z",
+        "unit": "MINUTE", "verb": "GET", "remaining": 3, "value": 3}], "uri": "*changes-since*"}],
+        "absolute": {"maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128,
+        "maxPersonalitySize": 10240, "maxTotalCores": 20, "maxTotalInstances": 10,
+        "maxTotalRAMSize": 51200}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:26:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance-inst_launch-10.yml b/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance-inst_launch-10.yml
new file mode 100644
index 0000000..ecb0f61
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance-inst_launch-10.yml
@@ -0,0 +1,93 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:17:34 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:17:34Z", "id": "5925f23f1aaf40d984b640f0dd7b9bee",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 5925f23f1aaf40d984b640f0dd7b9bee
+      X-Storage-Token:
+      - 5925f23f1aaf40d984b640f0dd7b9bee
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 404
+      message: Not Found
+    headers:
+      Content-Length:
+      - '52'
+      Content-Type:
+      - text/plain; charset=UTF-8
+      Date:
+      - Mon, 27 Aug 2012 16:17:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! "404 Not Found\n\nThe resource could not be found.\n\n   "
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance.yml b/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance.yml
new file mode 100644
index 0000000..74f7fe7
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_an_instance.yml
@@ -0,0 +1,152 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:17:33 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:17:33Z", "id": "40a1700185dc45d8bb7763d78c5ce28a",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:52 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers
+    body:
+      encoding: UTF-8
+      string: ! '{"server":{"personality":[],"name":"server2012-08-27 14:28:52 +0200","imageRef":"bf7ce59a-d9f9-45d4-9313-f45b16436602","flavorRef":"1","security_groups":[]}}'
+    headers:
+      X-Auth-Token:
+      - 40a1700185dc45d8bb7763d78c5ce28a
+      X-Storage-Token:
+      - 40a1700185dc45d8bb7763d78c5ce28a
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 202
+      message: Accepted
+    headers:
+      X-Compute-Request-Id:
+      - req-858ade33-e6ef-4dcb-8769-20aa6251b674
+      Location:
+      - http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/5dcb220a-92bf-4b50-85d9-526f4de6b09c
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '400'
+      Date:
+      - Mon, 27 Aug 2012 16:17:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"server": {"OS-DCF:diskConfig": "MANUAL", "id": "5dcb220a-92bf-4b50-85d9-526f4de6b09c",
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/5dcb220a-92bf-4b50-85d9-526f4de6b09c",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/5dcb220a-92bf-4b50-85d9-526f4de6b09c",
+        "rel": "bookmark"}], "adminPass": "a3wTpcYuno7N"}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:52 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/5dcb220a-92bf-4b50-85d9-526f4de6b09c
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 40a1700185dc45d8bb7763d78c5ce28a
+      X-Storage-Token:
+      - 40a1700185dc45d8bb7763d78c5ce28a
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-0959cfe1-bd29-456c-975e-85e0f03ebdc0
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1334'
+      Date:
+      - Mon, 27 Aug 2012 16:17:34 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"server": {"OS-EXT-STS:task_state": "scheduling", "addresses": {},
+        "links": [{"href": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/servers/5dcb220a-92bf-4b50-85d9-526f4de6b09c",
+        "rel": "self"}, {"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/servers/5dcb220a-92bf-4b50-85d9-526f4de6b09c",
+        "rel": "bookmark"}], "image": {"id": "bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/images/bf7ce59a-d9f9-45d4-9313-f45b16436602",
+        "rel": "bookmark"}]}, "OS-EXT-STS:vm_state": "building", "OS-EXT-SRV-ATTR:instance_name":
+        "instance-00000012", "flavor": {"id": "1", "links": [{"href": "http://10.34.32.211:8774/e827289fd66f4effb5b9b5012282fdb7/flavors/1",
+        "rel": "bookmark"}]}, "id": "5dcb220a-92bf-4b50-85d9-526f4de6b09c", "user_id":
+        "f2286a51122345cea7d216c120974b41", "OS-DCF:diskConfig": "MANUAL", "accessIPv4":
+        "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 0, "config_drive":
+        "", "status": "BUILD", "updated": "2012-08-27T16:17:34Z", "hostId": "", "OS-EXT-SRV-ATTR:host":
+        "openstack-01.lab.eng.brq.redhat.com", "key_name": "", "OS-EXT-SRV-ATTR:hypervisor_hostname":
+        null, "name": "server2012-08-27 14:28:52 +0200", "created": "2012-08-27T16:17:34Z",
+        "tenant_id": "e827289fd66f4effb5b9b5012282fdb7", "metadata": {}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:28:52 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_key.yml b/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_key.yml
new file mode 100644
index 0000000..9ce96fb
--- /dev/null
+++ b/server/tests/drivers/openstack/fixtures/test_0005_must_allow_to_create_and_destroy_key.yml
@@ -0,0 +1,690 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:38Z", "id": "f0880474a81e4157b54d76758642b135",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/extensions
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - f0880474a81e4157b54d76758642b135
+      X-Storage-Token:
+      - f0880474a81e4157b54d76758642b135
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-42db8c76-92e0-4b80-8a7f-f8e976f9b8fa
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '8365'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"extensions": [{"updated": "2011-12-21T00:00:00+00:00", "name":
+        "ServerDiagnostics", "links": [], "namespace": "http://docs.openstack.org/compute/ext/server-diagnostics/api/v1.1",
+        "alias": "os-server-diagnostics", "description": "Allow Admins to view server
+        diagnostics through server action"}, {"updated": "2011-06-29T00:00:00+00:00",
+        "name": "Hosts", "links": [], "namespace": "http://docs.openstack.org/compute/ext/hosts/api/v1.1",
+        "alias": "os-hosts", "description": "Admin-only host administration"}, {"updated":
+        "2011-07-19T00:00:00+00:00", "name": "SchedulerHints", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/scheduler-hints/api/v2", "alias": "os-scheduler-hints",
+        "description": "Pass arbitrary key/value pairs to the scheduler"}, {"updated":
+        "2011-08-08T00:00:00+00:00", "name": "Quotas", "links": [], "namespace": "http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1",
+        "alias": "os-quota-sets", "description": "Quotas management support"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Floating_ip_dns", "links": [], "namespace":
+        "http://docs.openstack.org/ext/floating_ip_dns/api/v1.1", "alias": "os-floating-ip-dns",
+        "description": "Floating IP DNS support"}, {"updated": "2011-09-14T00:00:00+00:00",
+        "name": "FlavorExtraData", "links": [], "namespace": "http://docs.openstack.org/compute/ext/flavor_extra_data/api/v1.1",
+        "alias": "OS-FLV-EXT-DATA", "description": "Provide additional data for flavors"},
+        {"updated": "2011-06-23T00:00:00+00:00", "name": "FlavorExtraSpecs", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/flavor_extra_specs/api/v1.1",
+        "alias": "os-flavor-extra-specs", "description": "Instance type (flavor) extra
+        specs"}, {"updated": "2011-08-17T00:00:00+00:00", "name": "VirtualInterfaces",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/virtual_interfaces/api/v1.1",
+        "alias": "virtual_interfaces", "description": "Virtual interface support"},
+        {"updated": "2011-12-23T00:00:00+00:00", "name": "Accounts", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/accounts/api/v1.1", "alias":
+        "os-accounts", "description": "Admin-only access to accounts"}, {"updated":
+        "2011-03-25T00:00:00+00:00", "name": "Volumes", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/volumes/api/v1.1", "alias": "os-volumes",
+        "description": "Volumes support"}, {"updated": "2011-11-03T00:00:00+00:00",
+        "name": "ExtendedStatus", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_status/api/v1.1",
+        "alias": "OS-EXT-STS", "description": "Extended Status support"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Consoles", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/os-consoles/api/v2", "alias": "os-consoles",
+        "description": "Interactive Console support."}, {"updated": "2011-07-21T00:00:00+00:00",
+        "name": "SecurityGroups", "links": [], "namespace": "http://docs.openstack.org/compute/ext/securitygroups/api/v1.1",
+        "alias": "security_groups", "description": "Security group support"}, {"updated":
+        "2012-01-12T00:00:00+00:00", "name": "Aggregates", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/aggregates/api/v1.1", "alias": "os-aggregates",
+        "description": "Admin-only aggregate administration"}, {"updated": "2011-07-19T00:00:00+00:00",
+        "name": "Createserverext", "links": [], "namespace": "http://docs.openstack.org/compute/ext/createserverext/api/v1.1",
+        "alias": "os-create-server-ext", "description": "Extended support to the Create
+        Server v1.1 API"}, {"updated": "2011-09-01T00:00:00+00:00", "name": "DeferredDelete",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/deferred-delete/api/v1.1",
+        "alias": "os-deferred-delete", "description": "Instance deferred delete"},
+        {"updated": "2011-09-27T00:00:00+00:00", "name": "DiskConfig", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/disk_config/api/v1.1",
+        "alias": "OS-DCF", "description": "Disk Management Extension"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Networks", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/networks/api/v1.1", "alias": "os-networks",
+        "description": "Admin-only Network Management Extension"}, {"updated": "2011-11-03T00:00:00+00:00",
+        "name": "ExtendedServerAttributes", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_status/api/v1.1",
+        "alias": "OS-EXT-SRV-ATTR", "description": "Extended Server Attributes support."},
+        {"updated": "2011-08-08T00:00:00+00:00", "name": "Keypairs", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/keypairs/api/v1.1", "alias":
+        "os-keypairs", "description": "Keypair Support"}, {"updated": "2011-08-24T00:00:00+00:00",
+        "name": "VolumeTypes", "links": [], "namespace": "http://docs.openstack.org/compute/ext/volume_types/api/v1.1",
+        "alias": "os-volume-types", "description": "Volume types support"}, {"updated":
+        "2011-09-20T00:00:00+00:00", "name": "AdminActions", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/admin-actions/api/v1.1", "alias": "os-admin-actions",
+        "description": "Enable admin-only server actions\n\n    Actions include: pause,
+        unpause, suspend, resume, migrate,\n    resetNetwork, injectNetworkInfo, lock,
+        unlock, createBackup\n    "}, {"updated": "2012-01-04T00:00:00+00:00", "name":
+        "Floating_ip_pools", "links": [], "namespace": "http://docs.openstack.org/compute/ext/floating_ip_pools/api/v1.1",
+        "alias": "os-floating-ip-pools", "description": "Floating IPs support"}, {"updated":
+        "2012-01-23T00:00:00+00:00", "name": "ServerStartStop", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/servers/api/v1.1", "alias": "os-server-start-stop",
+        "description": "Start/Stop instance compute API support"}, {"updated": "2012-01-19T00:00:00+00:00",
+        "name": "Certificates", "links": [], "namespace": "http://docs.openstack.org/compute/ext/certificates/api/v1.1",
+        "alias": "os-certificates", "description": "Certificates support"}, {"updated":
+        "2011-12-08T00:00:00+00:00", "name": "Console_output", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/os-console-output/api/v2", "alias":
+        "os-console-output", "description": "Console log output support, with tailing
+        ability."}, {"updated": "2012-01-19T00:00:00+00:00", "name": "FlavorManage",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/flavor_manage/api/v1.1",
+        "alias": "os-flavor-manage", "description": "\n    Flavor create/delete API
+        support\n    "}, {"updated": "2011-12-16T00:00:00+00:00", "name": "Cloudpipe",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/cloudpipe/api/v1.1",
+        "alias": "os-cloudpipe", "description": "Adds actions to create cloudpipe
+        instances.\n\n    When running with the Vlan network mode, you need a mechanism
+        to route\n    from the public Internet to your vlans.  This mechanism is known
+        as a\n    cloudpipe.\n\n    At the time of creating this class, only OpenVPN
+        is supported.  Support for\n    a SSH Bastion host is forthcoming.\n    "},
+        {"updated": "2011-06-09T00:00:00+00:00", "name": "Multinic", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/multinic/api/v1.1", "alias":
+        "NMN", "description": "Multiple network support"}, {"updated": "2011-08-08T00:00:00+00:00",
+        "name": "Users", "links": [], "namespace": "http://docs.openstack.org/compute/ext/users/api/v1.1",
+        "alias": "os-users", "description": "Allow admins to acces user information"},
+        {"updated": "2011-08-19T00:00:00+00:00", "name": "SimpleTenantUsage", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/os-simple-tenant-usage/api/v1.1",
+        "alias": "os-simple-tenant-usage", "description": "Simple tenant usage extension"},
+        {"updated": "2011-12-21T00:00:00+00:00", "name": "ServerActionList", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/server-actions-list/api/v1.1",
+        "alias": "os-server-action-list", "description": "Allow Admins to view pending
+        server actions"}, {"updated": "2011-08-18T00:00:00+00:00", "name": "Rescue",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/rescue/api/v1.1",
+        "alias": "os-rescue", "description": "Instance rescue mode"}, {"updated":
+        "2011-06-16T00:00:00+00:00", "name": "Floating_ips", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/floating_ips/api/v1.1", "alias": "os-floating-ips",
+        "description": "Floating IPs support"}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: UTF-8
+      string: ! '{"keypair":{"name":"test-unit-1"}}'
+    headers:
+      X-Auth-Token:
+      - f0880474a81e4157b54d76758642b135
+      X-Storage-Token:
+      - f0880474a81e4157b54d76758642b135
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-8757fa64-3f58-41ed-99cd-6b3c99ba960b
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '1343'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"keypair": {"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDE8axljiZF17C1vlIijELVhRz1e9Zxjekg36OYAC/5lYEhFXyydvH0oYr/A4runqFrg+656Kuz2DPS4rgLQ7tHT6vm/2yBsJIPP1Z7GrEw/fv89OuH0wvkRlg7ILS2rfhS9rx0l2N2RqQGkqLPpO/+s1uvY7Kzr8jnJPeXhi5Y5Q==
+        nova@openstack-01.lab.eng.brq.redhat.com\n", "private_key": "-----BEGIN RSA
+        PRIVATE KEY-----\nMIICXAIBAAKBgQDE8axljiZF17C1vlIijELVhRz1e9Zxjekg36OYAC/5lYEhFXyy\ndvH0oYr/A4runqFrg+656Kuz2DPS4rgLQ7tHT6vm/2yBsJIPP1Z7GrEw/fv89OuH\n0wvkRlg7ILS2rfhS9rx0l2N2RqQGkqLPpO/+s1uvY7Kzr8jnJPeXhi5Y5QIDAQAB\nAoGAH7Qf4oFNm/Sq17b5leIqaCDzlnkG/mSv4MDfnvp4vp7YmLDS0A/hx1WyAHdb\niCo1Jg+pAHh6G4t0XEBvDDEtFndRex/MJ//+3CqXHxutFDGcO5EsQVc6uUPrW6Sq\n9AWU/50p3WFMKA3pqnfCN0KslUUqgoLlOshrBgIw0Vcg0AkCQQDs4EjAgFEnxtxk\nSxhfZQL9DzxFEO2DLSbMebGBWZI6JizPVUE6JzYz1LnHtcKV8HFArDW4CQdR4QZR\nwKjyNk8fAkEA1NgUb5Fks4dM1TzxZJGIi52SA8SbGdqN8uPWiw5Au58ppOqb3xEG\nas2LKzHLX/ORGAkFvrFyL9rQJkd+CVALewJAP5aB0TNhFdV7am0CUPFz2O0TF9NQ\nfytKxA9TCE88QuHmm43eYbcPBODxMlxnrQqLzHmuPgYmceN/Z8jZUZQkrwJAZFc5\nyx8QClLOtfh1FKRHawptu7kEJbwTD1651fRyMAFo8IZp1U+BZvhfk412A1YgIOSg\nALZGzqipWGJ72IgT4QJBAJViYQhDEY3hfIOsaCsuns83ujZBcrY/hEathJCanm9+\ngoeHZFTSnq1nieOeRlqa2XR1iGObNn+udtF6P1DJQKM=\n-----END
+        RSA PRIVATE KEY-----\n", "user_id": "f2286a51122345cea7d216c120974b41", "name":
+        "test-unit-1", "fingerprint": "52:89:bc:c6:f4:d7:e6:1b:7a:6c:e7:90:d8:91:a5:9e"}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:38Z", "id": "8a15c65455d34169ab239a4afb115b7f",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/extensions
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - 8a15c65455d34169ab239a4afb115b7f
+      X-Storage-Token:
+      - 8a15c65455d34169ab239a4afb115b7f
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-03ccf4cb-3de9-4428-875f-ec62f0e49162
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '8365'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"extensions": [{"updated": "2011-12-21T00:00:00+00:00", "name":
+        "ServerDiagnostics", "links": [], "namespace": "http://docs.openstack.org/compute/ext/server-diagnostics/api/v1.1",
+        "alias": "os-server-diagnostics", "description": "Allow Admins to view server
+        diagnostics through server action"}, {"updated": "2011-06-29T00:00:00+00:00",
+        "name": "Hosts", "links": [], "namespace": "http://docs.openstack.org/compute/ext/hosts/api/v1.1",
+        "alias": "os-hosts", "description": "Admin-only host administration"}, {"updated":
+        "2011-07-19T00:00:00+00:00", "name": "SchedulerHints", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/scheduler-hints/api/v2", "alias": "os-scheduler-hints",
+        "description": "Pass arbitrary key/value pairs to the scheduler"}, {"updated":
+        "2011-08-08T00:00:00+00:00", "name": "Quotas", "links": [], "namespace": "http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1",
+        "alias": "os-quota-sets", "description": "Quotas management support"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Floating_ip_dns", "links": [], "namespace":
+        "http://docs.openstack.org/ext/floating_ip_dns/api/v1.1", "alias": "os-floating-ip-dns",
+        "description": "Floating IP DNS support"}, {"updated": "2011-09-14T00:00:00+00:00",
+        "name": "FlavorExtraData", "links": [], "namespace": "http://docs.openstack.org/compute/ext/flavor_extra_data/api/v1.1",
+        "alias": "OS-FLV-EXT-DATA", "description": "Provide additional data for flavors"},
+        {"updated": "2011-06-23T00:00:00+00:00", "name": "FlavorExtraSpecs", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/flavor_extra_specs/api/v1.1",
+        "alias": "os-flavor-extra-specs", "description": "Instance type (flavor) extra
+        specs"}, {"updated": "2011-08-17T00:00:00+00:00", "name": "VirtualInterfaces",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/virtual_interfaces/api/v1.1",
+        "alias": "virtual_interfaces", "description": "Virtual interface support"},
+        {"updated": "2011-12-23T00:00:00+00:00", "name": "Accounts", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/accounts/api/v1.1", "alias":
+        "os-accounts", "description": "Admin-only access to accounts"}, {"updated":
+        "2011-03-25T00:00:00+00:00", "name": "Volumes", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/volumes/api/v1.1", "alias": "os-volumes",
+        "description": "Volumes support"}, {"updated": "2011-11-03T00:00:00+00:00",
+        "name": "ExtendedStatus", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_status/api/v1.1",
+        "alias": "OS-EXT-STS", "description": "Extended Status support"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Consoles", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/os-consoles/api/v2", "alias": "os-consoles",
+        "description": "Interactive Console support."}, {"updated": "2011-07-21T00:00:00+00:00",
+        "name": "SecurityGroups", "links": [], "namespace": "http://docs.openstack.org/compute/ext/securitygroups/api/v1.1",
+        "alias": "security_groups", "description": "Security group support"}, {"updated":
+        "2012-01-12T00:00:00+00:00", "name": "Aggregates", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/aggregates/api/v1.1", "alias": "os-aggregates",
+        "description": "Admin-only aggregate administration"}, {"updated": "2011-07-19T00:00:00+00:00",
+        "name": "Createserverext", "links": [], "namespace": "http://docs.openstack.org/compute/ext/createserverext/api/v1.1",
+        "alias": "os-create-server-ext", "description": "Extended support to the Create
+        Server v1.1 API"}, {"updated": "2011-09-01T00:00:00+00:00", "name": "DeferredDelete",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/deferred-delete/api/v1.1",
+        "alias": "os-deferred-delete", "description": "Instance deferred delete"},
+        {"updated": "2011-09-27T00:00:00+00:00", "name": "DiskConfig", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/disk_config/api/v1.1",
+        "alias": "OS-DCF", "description": "Disk Management Extension"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Networks", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/networks/api/v1.1", "alias": "os-networks",
+        "description": "Admin-only Network Management Extension"}, {"updated": "2011-11-03T00:00:00+00:00",
+        "name": "ExtendedServerAttributes", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_status/api/v1.1",
+        "alias": "OS-EXT-SRV-ATTR", "description": "Extended Server Attributes support."},
+        {"updated": "2011-08-08T00:00:00+00:00", "name": "Keypairs", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/keypairs/api/v1.1", "alias":
+        "os-keypairs", "description": "Keypair Support"}, {"updated": "2011-08-24T00:00:00+00:00",
+        "name": "VolumeTypes", "links": [], "namespace": "http://docs.openstack.org/compute/ext/volume_types/api/v1.1",
+        "alias": "os-volume-types", "description": "Volume types support"}, {"updated":
+        "2011-09-20T00:00:00+00:00", "name": "AdminActions", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/admin-actions/api/v1.1", "alias": "os-admin-actions",
+        "description": "Enable admin-only server actions\n\n    Actions include: pause,
+        unpause, suspend, resume, migrate,\n    resetNetwork, injectNetworkInfo, lock,
+        unlock, createBackup\n    "}, {"updated": "2012-01-04T00:00:00+00:00", "name":
+        "Floating_ip_pools", "links": [], "namespace": "http://docs.openstack.org/compute/ext/floating_ip_pools/api/v1.1",
+        "alias": "os-floating-ip-pools", "description": "Floating IPs support"}, {"updated":
+        "2012-01-23T00:00:00+00:00", "name": "ServerStartStop", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/servers/api/v1.1", "alias": "os-server-start-stop",
+        "description": "Start/Stop instance compute API support"}, {"updated": "2012-01-19T00:00:00+00:00",
+        "name": "Certificates", "links": [], "namespace": "http://docs.openstack.org/compute/ext/certificates/api/v1.1",
+        "alias": "os-certificates", "description": "Certificates support"}, {"updated":
+        "2011-12-08T00:00:00+00:00", "name": "Console_output", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/os-console-output/api/v2", "alias":
+        "os-console-output", "description": "Console log output support, with tailing
+        ability."}, {"updated": "2012-01-19T00:00:00+00:00", "name": "FlavorManage",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/flavor_manage/api/v1.1",
+        "alias": "os-flavor-manage", "description": "\n    Flavor create/delete API
+        support\n    "}, {"updated": "2011-12-16T00:00:00+00:00", "name": "Cloudpipe",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/cloudpipe/api/v1.1",
+        "alias": "os-cloudpipe", "description": "Adds actions to create cloudpipe
+        instances.\n\n    When running with the Vlan network mode, you need a mechanism
+        to route\n    from the public Internet to your vlans.  This mechanism is known
+        as a\n    cloudpipe.\n\n    At the time of creating this class, only OpenVPN
+        is supported.  Support for\n    a SSH Bastion host is forthcoming.\n    "},
+        {"updated": "2011-06-09T00:00:00+00:00", "name": "Multinic", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/multinic/api/v1.1", "alias":
+        "NMN", "description": "Multiple network support"}, {"updated": "2011-08-08T00:00:00+00:00",
+        "name": "Users", "links": [], "namespace": "http://docs.openstack.org/compute/ext/users/api/v1.1",
+        "alias": "os-users", "description": "Allow admins to acces user information"},
+        {"updated": "2011-08-19T00:00:00+00:00", "name": "SimpleTenantUsage", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/os-simple-tenant-usage/api/v1.1",
+        "alias": "os-simple-tenant-usage", "description": "Simple tenant usage extension"},
+        {"updated": "2011-12-21T00:00:00+00:00", "name": "ServerActionList", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/server-actions-list/api/v1.1",
+        "alias": "os-server-action-list", "description": "Allow Admins to view pending
+        server actions"}, {"updated": "2011-08-18T00:00:00+00:00", "name": "Rescue",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/rescue/api/v1.1",
+        "alias": "os-rescue", "description": "Instance rescue mode"}, {"updated":
+        "2011-06-16T00:00:00+00:00", "name": "Floating_ips", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/floating_ips/api/v1.1", "alias": "os-floating-ips",
+        "description": "Floating IPs support"}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs
+    body:
+      encoding: UTF-8
+      string: ! '{"keypair":{"name":"test-unit-1"}}'
+    headers:
+      X-Auth-Token:
+      - 8a15c65455d34169ab239a4afb115b7f
+      X-Storage-Token:
+      - 8a15c65455d34169ab239a4afb115b7f
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 409
+      message: Conflict
+    headers:
+      Content-Length:
+      - '90'
+      Content-Type:
+      - application/json; charset=UTF-8
+      X-Compute-Request-Id:
+      - req-2a6bc67e-20d2-4cce-bd23-f0c741af1a9c
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"conflictingRequest": {"message": "Key pair ''test-unit-1'' already
+        exists.", "code": 409}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: post
+    uri: http://10.34.32.211:5000/v2.0/tokens
+    body:
+      encoding: UTF-8
+      string: ! '{"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}'
+    headers:
+      Content-Type:
+      - application/json
+      Accept:
+      - ! '*/*'
+      User-Agent:
+      - Ruby
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      Content-Type:
+      - application/json
+      Vary:
+      - X-Auth-Token
+      Content-Length:
+      - '2010'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+    body:
+      encoding: US-ASCII
+      string: ! '{"access": {"token": {"expires": "2012-08-28T16:16:38Z", "id": "d8301f2a04fa4e8598462039eb9cffbd",
+        "tenant": {"description": null, "enabled": true, "id": "e827289fd66f4effb5b9b5012282fdb7",
+        "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8776/v1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "volume", "name": "Volume Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:9292/v1", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:9292/v1", "internalURL": "http://10.34.32.211:9292/v1"}],
+        "endpoints_links": [], "type": "image", "name": "Image Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "region": "RegionOne", "publicURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7",
+        "internalURL": "http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7"}],
+        "endpoints_links": [], "type": "compute", "name": "Compute Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:8773/services/Admin", "region": "RegionOne",
+        "publicURL": "http://10.34.32.211:8773/services/Cloud", "internalURL": "http://10.34.32.211:8773/services/Cloud"}],
+        "endpoints_links": [], "type": "ec2", "name": "EC2 Service"}, {"endpoints":
+        [{"adminURL": "http://10.34.32.211:35357/v2.0", "region": "RegionOne", "publicURL":
+        "http://10.34.32.211:5000/v2.0", "internalURL": "http://10.34.32.211:5000/v2.0"}],
+        "endpoints_links": [], "type": "identity", "name": "Identity Service"}], "user":
+        {"username": "admin", "roles_links": [], "id": "f2286a51122345cea7d216c120974b41",
+        "roles": [{"id": "e7e292b28c4b4befb06232fa935a3c48", "name": "KeystoneServiceAdmin"},
+        {"id": "7e716d5a52f348bb9a7fbbc230041b2a", "name": "admin"}, {"id": "bf2113c0cb924b34907521808ed9df13",
+        "name": "KeystoneAdmin"}], "name": "admin"}}}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: get
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/extensions
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - d8301f2a04fa4e8598462039eb9cffbd
+      X-Storage-Token:
+      - d8301f2a04fa4e8598462039eb9cffbd
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 200
+      message: OK
+    headers:
+      X-Compute-Request-Id:
+      - req-aa67503f-0501-48a9-8866-fed9195c89d3
+      Content-Type:
+      - application/json
+      Content-Length:
+      - '8365'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ! '{"extensions": [{"updated": "2011-12-21T00:00:00+00:00", "name":
+        "ServerDiagnostics", "links": [], "namespace": "http://docs.openstack.org/compute/ext/server-diagnostics/api/v1.1",
+        "alias": "os-server-diagnostics", "description": "Allow Admins to view server
+        diagnostics through server action"}, {"updated": "2011-06-29T00:00:00+00:00",
+        "name": "Hosts", "links": [], "namespace": "http://docs.openstack.org/compute/ext/hosts/api/v1.1",
+        "alias": "os-hosts", "description": "Admin-only host administration"}, {"updated":
+        "2011-07-19T00:00:00+00:00", "name": "SchedulerHints", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/scheduler-hints/api/v2", "alias": "os-scheduler-hints",
+        "description": "Pass arbitrary key/value pairs to the scheduler"}, {"updated":
+        "2011-08-08T00:00:00+00:00", "name": "Quotas", "links": [], "namespace": "http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1",
+        "alias": "os-quota-sets", "description": "Quotas management support"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Floating_ip_dns", "links": [], "namespace":
+        "http://docs.openstack.org/ext/floating_ip_dns/api/v1.1", "alias": "os-floating-ip-dns",
+        "description": "Floating IP DNS support"}, {"updated": "2011-09-14T00:00:00+00:00",
+        "name": "FlavorExtraData", "links": [], "namespace": "http://docs.openstack.org/compute/ext/flavor_extra_data/api/v1.1",
+        "alias": "OS-FLV-EXT-DATA", "description": "Provide additional data for flavors"},
+        {"updated": "2011-06-23T00:00:00+00:00", "name": "FlavorExtraSpecs", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/flavor_extra_specs/api/v1.1",
+        "alias": "os-flavor-extra-specs", "description": "Instance type (flavor) extra
+        specs"}, {"updated": "2011-08-17T00:00:00+00:00", "name": "VirtualInterfaces",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/virtual_interfaces/api/v1.1",
+        "alias": "virtual_interfaces", "description": "Virtual interface support"},
+        {"updated": "2011-12-23T00:00:00+00:00", "name": "Accounts", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/accounts/api/v1.1", "alias":
+        "os-accounts", "description": "Admin-only access to accounts"}, {"updated":
+        "2011-03-25T00:00:00+00:00", "name": "Volumes", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/volumes/api/v1.1", "alias": "os-volumes",
+        "description": "Volumes support"}, {"updated": "2011-11-03T00:00:00+00:00",
+        "name": "ExtendedStatus", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_status/api/v1.1",
+        "alias": "OS-EXT-STS", "description": "Extended Status support"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Consoles", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/os-consoles/api/v2", "alias": "os-consoles",
+        "description": "Interactive Console support."}, {"updated": "2011-07-21T00:00:00+00:00",
+        "name": "SecurityGroups", "links": [], "namespace": "http://docs.openstack.org/compute/ext/securitygroups/api/v1.1",
+        "alias": "security_groups", "description": "Security group support"}, {"updated":
+        "2012-01-12T00:00:00+00:00", "name": "Aggregates", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/aggregates/api/v1.1", "alias": "os-aggregates",
+        "description": "Admin-only aggregate administration"}, {"updated": "2011-07-19T00:00:00+00:00",
+        "name": "Createserverext", "links": [], "namespace": "http://docs.openstack.org/compute/ext/createserverext/api/v1.1",
+        "alias": "os-create-server-ext", "description": "Extended support to the Create
+        Server v1.1 API"}, {"updated": "2011-09-01T00:00:00+00:00", "name": "DeferredDelete",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/deferred-delete/api/v1.1",
+        "alias": "os-deferred-delete", "description": "Instance deferred delete"},
+        {"updated": "2011-09-27T00:00:00+00:00", "name": "DiskConfig", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/disk_config/api/v1.1",
+        "alias": "OS-DCF", "description": "Disk Management Extension"}, {"updated":
+        "2011-12-23T00:00:00+00:00", "name": "Networks", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/networks/api/v1.1", "alias": "os-networks",
+        "description": "Admin-only Network Management Extension"}, {"updated": "2011-11-03T00:00:00+00:00",
+        "name": "ExtendedServerAttributes", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_status/api/v1.1",
+        "alias": "OS-EXT-SRV-ATTR", "description": "Extended Server Attributes support."},
+        {"updated": "2011-08-08T00:00:00+00:00", "name": "Keypairs", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/keypairs/api/v1.1", "alias":
+        "os-keypairs", "description": "Keypair Support"}, {"updated": "2011-08-24T00:00:00+00:00",
+        "name": "VolumeTypes", "links": [], "namespace": "http://docs.openstack.org/compute/ext/volume_types/api/v1.1",
+        "alias": "os-volume-types", "description": "Volume types support"}, {"updated":
+        "2011-09-20T00:00:00+00:00", "name": "AdminActions", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/admin-actions/api/v1.1", "alias": "os-admin-actions",
+        "description": "Enable admin-only server actions\n\n    Actions include: pause,
+        unpause, suspend, resume, migrate,\n    resetNetwork, injectNetworkInfo, lock,
+        unlock, createBackup\n    "}, {"updated": "2012-01-04T00:00:00+00:00", "name":
+        "Floating_ip_pools", "links": [], "namespace": "http://docs.openstack.org/compute/ext/floating_ip_pools/api/v1.1",
+        "alias": "os-floating-ip-pools", "description": "Floating IPs support"}, {"updated":
+        "2012-01-23T00:00:00+00:00", "name": "ServerStartStop", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/servers/api/v1.1", "alias": "os-server-start-stop",
+        "description": "Start/Stop instance compute API support"}, {"updated": "2012-01-19T00:00:00+00:00",
+        "name": "Certificates", "links": [], "namespace": "http://docs.openstack.org/compute/ext/certificates/api/v1.1",
+        "alias": "os-certificates", "description": "Certificates support"}, {"updated":
+        "2011-12-08T00:00:00+00:00", "name": "Console_output", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/os-console-output/api/v2", "alias":
+        "os-console-output", "description": "Console log output support, with tailing
+        ability."}, {"updated": "2012-01-19T00:00:00+00:00", "name": "FlavorManage",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/flavor_manage/api/v1.1",
+        "alias": "os-flavor-manage", "description": "\n    Flavor create/delete API
+        support\n    "}, {"updated": "2011-12-16T00:00:00+00:00", "name": "Cloudpipe",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/cloudpipe/api/v1.1",
+        "alias": "os-cloudpipe", "description": "Adds actions to create cloudpipe
+        instances.\n\n    When running with the Vlan network mode, you need a mechanism
+        to route\n    from the public Internet to your vlans.  This mechanism is known
+        as a\n    cloudpipe.\n\n    At the time of creating this class, only OpenVPN
+        is supported.  Support for\n    a SSH Bastion host is forthcoming.\n    "},
+        {"updated": "2011-06-09T00:00:00+00:00", "name": "Multinic", "links": [],
+        "namespace": "http://docs.openstack.org/compute/ext/multinic/api/v1.1", "alias":
+        "NMN", "description": "Multiple network support"}, {"updated": "2011-08-08T00:00:00+00:00",
+        "name": "Users", "links": [], "namespace": "http://docs.openstack.org/compute/ext/users/api/v1.1",
+        "alias": "os-users", "description": "Allow admins to acces user information"},
+        {"updated": "2011-08-19T00:00:00+00:00", "name": "SimpleTenantUsage", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/os-simple-tenant-usage/api/v1.1",
+        "alias": "os-simple-tenant-usage", "description": "Simple tenant usage extension"},
+        {"updated": "2011-12-21T00:00:00+00:00", "name": "ServerActionList", "links":
+        [], "namespace": "http://docs.openstack.org/compute/ext/server-actions-list/api/v1.1",
+        "alias": "os-server-action-list", "description": "Allow Admins to view pending
+        server actions"}, {"updated": "2011-08-18T00:00:00+00:00", "name": "Rescue",
+        "links": [], "namespace": "http://docs.openstack.org/compute/ext/rescue/api/v1.1",
+        "alias": "os-rescue", "description": "Instance rescue mode"}, {"updated":
+        "2011-06-16T00:00:00+00:00", "name": "Floating_ips", "links": [], "namespace":
+        "http://docs.openstack.org/compute/ext/floating_ips/api/v1.1", "alias": "os-floating-ips",
+        "description": "Floating IPs support"}]}'
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+- request:
+    method: delete
+    uri: http://10.34.32.211:8774/v1.1/e827289fd66f4effb5b9b5012282fdb7/os-keypairs/test-unit-1
+    body:
+      encoding: US-ASCII
+      string: ''
+    headers:
+      X-Auth-Token:
+      - d8301f2a04fa4e8598462039eb9cffbd
+      X-Storage-Token:
+      - d8301f2a04fa4e8598462039eb9cffbd
+      Connection:
+      - Keep-Alive
+      User-Agent:
+      - OpenStack Ruby API 1.0.3
+      Accept:
+      - application/json
+      Content-Type:
+      - application/json
+  response:
+    status:
+      code: 202
+      message: Accepted
+    headers:
+      Content-Type:
+      - text/html; charset=UTF-8
+      Content-Length:
+      - '0'
+      Date:
+      - Mon, 27 Aug 2012 16:16:38 GMT
+      Connection:
+      - keep-alive
+    body:
+      encoding: US-ASCII
+      string: ''
+    http_version: 
+  recorded_at: Mon, 27 Aug 2012 12:27:56 GMT
+recorded_with: VCR 2.2.4
diff --git a/server/tests/drivers/openstack/hardware_profiles_test.rb b/server/tests/drivers/openstack/hardware_profiles_test.rb
new file mode 100644
index 0000000..8c6b0c3
--- /dev/null
+++ b/server/tests/drivers/openstack/hardware_profiles_test.rb
@@ -0,0 +1,46 @@
+require 'minitest/autorun'
+
+require_relative File.join('..', '..', '..', 'lib', 'deltacloud', 'api.rb')
+require_relative 'common.rb'
+
+describe 'OpenStackDriver HardwareProfiles' do
+
+  before do
+    @driver = Deltacloud::new(:openstack, credentials)
+    VCR.insert_cassette __name__
+  end
+
+  after do
+    VCR.eject_cassette
+  end
+
+  it 'must throw error when wrong credentials' do
+    Proc.new do
+      @driver.backend.images(OpenStruct.new(:user => 'unknown+wrong', :password => 'wrong'))
+    end.must_raise Deltacloud::ExceptionHandler::AuthenticationFailure, 'Authentication Failure'
+  end
+
+  it 'must return list of hardware_profiles' do
+    @driver.hardware_profiles.wont_be_empty
+    @driver.hardware_profiles.first.must_be_kind_of Deltacloud::HardwareProfile
+  end
+
+  it 'must allow to filter hardware_profiles' do
+    hardware_profiles = @driver.hardware_profiles :id => '1'
+    hardware_profiles.wont_be_empty
+    hardware_profiles.must_be_kind_of Array
+    hardware_profiles.size.must_equal 1
+    hardware_profiles.first.name.must_equal '1'
+    @driver.hardware_profiles(:id => 'unknown').must_be_empty
+  end
+
+  it 'must allow to retrieve single hardware_profile' do
+    hardware_profile = @driver.hardware_profile :id => '1'
+    hardware_profile.wont_be_nil
+    hardware_profile.name.must_equal '1'
+    hardware_profile.properties.must_be_kind_of Array
+    hardware_profile.properties.wont_be_empty
+    @driver.hardware_profile(:id => 'unknown').must_be_nil
+  end
+
+end
diff --git a/server/tests/drivers/openstack/images_test.rb b/server/tests/drivers/openstack/images_test.rb
new file mode 100644
index 0000000..5c3d943
--- /dev/null
+++ b/server/tests/drivers/openstack/images_test.rb
@@ -0,0 +1,50 @@
+require 'minitest/autorun'
+
+require_relative File.join('..', '..', '..', 'lib', 'deltacloud', 'api.rb')
+require_relative 'common.rb'
+
+describe 'OpenStackDriver Images' do
+
+  before do
+    @driver = Deltacloud::new(:openstack, credentials)
+    VCR.insert_cassette __name__
+  end
+
+  after do
+    VCR.eject_cassette
+  end
+
+  it 'must throw error when wrong credentials' do
+    Proc.new do
+      @driver.backend.images(OpenStruct.new(:user => 'unknown+wrong', :password => 'wrong'))
+    end.must_raise Deltacloud::ExceptionHandler::AuthenticationFailure, 'Authentication Failure'
+  end
+
+  it 'must return list of images' do
+    @driver.images.wont_be_empty
+    @driver.images.first.must_be_kind_of Image
+  end
+
+  it 'must allow to filter images' do
+    images = @driver.images :id => openstack_image_id
+    images.wont_be_empty
+    images.must_be_kind_of Array
+    images.size.must_equal 1
+    images.first.id.must_equal openstack_image_id
+    @driver.images(:owner_id => 'admin').wont_be_empty
+    @driver.images(:owner_id => 'unknown').must_be_empty
+    @driver.images(:id => 'unknown').must_be_empty
+  end
+
+  it 'must allow to retrieve single image' do
+    @driver.image(:id => 'unknown').must_be_nil
+    image = @driver.image :id => openstack_image_id
+    image.wont_be_nil
+    image.must_be_kind_of Image
+    image.id.must_equal openstack_image_id
+    image.name.wont_be_empty
+    image.owner_id.wont_be_empty
+    image.state.wont_be_empty
+  end
+
+end
diff --git a/server/tests/drivers/openstack/instances_test.rb b/server/tests/drivers/openstack/instances_test.rb
new file mode 100644
index 0000000..99ec2b0
--- /dev/null
+++ b/server/tests/drivers/openstack/instances_test.rb
@@ -0,0 +1,66 @@
+require 'minitest/autorun'
+
+require_relative File.join('..', '..', '..', 'lib', 'deltacloud', 'api.rb')
+require_relative 'common.rb'
+
+describe 'OpenStackDriver Instances' do
+
+  before do
+    @driver = Deltacloud::new(:openstack, credentials)
+    VCR.insert_cassette __name__
+  end
+
+  after do
+    VCR.eject_cassette
+  end
+
+  it 'must throw error when wrong credentials' do
+    Proc.new do
+      @driver.backend.images(OpenStruct.new(:user => 'unknown+wrong', :password => 'wrong'))
+    end.must_raise Deltacloud::ExceptionHandler::AuthenticationFailure, 'Authentication Failure'
+  end
+
+  it 'must return list of instances' do
+    @driver.instances.wont_be_empty
+    @driver.instances.first.must_be_kind_of Instance
+  end
+
+# FIXME: The tests above will fail because of incompatibility
+#        in a way how OpenStack handle uuid/id.
+#        Please uncomment these tests if that will be fixed.
+
+=begin
+  it 'must allow to filter instances' do
+    instances = @driver.instances :id => 'fef00348-9991-404c-b0d4-655d18f84345'
+    instances.wont_be_empty
+    instances.must_be_kind_of Array
+    instances.size.must_equal 1
+    puts instances.inspect
+    instances.first.id.must_equal 'fef00348-9991-404c-b0d4-655d18f84345'
+    @driver.instances(:id => 'unknown').must_be_empty
+  end
+
+  it 'must allow to retrieve single instance' do
+    instance = @driver.instance :id => 'fef00348-9991-404c-b0d4-655d18f84345'
+    instance.wont_be_nil
+    instance.id.must_equal 'fef00348-9991-404c-b0d4-655d18f84345'
+    instance.name.must_equal 'test-3'
+    instance.state.wont_be_empty
+    instance.owner_id.must_equal 'admin'
+    instance.realm_id.wont_be_empty
+    instance.image_id.wont_be_empty
+    instance.instance_profile.wont_be_nil
+    @driver.instance(:id => 'unknown').must_be_nil
+  end
+
+  it 'must allow to create and destroy an instance' do
+    instance = @driver.create_instance 'bf7ce59a-d9f9-45d4-9313-f45b16436602', :hwp_id => '1'
+    instance.wont_be_nil
+    instance.image_id.must_equal 'bf7ce59a-d9f9-45d4-9313-f45b16436602'
+    instance.name.wont_be_empty
+    instance.wait_for!(@driver, record_retries('inst_launch')) { |i| i.is_running? }
+    puts @driver.destroy_instance(instance.id).inspect
+  end
+=end
+
+end
diff --git a/server/tests/drivers/openstack/keys_test.rb b/server/tests/drivers/openstack/keys_test.rb
new file mode 100644
index 0000000..bb16f09
--- /dev/null
+++ b/server/tests/drivers/openstack/keys_test.rb
@@ -0,0 +1,61 @@
+require 'minitest/autorun'
+
+require_relative File.join('..', '..', '..', 'lib', 'deltacloud', 'api.rb')
+require_relative 'common.rb'
+
+describe 'OpenStackDriver Keys' do
+
+  before do
+    @driver = Deltacloud::new(:openstack, credentials)
+    VCR.insert_cassette __name__
+  end
+
+  after do
+    VCR.eject_cassette
+  end
+
+  it 'must throw error when wrong credentials' do
+    Proc.new do
+      @driver.backend.images(OpenStruct.new(:user => 'unknown+wrong', :password => 'wrong'))
+    end.must_raise Deltacloud::ExceptionHandler::AuthenticationFailure, 'Authentication Failure'
+  end
+
+  it 'must return list of keys' do
+    @driver.keys.wont_be_empty
+    @driver.keys.first.must_be_kind_of Key
+  end
+
+  it 'must allow to filter keys' do
+    keys = @driver.keys :id => 'test1'
+    keys.wont_be_empty
+    keys.must_be_kind_of Array
+    keys.size.must_equal 1
+    keys.first.name.must_equal 'test1'
+    @driver.keys(:id => 'unknown').must_be_empty
+  end
+
+  it 'must allow to retrieve single key' do
+    key = @driver.key :id => 'test2'
+    key.wont_be_nil
+    key.name.must_equal 'test2'
+    key.fingerprint.wont_be_empty
+    key.credential_type.must_equal :key
+    key.state.must_equal 'AVAILABLE'
+    @driver.key(:id => 'unknown').must_be_nil
+  end
+
+  it 'must allow to create and destroy key' do
+    key = @driver.create_key(:key_name => 'test-unit-1')
+    key.wont_be_nil
+    key.id.must_equal 'test-unit-1'
+    key.fingerprint.wont_be_empty
+    key.pem_rsa_key.wont_be_empty
+    key.pem_rsa_key.must_match /^\-\-\-\-\-BEGIN RSA PRIVATE KEY/
+    # Should not allow duplicate keys to be created:
+    lambda {
+      @driver.create_key(:key_name => 'test-unit-1')
+    }.must_raise Deltacloud::ExceptionHandler::BackendError
+    @driver.destroy_key(:id => 'test-unit-1').must_equal true
+  end
+
+end
diff --git a/server/tests/drivers/openstack/realms_test.rb b/server/tests/drivers/openstack/realms_test.rb
new file mode 100644
index 0000000..e820f28
--- /dev/null
+++ b/server/tests/drivers/openstack/realms_test.rb
@@ -0,0 +1,46 @@
+require 'minitest/autorun'
+
+require_relative File.join('..', '..', '..', 'lib', 'deltacloud', 'api.rb')
+require_relative 'common.rb'
+
+describe 'OpenStackDriver Realms' do
+
+  before do
+    @driver = Deltacloud::new(:openstack, credentials)
+    VCR.insert_cassette __name__
+  end
+
+  after do
+    VCR.eject_cassette
+  end
+
+  it 'must throw error when wrong credentials' do
+    Proc.new do
+      @driver.backend.images(OpenStruct.new(:user => 'unknown+wrong', :password => 'wrong'))
+    end.must_raise Deltacloud::ExceptionHandler::AuthenticationFailure, 'Authentication Failure'
+  end
+
+  it 'must return list of realms' do
+    @driver.realms.wont_be_empty
+    @driver.realms.first.must_be_kind_of Realm
+  end
+
+  it 'must allow to filter realms' do
+    realms = @driver.realms :id => 'default'
+    realms.wont_be_empty
+    realms.must_be_kind_of Array
+    realms.size.must_equal 1
+    realms.first.id.must_equal 'default'
+    @driver.realms(:id => 'unknown').must_be_empty
+  end
+
+  it 'must allow to retrieve single realm' do
+    realm = @driver.realm :id => 'default'
+    realm.wont_be_nil
+    realm.id.must_equal 'default'
+    realm.limit.wont_be_empty
+    realm.state.must_equal 'AVAILABLE'
+    @driver.realm(:id => 'unknown').must_be_nil
+  end
+
+end
-- 
1.7.10.2


Mime
View raw message