Class: RbVmomi::VIM::Datastore

Inherits:
Object
  • Object
show all
Defined in:
lib/rbvmomi/vim/Datastore.rb

Overview

TODO:

Use an HTTP library instead of executing curl.

Note:

download and upload require curl. If curl is not in your PATH then set the CURL environment variable to point to it.

Constant Summary collapse

CURLBIN =
ENV['CURL'] || 'curl'

Instance Method Summary collapse

Instance Method Details

#download(remote_path, local_path) ⇒ void

This method returns an undefined value.

Download a file from this datastore.

Parameters:

  • remote_path (String)

    Source path on the datastore.

  • local_path (String)

    Destination path on the local machine.



31
32
33
34
35
36
37
38
39
40
# 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) ⇒ Boolean

Check whether a file exists on this datastore.

Parameters:

  • path (String)

    Path on the datastore.

Returns:

  • (Boolean)


13
14
15
16
17
18
19
20
21
22
23
24
25
# 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) ⇒ void

This method returns an undefined value.

Upload a file to this datastore.

Parameters:

  • remote_path (String)

    Destination path on the datastore.

  • local_path (String)

    Source path on the local machine.



46
47
48
49
50
51
52
53
54
55
# 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