1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-25 02:50:08 +03:00

F #4913: Add vi_client resource pool confinement using host's VCENTER_RESOURCE_POOL

This commit is contained in:
mcabrerizo 2017-03-31 20:12:03 +02:00
parent c6e5737701
commit fc41d302f7

View File

@ -7,17 +7,59 @@ class VIClient
attr_accessor :rp
def initialize(opts)
opts = {:insecure => true}.merge(opts)
@vim = RbVmomi::VIM.connect(opts)
rp_ref = opts.delete(:rp)
@rp = RbVmomi::VIM::ResourcePool(@vim, rp_ref) if rp_ref
# Get ccr
ccr_ref = opts.delete(:ccr)
ccr = RbVmomi::VIM::ClusterComputeResource.new(@vim, ccr_ref)
#Get ref for rp
if ccr
rp = opts.delete(:rp)
rp_list = get_resource_pool_list(ccr)
rp_ref = rp_list.select { |r| r[:name] == rp }.first._ref rescue nil
@rp = RbVmomi::VIM::ResourcePool(@vim, rp_ref) if rp_ref
end
end
def rp_confined?
!!@rp
end
def get_resource_pool_list(ccr, rp = nil, parent_prefix = "", rp_array = [])
current_rp = ""
if rp.nil?
rp = ccr.resourcePool
else
if !parent_prefix.empty?
current_rp << parent_prefix
current_rp << "/"
end
current_rp << rp.name
end
if rp.resourcePool.size == 0
rp_info = {}
rp_info[:name] = current_rp
rp_info[:ref] = rp._ref
rp_array << rp_info
else
rp.resourcePool.each do |child_rp|
get_resource_pool_list(ccr, child_rp, current_rp, rp_array)
end
rp_info = {}
rp_info[:name] = current_rp
rp_info[:ref] = rp._ref
rp_array << rp_info if !current_rp.empty?
end
rp_array
end
def close_connection
@vim.close
end
@ -66,7 +108,8 @@ class VIClient
connection = {
:host => host["TEMPLATE/VCENTER_HOST"],
:user => host["TEMPLATE/VCENTER_USER"],
:rp => host["TEMPLATE/VCENTER_RP_REF"],
:rp => host["TEMPLATE/VCENTER_RESOURCE_POOL"],
:ccr => host["TEMPLATE/VCENTER_CCR_REF"],
:password => password
}