forked from vmware-archive/rbvmomi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vim.rb
97 lines (81 loc) · 2.8 KB
/
vim.rb
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
# 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] :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[: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
Excon.defaults[:ssl_verify_peer] = false if opts[:insecure]
new(opts).tap do |vim|
vim.serviceContent.sessionManager.Login :userName => opts[:user], :password => opts[:password]
unless rev_given
rev = vim.serviceContent.about.apiVersion
vim.rev = [rev, '5.0'].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
add_extension_dir File.join(File.dirname(__FILE__), "vim")
(ENV['RBVMOMI_VIM_EXTENSION_PATH']||'').split(':').each { |dir| add_extension_dir dir }
load_vmodl(ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../vmodl.db"))
end
end