From d8a63b8e1beb99de5a605dea47da4bb27738d939 Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Thu, 3 Mar 2016 17:33:14 +0100 Subject: [PATCH] feature #4186: Fix rbvmomi --- .../rbvmomi/lib/rbvmomi/vim/Datacenter.rb | 128 ++---------------- .../gems/rbvmomi/lib/rbvmomi/vim/Datastore.rb | 1 - 2 files changed, 10 insertions(+), 119 deletions(-) diff --git a/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datacenter.rb b/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datacenter.rb index e95b745379..506f44917e 100644 --- a/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datacenter.rb +++ b/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datacenter.rb @@ -1,124 +1,16 @@ -# @note +download+ and +upload+ require +curl+. If +curl+ is not in your +PATH+ -# then set the +CURL+ environment variable to point to it. -# @todo Use an HTTP library instead of executing +curl+. -class RbVmomi::VIM::Datastore - CURLBIN = ENV['CURL'] || "curl" #@private - - # Check whether a file exists on this datastore. - # @param path [String] Path on the datastore. - def exists? path - req = Net::HTTP::Head.new mkuripath(path) - req.initialize_http_header 'cookie' => _connection.cookie - resp = _connection.http.request req - case resp - when Net::HTTPSuccess - true - when Net::HTTPNotFound - false - else - fail resp.inspect - end +class RbVmomi::VIM::Datacenter + # Traverse the given inventory +path+ to find a ComputeResource. + def find_compute_resource path + hostFolder.traverse path, RbVmomi::VIM::ComputeResource end - # Download a file from this datastore. - # @param remote_path [String] Source path on the datastore. - # @param local_path [String] Destination path on the local machine. - # @return [void] - def download remote_path, local_path - url = "http#{_connection.http.use_ssl? ? 's' : ''}://#{_connection.http.address}:#{_connection.http.port}#{mkuripath(remote_path)}" - - pid = spawn CURLBIN, "-k", '--noproxy', '*', '-f', - "-o", local_path, - "-b", _connection.cookie, - url, - :out => '/dev/null' - Process.waitpid(pid, 0) - fail "download failed" unless $?.success? + # Find the Datastore with the given +name+. + def find_datastore name + datastore.find { |x| x.name == name } end - # Download a file from this datastore. - # @param remote_path [String] Source path on the datastore. - # @param local_path [String] Destination path on the local machine. - # @return [void] - def download_to_stdout remote_path - url = "http#{_connection.http.use_ssl? ? 's' : ''}://#{_connection.http.address}:#{_connection.http.port}#{mkuripath(remote_path)}" - - pid = spawn CURLBIN, "-k", '--noproxy', '*', '-f', - "-b", _connection.cookie, - url - - - Process.waitpid(pid, 0) - fail "download to stdout failed" unless $?.success? - end - - def is_descriptor? remote_path - url = "http#{_connection.http.use_ssl? ? 's' : ''}://#{_connection.http.address}:#{_connection.http.port}#{mkuripath(remote_path)}" - - rout, wout = IO.pipe - - pid = spawn CURLBIN, "-I", "-k", '--noproxy', '*', '-f', - "-b", _connection.cookie, - url, - :out => wout, - :err => '/dev/null' - - Process.waitpid(pid, 0) - fail "read image header failed" unless $?.success? - - wout.close - size = rout.readlines.select{|l| l.start_with?("Content-Length")}[0].sub("Content-Length: ","") - rout.close - size.chomp.to_i < 4096 # If <4k, then is a descriptor - end - - def get_text_file remote_path - url = "http#{_connection.http.use_ssl? ? 's' : ''}://#{_connection.http.address}:#{_connection.http.port}#{mkuripath(remote_path)}" - - rout, wout = IO.pipe - pid = spawn CURLBIN, "-k", '--noproxy', '*', '-f', - "-b", _connection.cookie, - url, - :out => wout, - :err => '/dev/null' - - Process.waitpid(pid, 0) - fail "get text file failed" unless $?.success? - - wout.close - output = rout.readlines - rout.close - return output - end - - # Upload a file to this datastore. - # @param remote_path [String] Destination path on the datastore. - # @param local_path [String] Source path on the local machine. - # @return [void] - def upload remote_path, local_path - url = "http#{_connection.http.use_ssl? ? 's' : ''}://#{_connection.http.address}:#{_connection.http.port}#{mkuripath(remote_path)}" - pid = spawn CURLBIN, "-k", '--noproxy', '*', '-f', - "-T", local_path, - "-b", _connection.cookie, - url, - :out => '/dev/null' - Process.waitpid(pid, 0) - fail "upload failed" unless $?.success? - end - - private - - def datacenter - return @datacenter if @datacenter - x = parent - while not x.is_a? RbVmomi::VIM::Datacenter - x = x.parent - end - fail unless x.is_a? RbVmomi::VIM::Datacenter - @datacenter = x - end - - def mkuripath path - "/folder/#{URI.escape path}?dcPath=#{URI.escape datacenter.name}&dsName=#{URI.escape name}" + # Traverse the given inventory +path+ to find a VirtualMachine. + def find_vm path + vmFolder.traverse path, RbVmomi::VIM::VirtualMachine end end diff --git a/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datastore.rb b/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datastore.rb index b4e47976ec..12770caec0 100644 --- a/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datastore.rb +++ b/share/vendor/ruby/gems/rbvmomi/lib/rbvmomi/vim/Datastore.rb @@ -26,7 +26,6 @@ class RbVmomi::VIM::Datastore # @return [void] def download remote_path, local_path url = "http#{_connection.http.use_ssl? ? 's' : ''}://#{_connection.http.address}:#{_connection.http.port}#{mkuripath(remote_path)}" -puts url pid = spawn CURLBIN, "-k", '--noproxy', '*', '-f', "-o", local_path, "-b", _connection.cookie,