Class: RbVmomi::VIM

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

Overview

A connection to one vSphere SDK endpoint.

See Also:

Defined Under Namespace

Classes: ComputeResource, Datacenter, Datastore, DynamicTypeMgrAllTypeInfo, DynamicTypeMgrDataTypeInfo, DynamicTypeMgrManagedTypeInfo, EsxcliCommand, EsxcliNamespace, Folder, HostSystem, ManagedEntity, ManagedObject, ObjectContent, ObjectUpdate, OvfManager, PerfCounterInfo, PerformanceManager, PropertyCollector, ReflectManagedMethodExecuter, ResourcePool, ServiceInstance, Task, VirtualMachine

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.connect(opts) ⇒ Object

Connect to a vSphere SDK endpoint

Parameters:

  • opts (Hash)

    The options hash.

Options Hash (opts):

  • :host (String)

    Host to connect to.

  • :port (Numeric) — default: 443

    Port to connect to.

  • :ssl (Boolean) — default: true

    Whether to use SSL.

  • :insecure (Boolean) — default: false

    If true, ignore SSL certificate errors.

  • :cookie (String)

    If set, use cookie to connect instead of user/password

  • :user (String) — default: root

    Username.

  • :password (String)

    Password.

  • :path (String) — default: /sdk

    SDK endpoint path.

  • :debug (Boolean) — default: false

    If true, print SOAP traffic to stderr.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/rbvmomi/vim.rb', line 28

def self.connect opts
  fail unless opts.is_a? Hash
  fail "host option required" unless opts[:host]
  opts[:cookie] ||= nil
  opts[:user] ||= (WIN32 ? ENV['USERNAME'].dup : 'root')
  opts[:password] ||= ''
  opts[:ssl] = true unless opts.member? :ssl or opts[:"no-ssl"]
  opts[:insecure] ||= false
  opts[:port] ||= (opts[:ssl] ? 443 : 80)
  opts[:path] ||= '/sdk'
  opts[:ns] ||= 'urn:vim25'
  rev_given = opts[:rev] != nil
  opts[:rev] = '6.0' unless rev_given
  opts[:debug] = (!ENV['RBVMOMI_DEBUG'].empty? rescue false) unless opts.member? :debug

  new(opts).tap do |vim|
    unless opts[:cookie]
      if WIN32 && opts[:password] == ''
          # Attempt login by SSPI if no password specified on Windows
          negotiation = Win32::SSPI::NegotiateAuth.new opts[:user], ENV['USERDOMAIN'].dup
          begin
            vim.serviceContent.sessionManager.LoginBySSPI :base64Token => negotiation.get_initial_token
          rescue RbVmomi::Fault => fault
            if !fault.fault.is_a?(RbVmomi::VIM::SSPIChallenge)
              raise
            else
              vim.serviceContent.sessionManager.LoginBySSPI :base64Token => negotiation.complete_authentication(fault.base64Token)
            end
          end
      else
          vim.serviceContent.sessionManager.Login :userName => opts[:user], :password => opts[:password]
      end
    end
    unless rev_given
      rev = vim.serviceContent.about.apiVersion
      vim.rev = [rev, '6.0'].min
    end
  end
end

Instance Method Details

#closeObject



68
69
70
71
72
# File 'lib/rbvmomi/vim.rb', line 68

def close
  VIM::SessionManager(self, 'SessionManager').Logout rescue RbVmomi::Fault
  self.cookie = nil
  super
end

#get_log_keys(host = nil) ⇒ Object



134
135
136
137
138
139
140
141
# File 'lib/rbvmomi/vim.rb', line 134

def get_log_keys host=nil
  diagMgr = self.serviceContent.diagnosticManager
  keys = []
  diagMgr.QueryDescriptions(:host => host).each do |desc|
    keys << "#{desc.key}"
  end
  keys
end

#get_log_lines(logKey, lines = 5, start = nil, host = nil) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/rbvmomi/vim.rb', line 118

def get_log_lines logKey, lines=5, start=nil, host=nil
  diagMgr = self.serviceContent.diagnosticManager
  if !start
    log = diagMgr.BrowseDiagnosticLog(:host => host, :key => logKey, :start => 999999999)
    lineEnd = log.lineEnd
    start = lineEnd - lines
  end
  start = start < 0 ? 0 : start
  log = diagMgr.BrowseDiagnosticLog(:host => host, :key => logKey, :start => start)
  if log.lineText.size > 0
    [log.lineText.slice(-lines, log.lineText.size), log.lineEnd]
  else
    [log.lineText, log.lineEnd]
  end
end

#instanceUuidObject



114
115
116
# File 'lib/rbvmomi/vim.rb', line 114

def instanceUuid
  serviceContent.about.instanceUuid
end

#propertyCollectorObject

Alias to serviceContent.propertyCollector



100
101
102
# File 'lib/rbvmomi/vim.rb', line 100

def propertyCollector
  serviceContent.propertyCollector
end

#rev=(x) ⇒ Object



74
75
76
77
# File 'lib/rbvmomi/vim.rb', line 74

def rev= x
  super
  @serviceContent = nil
end

#rootFolderObject Also known as: root

Alias to serviceContent.rootFolder



93
94
95
# File 'lib/rbvmomi/vim.rb', line 93

def rootFolder
  serviceContent.rootFolder
end

#searchIndexObject

Alias to serviceContent.searchIndex



105
106
107
# File 'lib/rbvmomi/vim.rb', line 105

def searchIndex
  serviceContent.searchIndex
end

#serviceContentObject

Alias to serviceInstance.RetrieveServiceContent



88
89
90
# File 'lib/rbvmomi/vim.rb', line 88

def serviceContent
  @serviceContent ||= serviceInstance.RetrieveServiceContent
end

#serviceInstanceObject

Return the ServiceInstance

The ServiceInstance is the root of the vSphere inventory.



83
84
85
# File 'lib/rbvmomi/vim.rb', line 83

def serviceInstance
  VIM::ServiceInstance self, 'ServiceInstance'
end