class RbVmomi::VIM::Datastore

@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.

Constants

CURLBIN

Public Instance Methods

download(remote_path, local_path) click to toggle source

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]

# File lib/rbvmomi/vim/Datastore.rb, line 31
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)
  raise 'download failed' unless $?.success?
end
exists?(path) click to toggle source

Check whether a file exists on this datastore. @param path [String] Path on the datastore.

# File lib/rbvmomi/vim/Datastore.rb, line 13
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
    raise resp.inspect
  end
end
upload(remote_path, local_path) click to toggle source

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]

# File lib/rbvmomi/vim/Datastore.rb, line 46
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)
  raise 'upload failed' unless $?.success?
end

Private Instance Methods

datacenter() click to toggle source
# File lib/rbvmomi/vim/Datastore.rb, line 59
def datacenter
  return @datacenter if @datacenter

  x = parent
  while not x.is_a? RbVmomi::VIM::Datacenter
    x = x.parent
  end
  raise unless x.is_a? RbVmomi::VIM::Datacenter

  @datacenter = x
end
mkuripath(path) click to toggle source
# File lib/rbvmomi/vim/Datastore.rb, line 71
def mkuripath path
  datacenter_path_str = datacenter.path[1..-1].map{ |elem| elem[1] }.join('/')
  "/folder/#{URI.encode_www_form_component path}?dcPath=#{URI.encode_www_form_component datacenter_path_str }&dsName=#{URI.encode_www_form_component name}"
end