Module: RbVmomi::VIM
- Defined in:
- lib/rbvmomi/types.rb,
lib/rbvmomi/extensions.rb
Defined Under Namespace
Classes: Base, ComputeResource, DataObject, Datacenter, Datastore, Enum, Folder, LocalizedMethodFault, ManagedEntity, ManagedObject, ManagedObjectReference, MethodFault, MethodName, ObjectContent, ObjectWithMethods, ObjectWithProperties, OvfManager, PropertyPath, RuntimeFault, ServiceInstance, Task, TypeName, VirtualMachine
Constant Summary
collapse
- BUILTIN_TYPES =
%w(ManagedObject TypeName PropertyPath ManagedObjectReference MethodName MethodFault LocalizedMethodFault)
Class Method Summary
collapse
Class Method Details
.const_missing(sym) ⇒ Object
42
43
44
45
46
47
48
|
# File 'lib/rbvmomi/types.rb', line 42
def self.const_missing sym
if @typenames.member? sym.to_s
load_type sym
else
super
end
end
|
.has_type?(name) ⇒ Boolean
30
31
32
|
# File 'lib/rbvmomi/types.rb', line 30
def self.has_type? name
@typenames.member? name.to_s
end
|
.load(fn) ⇒ Object
20
21
22
23
24
25
26
27
28
|
# File 'lib/rbvmomi/types.rb', line 20
def self.load fn
@db = HDB.new
if !@db.open(fn, HDB::OREADER | HDB::ONOLCK)
raise "VMODL db open error: #{@db.errmsg(@db.ecode)}"
end
@vmodl = Hash.new { |h,k| if e = @db[k] then h[k] = Marshal.load(e) end }
@typenames = Marshal.load(@db['_typenames']) + BUILTIN_TYPES
Object.constants.select { |x| @typenames.member? x.to_s }.each { |x| load_type x }
end
|
.load_type(sym) ⇒ Object
58
59
60
|
# File 'lib/rbvmomi/types.rb', line 58
def self.load_type sym
const_set sym, make_type(sym)
end
|
.make_data_type(name, desc) ⇒ Object
73
74
75
76
77
78
|
# File 'lib/rbvmomi/types.rb', line 73
def self.make_data_type name, desc
superclass = const_get(desc['wsdl_base'].to_sym)
Class.new(superclass).tap do |klass|
klass.initialize name, desc['props']
end
end
|
.make_enum_type(name, desc) ⇒ Object
87
88
89
90
91
|
# File 'lib/rbvmomi/types.rb', line 87
def self.make_enum_type name, desc
Class.new(Enum).tap do |klass|
klass.initialize name, desc['values']
end
end
|
.make_managed_type(name, desc) ⇒ Object
80
81
82
83
84
85
|
# File 'lib/rbvmomi/types.rb', line 80
def self.make_managed_type name, desc
superclass = const_get(desc['wsdl_base'].to_sym)
Class.new(superclass).tap do |klass|
klass.initialize name, desc['props'], desc['methods']
end
end
|
.make_type(name) ⇒ Object
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/rbvmomi/types.rb', line 62
def self.make_type name
name = name.to_s
desc = @vmodl[name] or fail "unknown VIM type #{name}"
case desc['kind']
when 'data' then make_data_type name, desc
when 'managed' then make_managed_type name, desc
when 'enum' then make_enum_type name, desc
else fail desc.inspect
end
end
|
.method_missing(sym, *a) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/rbvmomi/types.rb', line 50
def self.method_missing sym, *a
if @typenames.member? sym.to_s
const_get(sym).new *a
else
super
end
end
|
.type(name) ⇒ Object
34
35
36
37
38
39
40
|
# File 'lib/rbvmomi/types.rb', line 34
def self.type name
if has_type? name
const_get(name.to_sym)
else
fail "no such type #{name.inspect}"
end
end
|