Skip to content

Instantly share code, notes, and snippets.

@erik-megarad
Created December 23, 2013 16:51
Show Gist options
  • Save erik-megarad/8100461 to your computer and use it in GitHub Desktop.
Save erik-megarad/8100461 to your computer and use it in GitHub Desktop.
[5] pry(#<RbVmomi::NewDeserializer>)> e
=> #<RuntimeError: unknown VMODL type AnyType>
[6] pry(#<RbVmomi::NewDeserializer>)> e.backtrace
=> ["/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/type_loader.rb:103:in `make_type'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/type_loader.rb:65:in `block in get'",
"/Users/epeterson/.rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/type_loader.rb:63:in `get'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:79:in `deserialize'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:121:in `block in traverse_data'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:103:in `each'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:103:in `traverse_data'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:86:in `deserialize'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:116:in `block in traverse_data'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:103:in `each'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:103:in `traverse_data'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb:86:in `deserialize'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/connection.rb:68:in `block in parse_response'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/connection.rb:68:in `map'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/connection.rb:68:in `parse_response'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/connection.rb:90:in `call'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/basic_types.rb:205:in `_call'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/basic_types.rb:74:in `block (2 levels) in init'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/basic_types.rb:183:in `_get_property'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/basic_types.rb:35:in `block (2 levels) in init'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-cavalry-1.1/lib/cavalry/vmware_box.rb:75:in `virtual_machines'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-cavalry-1.1/lib/cavalry/vmware_box.rb:130:in `virtual_machine'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-cavalry-1.1/lib/cavalry/vmware_box.rb:106:in `snapshots'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-cavalry-1.1/lib/cavalry/vmware_box.rb:99:in `revert_to_snapshot'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-cavalry-1.1/lib/cavalry/vmware_box.rb:93:in `destroy'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-smokey-1.1.0/lib/tasks.rb:45:in `destroy'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-smokey-1.1.0/lib/tasks.rb:31:in `smoketest'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/thor-0.18.1/lib/thor/command.rb:27:in `run'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/thor-0.18.1/lib/thor/invocation.rb:120:in `invoke_command'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/thor-0.18.1/lib/thor.rb:363:in `dispatch'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/thor-0.18.1/lib/thor/base.rb:439:in `start'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-smokey-1.1.0/lib/tasks.rb:138:in `<top (required)>'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-smokey-1.1.0/bin/smokey:3:in `require_relative'",
"/Users/epeterson/.gem/ruby/1.9.3/gems/damballa-smokey-1.1.0/bin/smokey:3:in `<top (required)>'",
"/Users/epeterson/.gem/ruby/1.9.3/bin/smokey:23:in `load'",
"/Users/epeterson/.gem/ruby/1.9.3/bin/smokey:23:in `<main>'"]
[7] pry(#<RbVmomi::NewDeserializer>)> type
=> "anyType"
[8] pry(#<RbVmomi::NewDeserializer>)> node
=> #(Element:0x3fcbb988d76c {
name = "val",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb992d3d4 {
name = "type",
namespace = #(Namespace:0x3fcbb98e3c20 {
prefix = "xsi",
href = "http://www.w3.org/2001/XMLSchema-instance"
}),
value = "ServiceContent"
})],
children = [
#(Element:0x3fcbb98f88dc {
name = "rootFolder",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb98f79b4 { name = "type", value = "Folder" })],
children = [ #(Text "group-d1")]
}),
#(Element:0x3fcbb9cb2734 {
name = "propertyCollector",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9c5b63c { name = "type", value = "PropertyCollector" })],
children = [ #(Text "propertyCollector")]
}),
#(Element:0x3fcbb9c1cb08 {
name = "viewManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9c1f380 { name = "type", value = "ViewManager" })],
children = [ #(Text "ViewManager")]
}),
#(Element:0x3fcbb9c6ba14 {
name = "about",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [
#(Element:0x3fcbb9c3499c {
name = "name",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "VMware vCenter Server")]
}),
#(Element:0x3fcbb9d0d1d4 {
name = "fullName",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "VMware vCenter Server 4.1.0 build-925676")]
}),
#(Element:0x3fcbb9d13304 {
name = "vendor",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "VMware, Inc.")]
}),
#(Element:0x3fcbb9d1c33c {
name = "version",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "4.1.0")]
}),
#(Element:0x3fcbb9d21508 {
name = "build",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "925676")]
}),
#(Element:0x3fcbb9d301e8 {
name = "localeVersion",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "INTL")]
}),
#(Element:0x3fcbb9d380f0 {
name = "localeBuild",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "000")]
}),
#(Element:0x3fcbb9d3d9c4 {
name = "osType",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "win32-x86")]
}),
#(Element:0x3fcbb9d47028 {
name = "productLineId",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "vpx")]
}),
#(Element:0x3fcbb9d4f0ac {
name = "apiType",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "VirtualCenter")]
}),
#(Element:0x3fcbb9d4f930 {
name = "apiVersion",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "4.1")]
}),
#(Element:0x3fcbb9d592f0 {
name = "instanceUuid",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "88E32B02-91D8-43C7-887A-D991329FBAC0")]
}),
#(Element:0x3fcbb9d5d274 {
name = "licenseProductName",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "VMware VirtualCenter Server")]
}),
#(Element:0x3fcbb9d615cc {
name = "licenseProductVersion",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
children = [ #(Text "4.0")]
})]
}),
#(Element:0x3fcbb9d6db60 {
name = "setting",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9d702c0 { name = "type", value = "OptionManager" })],
children = [ #(Text "VpxSettings")]
}),
#(Element:0x3fcbb9d8236c {
name = "userDirectory",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9d83aa0 { name = "type", value = "UserDirectory" })],
children = [ #(Text "UserDirectory")]
}),
#(Element:0x3fcbb9d90110 {
name = "sessionManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9d91948 { name = "type", value = "SessionManager" })],
children = [ #(Text "SessionManager")]
}),
#(Element:0x3fcbb9d9e56c {
name = "authorizationManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9da02b8 {
name = "type",
value = "AuthorizationManager"
})],
children = [ #(Text "AuthorizationManager")]
}),
#(Element:0x3fcbb9dae174 {
name = "perfManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9dad42c {
name = "type",
value = "PerformanceManager"
})],
children = [ #(Text "PerfMgr")]
}),
#(Element:0x3fcbb9dba708 {
name = "scheduledTaskManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9dbcb84 {
name = "type",
value = "ScheduledTaskManager"
})],
children = [ #(Text "ScheduledTaskManager")]
}),
#(Element:0x3fcbb9dc8650 {
name = "alarmManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9dca6a8 { name = "type", value = "AlarmManager" })],
children = [ #(Text "AlarmManager")]
}),
#(Element:0x3fcbb9dd60fc {
name = "eventManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9dd8d70 { name = "type", value = "EventManager" })],
children = [ #(Text "EventManager")]
}),
#(Element:0x3fcbb9cf28e8 {
name = "taskManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9cf5a20 { name = "type", value = "TaskManager" })],
children = [ #(Text "TaskManager")]
}),
#(Element:0x3fcbb9cfafac {
name = "extensionManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9cfdc98 { name = "type", value = "ExtensionManager" })],
children = [ #(Text "ExtensionManager")]
}),
#(Element:0x3fcbb9c95ddc {
name = "customizationSpecManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9cb603c {
name = "type",
value = "CustomizationSpecManager"
})],
children = [ #(Text "CustomizationSpecManager")]
}),
#(Element:0x3fcbb9cc7da0 {
name = "customFieldsManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9ccb39c {
name = "type",
value = "CustomFieldsManager"
})],
children = [ #(Text "CustomFieldsManager")]
}),
#(Element:0x3fcbb9cd2354 {
name = "diagnosticManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9cd55cc { name = "type", value = "DiagnosticManager" })],
children = [ #(Text "DiagMgr")]
}),
#(Element:0x3fcbb9c4b458 {
name = "licenseManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbba4e5c30 { name = "type", value = "LicenseManager" })],
children = [ #(Text "LicenseManager")]
}),
#(Element:0x3fcbba5572cc {
name = "searchIndex",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbba55682c { name = "type", value = "SearchIndex" })],
children = [ #(Text "SearchIndex")]
}),
#(Element:0x3fcbb9854124 {
name = "fileManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9856a28 { name = "type", value = "FileManager" })],
children = [ #(Text "FileManager")]
}),
#(Element:0x3fcbb98b5aa0 {
name = "virtualDiskManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb98b4e5c {
name = "type",
value = "VirtualDiskManager"
})],
children = [ #(Text "VirtualDiskManager")]
}),
#(Element:0x3fcbb988b638 {
name = "snmpSystem",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb988dd48 { name = "type", value = "HostSnmpSystem" })],
children = [ #(Text "SnmpSystem")]
}),
#(Element:0x3fcbb98eda04 {
name = "vmProvisioningChecker",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb98ec960 {
name = "type",
value = "VirtualMachineProvisioningChecker"
})],
children = [ #(Text "ProvChecker")]
}),
#(Element:0x3fcbb9900dac {
name = "vmCompatibilityChecker",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9900474 {
name = "type",
value = "VirtualMachineCompatibilityChecker"
})],
children = [ #(Text "CompatChecker")]
}),
#(Element:0x3fcbb99067e8 {
name = "ovfManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb9906040 { name = "type", value = "OvfManager" })],
children = [ #(Text "OvfManager")]
}),
#(Element:0x3fcbb983ec70 {
name = "ipPoolManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb983e504 { name = "type", value = "IpPoolManager" })],
children = [ #(Text "IpPoolManager")]
}),
#(Element:0x3fcbb98a3e2c {
name = "dvSwitchManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb98a31fc {
name = "type",
value = "DistributedVirtualSwitchManager"
})],
children = [ #(Text "DVSManager")]
}),
#(Element:0x3fcbb98a9034 {
name = "hostProfileManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb98a83b4 {
name = "type",
value = "HostProfileManager"
})],
children = [ #(Text "HostProfileManager")]
}),
#(Element:0x3fcbb99a562c {
name = "clusterProfileManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb99a8c78 {
name = "type",
value = "ClusterProfileManager"
})],
children = [ #(Text "ClusterProfileManager")]
}),
#(Element:0x3fcbb99ae894 {
name = "complianceManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb99adfc0 {
name = "type",
value = "ProfileComplianceManager"
})],
children = [ #(Text "MoComplianceManager")]
}),
#(Element:0x3fcbb99b4820 {
name = "localizationManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb99b3d08 {
name = "type",
value = "LocalizationManager"
})],
children = [ #(Text "LocalizationManager")]
}),
#(Element:0x3fcbb998fa5c {
name = "storageResourceManager",
namespace = #(Namespace:0x3fcbb992d500 { href = "urn:vim25" }),
attributes = [
#(Attr:0x3fcbb998f00c {
name = "type",
value = "StorageResourceManager"
})],
children = [ #(Text "StorageResourceManager")]
})]
})
[11] pry(#<RbVmomi::NewDeserializer>)> whereami
From: /Users/epeterson/.gem/ruby/1.9.3/gems/rbvmomi-1.8.0/lib/rbvmomi/deserialization.rb @ line 82 RbVmomi::NewDeserializer#deserialize:
77:
78: begin
79: klass = @loader.get(type) or fail "no such type '#{type}'"
80: rescue Exception => e
81: require 'pry'
=> 82: binding.pry
83: end
84: case klass.kind
85: when :data
86: traverse_data node, klass
87: when :enum
@cdickmann
Copy link

Weird!

The method starts with:
type_attr = node['type']
type = type_attr if type_attr

So based on the output, I would have expected node['type'] to be set to "ServiceContent". But instead, it appears to be nil, so anyType is not overwritten with anything and hence the issue later down in the method. Can you confirm that? Which version of Nokogiri are you running?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment