File: vim.rb

package info (click to toggle)
ruby-rbvmomi 1.8.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,756 kB
  • sloc: ruby: 5,590; sh: 36; makefile: 7
file content (134 lines) | stat: -rw-r--r-- 4,126 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# Copyright (c) 2011 VMware, Inc.  All Rights Reserved.
require 'rbvmomi'

module RbVmomi

# A connection to one vSphere SDK endpoint.
# @see #serviceInstance
class VIM < Connection
  # Connect to a vSphere SDK endpoint
  #
  # @param [Hash] opts The options hash.
  # @option opts [String]  :host Host to connect to.
  # @option opts [Numeric] :port (443) Port to connect to.
  # @option opts [Boolean] :ssl (true) Whether to use SSL.
  # @option opts [Boolean] :insecure (false) If true, ignore SSL certificate errors.
  # @option opts [String]  :cookie If set, use cookie to connect instead of user/password
  # @option opts [String]  :user (root) Username.
  # @option opts [String]  :password Password.
  # @option opts [String]  :path (/sdk) SDK endpoint path.
  # @option opts [Boolean] :debug (false) If true, print SOAP traffic to stderr.
  def self.connect opts
    fail unless opts.is_a? Hash
    fail "host option required" unless opts[:host]
    opts[:cookie] ||= nil
    opts[:user] ||= '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] = '4.0' unless rev_given
    opts[:debug] = (!ENV['RBVMOMI_DEBUG'].empty? rescue false) unless opts.member? :debug

    new(opts).tap do |vim|
      unless opts[:cookie]
        vim.serviceContent.sessionManager.Login :userName => opts[:user], :password => opts[:password]
      end
      unless rev_given
        rev = vim.serviceContent.about.apiVersion
        vim.rev = [rev, '5.5'].min
      end
    end
  end

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

  def rev= x
    super
    @serviceContent = nil
  end

  # Return the ServiceInstance
  #
  # The ServiceInstance is the root of the vSphere inventory.
  # @see http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.ServiceInstance.html
  def serviceInstance
    VIM::ServiceInstance self, 'ServiceInstance'
  end

  # Alias to serviceInstance.RetrieveServiceContent
  def serviceContent
    @serviceContent ||= serviceInstance.RetrieveServiceContent
  end

  # Alias to serviceContent.rootFolder
  def rootFolder
    serviceContent.rootFolder
  end

  alias root rootFolder

  # Alias to serviceContent.propertyCollector
  def propertyCollector
    serviceContent.propertyCollector
  end

  # Alias to serviceContent.searchIndex
  def searchIndex
    serviceContent.searchIndex
  end

  # @private
  def pretty_print pp
    pp.text "VIM(#{@opts[:host]})"
  end

  def instanceUuid
    serviceContent.about.instanceUuid
  end

  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

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

  add_extension_dir File.join(File.dirname(__FILE__), "vim")
  (ENV['RBVMOMI_VIM_EXTENSION_PATH']||'').split(':').each { |dir| add_extension_dir dir }

  if File.exist?("/usr/share/ruby-rbvmomi/vmodl.db")
      load_vmodl(ENV['VMODL'] || "/usr/share/ruby-rbvmomi/vmodl.db")
  elsif File.exist?(File.join(File.dirname(__FILE__), "../../../../share/ruby-rbvmomi/vmodl.db"))
      load_vmodl(ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../../../share/ruby-rbvmomi/vmodl.db"))
  else
      load_vmodl(ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../vmodl.db"))
  end
end

end