From 15eb069195f67978c70b219f87c95886201a0f3b Mon Sep 17 00:00:00 2001 From: Chirag Jog Date: Thu, 28 Feb 2013 17:46:54 +0530 Subject: [PATCH 01/14] Use strict base encoding otherwise breaks for very large org names. --- lib/fog/vcloud/compute.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/vcloud/compute.rb b/lib/fog/vcloud/compute.rb index 168c60eec2..edaa589600 100644 --- a/lib/fog/vcloud/compute.rb +++ b/lib/fog/vcloud/compute.rb @@ -300,7 +300,7 @@ def base_url # Use this to set the Authorization header for login def authorization_header - "Basic #{Base64.encode64("#{@username}:#{@password}").chomp!}" + "Basic #{Base64.strict_encode64("#{@username}:#{@password}")}" end # Actually do the request From de29bfcee8bec547f88b0fb2b9f93c20b3b54016 Mon Sep 17 00:00:00 2001 From: Chirag Jog Date: Thu, 28 Feb 2013 18:07:02 +0530 Subject: [PATCH 02/14] revert typo --- lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb b/lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb index 5023deabdb..86de2ec81e 100644 --- a/lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb +++ b/lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb @@ -71,7 +71,7 @@ class Real include Shared def instantiate_vapp_template options = {} - validate_instantiate_vapp_template_options optionsgi + validate_instantiate_vapp_template_options options request( :body => generate_instantiate_vapp_template_request(options), :expects => 201, From 5a3332236153390694ab30950330b5784a1f4d41 Mon Sep 17 00:00:00 2001 From: Chirag Jog Date: Thu, 28 Feb 2013 21:40:33 +0530 Subject: [PATCH 03/14] Fix the base encoding issue with Ruby 1.8.7 Compliance --- lib/fog/vcloud/compute.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/vcloud/compute.rb b/lib/fog/vcloud/compute.rb index b3eb58714b..c6a6110ede 100644 --- a/lib/fog/vcloud/compute.rb +++ b/lib/fog/vcloud/compute.rb @@ -301,7 +301,7 @@ def base_url # Use this to set the Authorization header for login def authorization_header - "Basic #{Base64.strict_encode64("#{@username}:#{@password}")}" + "Basic #{Base64.encode64("#{@username}:#{@password}").delete("\n")}" end # Actually do the request From 9e8bb10684b3ab35e42d7e8a140019a934b348d4 Mon Sep 17 00:00:00 2001 From: Chirag Jog Date: Fri, 1 Mar 2013 13:17:39 +0530 Subject: [PATCH 04/14] Delete \r also --- lib/fog/vcloud/compute.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/vcloud/compute.rb b/lib/fog/vcloud/compute.rb index c6a6110ede..4cc3934605 100644 --- a/lib/fog/vcloud/compute.rb +++ b/lib/fog/vcloud/compute.rb @@ -301,7 +301,7 @@ def base_url # Use this to set the Authorization header for login def authorization_header - "Basic #{Base64.encode64("#{@username}:#{@password}").delete("\n")}" + "Basic #{Base64.encode64("#{@username}:#{@password}").delete("\r\n")}" end # Actually do the request From 8542e93b242f39892423dcd1f7cbcc9802a11f9c Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Sat, 2 Mar 2013 21:15:40 -0500 Subject: [PATCH 05/14] OpenStack: base64 encode personality in rebuild Updates the rebuild_server action so that it base64's the personality just like we do in create_server. --- lib/fog/openstack/requests/compute/rebuild_server.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/fog/openstack/requests/compute/rebuild_server.rb b/lib/fog/openstack/requests/compute/rebuild_server.rb index c4f23e6b1d..77f744659b 100644 --- a/lib/fog/openstack/requests/compute/rebuild_server.rb +++ b/lib/fog/openstack/requests/compute/rebuild_server.rb @@ -11,7 +11,15 @@ def rebuild_server(server_id, image_ref, name, admin_pass=nil, metadata=nil, per }} body['rebuild']['adminPass'] = admin_pass if admin_pass body['rebuild']['metadata'] = metadata if metadata - body['rebuild']['personality'] = personality if personality + if personality + body['rebuild']['personality'] = [] + for file in personality + body['rebuild']['personality'] << { + 'contents' => Base64.encode64(file['contents']), + 'path' => file['path'] + } + end + end server_action(server_id, body, 202) end From 09b505768d786ae875c7bd746c253cbe4ed432a2 Mon Sep 17 00:00:00 2001 From: Ferran Rodenas Date: Tue, 5 Mar 2013 12:51:06 +0100 Subject: [PATCH 06/14] [openstack|network] Add endpoint_type option --- lib/fog/openstack/network.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/fog/openstack/network.rb b/lib/fog/openstack/network.rb index 2d84c05747..35cf4d9795 100644 --- a/lib/fog/openstack/network.rb +++ b/lib/fog/openstack/network.rb @@ -7,7 +7,7 @@ class OpenStack < Fog::Service requires :openstack_auth_url recognizes :openstack_auth_token, :openstack_management_url, :persistent, :openstack_service_type, :openstack_service_name, :openstack_tenant, - :openstack_api_key, :openstack_username, + :openstack_api_key, :openstack_username, :openstack_endpoint_type, :current_user, :current_tenant ## MODELS @@ -120,6 +120,7 @@ def initialize(options={}) @openstack_must_reauthenticate = false @openstack_service_type = options[:openstack_service_type] || ['network'] @openstack_service_name = options[:openstack_service_name] + @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' @connection_options = options[:connection_options] || {} @@ -192,7 +193,7 @@ def authenticate :openstack_auth_token => @openstack_auth_token, :openstack_service_type => @openstack_service_type, :openstack_service_name => @openstack_service_name, - :openstack_endpoint_type => 'adminURL' + :openstack_endpoint_type => @openstack_endpoint_type } credentials = Fog::OpenStack.authenticate_v2(options, @connection_options) From b52d8912f9d7174d0ec09e9608893484a40fa51f Mon Sep 17 00:00:00 2001 From: Ferran Rodenas Date: Tue, 5 Mar 2013 13:16:38 +0100 Subject: [PATCH 07/14] [openstack|image] Check for glance version (fog only supports v1) --- lib/fog/openstack/image.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/fog/openstack/image.rb b/lib/fog/openstack/image.rb index 76c7a2a1e2..74eec7f073 100644 --- a/lib/fog/openstack/image.rb +++ b/lib/fog/openstack/image.rb @@ -206,6 +206,10 @@ def authenticate @host = uri.host @path = uri.path @path.sub!(/\/$/, '') + unless @path.match(/v1(\.1)*/) + raise Fog::OpenStack::Errors::ServiceUnavailable.new( + "OpenStack binding only supports version 1.1 (a.k.a. 1)") + end @port = uri.port @scheme = uri.scheme true From 7c7b308b383ec5381968775cafb86bb4c16236a6 Mon Sep 17 00:00:00 2001 From: Anshul Khandelwal Date: Wed, 6 Mar 2013 22:01:16 +0530 Subject: [PATCH 08/14] sshable should take the same options as ssh --- lib/fog/compute/models/server.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fog/compute/models/server.rb b/lib/fog/compute/models/server.rb index a66c202080..4522d99a1b 100644 --- a/lib/fog/compute/models/server.rb +++ b/lib/fog/compute/models/server.rb @@ -62,8 +62,8 @@ def ssh_port 22 end - def sshable? - ready? && !public_ip_address.nil? && !!Timeout::timeout(8) { ssh 'pwd' } + def sshable?(options={}) + ready? && !public_ip_address.nil? && !!Timeout::timeout(8) { ssh('pwd', options) } rescue SystemCallError, Net::SSH::AuthenticationFailed, Timeout::Error false end From e4884d8f51f36a37d6f219de315ffae6e16d1e88 Mon Sep 17 00:00:00 2001 From: Anshul Khandelwal Date: Wed, 6 Mar 2013 22:11:34 +0530 Subject: [PATCH 09/14] [aws][glesys] Pass credentials to sshable --- lib/fog/aws/models/compute/server.rb | 2 +- lib/fog/glesys/models/compute/server.rb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/fog/aws/models/compute/server.rb b/lib/fog/aws/models/compute/server.rb index 4d68be3972..9bbf6123e9 100644 --- a/lib/fog/aws/models/compute/server.rb +++ b/lib/fog/aws/models/compute/server.rb @@ -202,7 +202,7 @@ def setup(credentials = {}) end # wait for aws to be ready - wait_for { sshable? } + wait_for { sshable?(credentials) } Fog::SSH.new(public_ip_address, username, credentials).run(commands) end diff --git a/lib/fog/glesys/models/compute/server.rb b/lib/fog/glesys/models/compute/server.rb index f1b5edb3a5..3e1e141c10 100644 --- a/lib/fog/glesys/models/compute/server.rb +++ b/lib/fog/glesys/models/compute/server.rb @@ -87,13 +87,13 @@ def setup(credentials = {}) commands << %{echo "#{public_key}" >> ~/.ssh/authorized_keys} end - # wait for aws to be ready - wait_for { sshable? } - if credentials[:password].nil? && !rootpassword.nil? credentials[:password] = rootpassword end + # wait for glesys to be ready + wait_for { sshable?(credentials) } + Fog::SSH.new(public_ip_address, username, credentials).run(commands) end From d24d9c510c53178b159b3e64169a16fdcb06cc71 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Wed, 6 Mar 2013 12:27:23 -0800 Subject: [PATCH 10/14] Support optional `snapshot_id` key when creating volumes --- lib/fog/rackspace/requests/block_storage/create_volume.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/fog/rackspace/requests/block_storage/create_volume.rb b/lib/fog/rackspace/requests/block_storage/create_volume.rb index 989b2232dc..918d4fc93d 100644 --- a/lib/fog/rackspace/requests/block_storage/create_volume.rb +++ b/lib/fog/rackspace/requests/block_storage/create_volume.rb @@ -13,6 +13,7 @@ def create_volume(size, options = {}) data['volume']['display_description'] = options[:display_description] unless options[:display_description].nil? data['volume']['volume_type'] = options[:volume_type] unless options[:volume_type].nil? data['volume']['availability_zone'] = options[:availability_zone] unless options[:availability_zone].nil? + data['volume']['snapshot_id'] = options[:snapshot_id] unless options[:snapshot_id].nil? request( :body => Fog::JSON.encode(data), From e1770354c9be10cf863c4f9371d851efc077a462 Mon Sep 17 00:00:00 2001 From: Dave Ungerer Date: Thu, 7 Mar 2013 17:22:37 +0200 Subject: [PATCH 11/14] Update file.rb Clarified documentation --- lib/fog/aws/models/storage/file.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/aws/models/storage/file.rb b/lib/fog/aws/models/storage/file.rb index 1be0cb7f59..8efec8ba3f 100644 --- a/lib/fog/aws/models/storage/file.rb +++ b/lib/fog/aws/models/storage/file.rb @@ -223,7 +223,7 @@ def save(options = {}) # # required attributes: key # - # @param expires [String] number of seconds before url expires + # @param expires [String] number of seconds (since 1970-01-01 00:00) before url expires # @param options [Hash] # @return [String] url # From 2bb490c17640bc1ff17e85d55d2d886a62d10214 Mon Sep 17 00:00:00 2001 From: dJason Date: Thu, 7 Mar 2013 14:49:42 -0700 Subject: [PATCH 12/14] Add Vcloud support back to Fog::Compute Vcloud does not work with the new cleanup code for generic provider compute support. Would return: NameError: uninitialized constant Fog::Compute::Vcloud from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/fog-1.10.0/lib/fog/compute.rb:41:in `const_get' from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/fog-1.10.0/lib/fog/compute.rb:41:in `new' --- lib/fog/compute.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/fog/compute.rb b/lib/fog/compute.rb index 4243d96da9..a8e27e93b2 100644 --- a/lib/fog/compute.rb +++ b/lib/fog/compute.rb @@ -35,6 +35,9 @@ def self.new(attributes) when :stormondemand require 'fog/storm_on_demand/compute' Fog::Compute::StormOnDemand.new(attributes) + when :vcloud + require 'fog/vcloud/compute' + Fog::Vcloud::Compute.new(attributes) else if self.providers.include?(provider) require "fog/#{provider}/compute" From 8c56814d508253319679c3de4dd940f277afead3 Mon Sep 17 00:00:00 2001 From: Chirag Jog Date: Fri, 8 Mar 2013 21:28:08 +0530 Subject: [PATCH 13/14] Minor fix: Ensure to send a valid Content-Type --- lib/fog/vcloud/requests/compute/configure_vm_network.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/vcloud/requests/compute/configure_vm_network.rb b/lib/fog/vcloud/requests/compute/configure_vm_network.rb index e51e5b2c23..8d657c043e 100644 --- a/lib/fog/vcloud/requests/compute/configure_vm_network.rb +++ b/lib/fog/vcloud/requests/compute/configure_vm_network.rb @@ -23,7 +23,7 @@ def configure_vm_network(network_info) request( :body => body, :expects => 202, - :headers => {'Content-Type' => network_info[:"vcloud_type"] }, + :headers => {'Content-Type' => network_info[:"type"] }, :method => 'PUT', :uri => "#{edit_uri}", :parse => true From 269e4e7ebac6b524bd505fca9dc12ff941ff4b32 Mon Sep 17 00:00:00 2001 From: Chirag Jog Date: Fri, 8 Mar 2013 21:31:31 +0530 Subject: [PATCH 14/14] Check if a template requires a password or not --- lib/fog/vcloud/models/compute/catalog_item.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/fog/vcloud/models/compute/catalog_item.rb b/lib/fog/vcloud/models/compute/catalog_item.rb index a1b2369939..da0fb0935a 100644 --- a/lib/fog/vcloud/models/compute/catalog_item.rb +++ b/lib/fog/vcloud/models/compute/catalog_item.rb @@ -23,6 +23,14 @@ def customization_options end end + def password_enabled? + load_unless_loaded! + customization_options = service.get_vapp_template(self.entity[:href]).body[:Children][:Vm][:GuestCustomizationSection] + return false if customization_options[:AdminPasswordEnabled] == "false" + return true if customization_options[:AdminPasswordEnabled] == "true" \ + and customization_options[:AdminPasswordAuto] == "false" \ + and ( options[:password].nil? or options[:password].empty? ) + end end end end