Skip to content

Commit

Permalink
convert between rbvmomi and vim types
Browse files Browse the repository at this point in the history
  • Loading branch information
agrare committed Jul 13, 2021
1 parent 95c690d commit a90cccc
Showing 1 changed file with 46 additions and 7 deletions.
53 changes: 46 additions & 7 deletions lib/VMwareWebService/VimService.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def initialize(uri)
:rev => "6.5"
)

@serviceInstanceMor = vim.serviceInstance
@serviceInstanceMor = rbvmomi_to_vim_types(vim.serviceInstance)
@session_cookie = nil

@sic = retrieveServiceContent
Expand All @@ -37,15 +37,15 @@ def initialize(uri)
end

def acquireCloneTicket(sm)
sm.AcquireCloneTicket
rbvmomi_to_vim_types(vim_to_rbvmomi_types(sm).AcquireCloneTicket)
end

def acquireMksTicket(mor)
mor.AcquireMksTicket
rbvmomi_to_vim_types(vim_to_rbvmomi_types(mor).AcquireMksTicket)
end

def acquireTicket(mor, ticketType)
mor.AcquireTicket(:ticketType => ticketType)
rbvmomi_to_vim_types(vim_to_rbvmomi_types(mor).AcquireTicket(:ticketType => ticketType))
end

def addHost_Task(clustMor, spec, asConnected, resourcePool = nil, license = nil)
Expand Down Expand Up @@ -434,11 +434,13 @@ def getCustomizationSpec(csmMor, name)
end

def login(sessionManager, username, password)
sessionManager.Login(:userName => username, :password => password)
session_manager = vim_to_rbvmomi_types(sessionManager)
session_manager.Login(:userName => username, :password => password)
end

def logout(sessionManager)
sessionManager.Logout
session_manager = vim_to_rbvmomi_types(sessionManager)
session_manager.Logout
end

def logUserEvent(eventManager, entity, msg)
Expand Down Expand Up @@ -918,7 +920,7 @@ def retrievePropertiesCompat(propCol, specSet, max_objects = nil)
end

def retrieveServiceContent
serviceInstanceMor.RetrieveServiceContent
rbvmomi_to_vim_types(vim.serviceContent)
end

def revertToCurrentSnapshot_Task(vmMor)
Expand Down Expand Up @@ -1196,4 +1198,41 @@ def xmlToCustomizationSpecItem(csmMor, specItemXml)
end
(parse_response(response, 'XmlToCustomizationSpecItemResponse')['returnval'])
end

private

def rbvmomi_to_vim_types(obj)
case obj
when String
obj
when Array
obj.map { |i| rbvmomi_to_vim_types(i) }
when RbVmomi::BasicTypes::ManagedObject
VimString.new(obj._ref, obj.class.wsdl_name, :ManagedObjectReference)
when RbVmomi::BasicTypes::Base
VimHash.new(obj.class.wsdl_name).tap do |vim|
obj.props.each do |key, val|
vim.send("#{key}=", rbvmomi_to_vim_types(val))
end
end
else
raise ArgumentError, "Invalid type #{obj.class}"
end
end

def vim_to_rbvmomi_types(obj)
case obj
when Array
obj.map { |i| vim_to_rbvmomi_types(i) }
when VimString
if obj.xsiType == "ManagedObjectReference"
klass = "RbVmomi::VIM::#{obj.vimType}".constantize
klass.new(vim, obj.to_s)
else
obj.to_s
end
when String
obj
end
end
end

0 comments on commit a90cccc

Please sign in to comment.