Merge pull request #220 from puppetlabs/refactor-get_cluster_host_utilization

Refactor get_cluster_host_utilization method
This commit is contained in:
Rob Braden 2017-06-13 15:17:29 -07:00 committed by GitHub
commit ee3f5e2215
2 changed files with 12 additions and 9 deletions

View file

@ -513,6 +513,11 @@ module Vmpooler
# Params: # Params:
# +model+:: CPU arch version to match on # +model+:: CPU arch version to match on
# +limit+:: Hard limit for CPU or memory utilization beyond which a host is excluded for deployments # +limit+:: Hard limit for CPU or memory utilization beyond which a host is excluded for deployments
# returns nil if one on these conditions is true:
# the model param is defined and cannot be found
# the host is in maintenance mode
# the host status is not 'green'
# the cpu or memory utilization is bigger than the limit param
def get_host_utilization(host, model = nil, limit = 90) def get_host_utilization(host, model = nil, limit = 90)
if model if model
return nil unless host_has_cpu_model?(host, model) return nil unless host_has_cpu_model?(host, model)
@ -555,6 +560,7 @@ module Vmpooler
def find_least_used_host(cluster, connection) def find_least_used_host(cluster, connection)
cluster_object = find_cluster(cluster, connection) cluster_object = find_cluster(cluster, connection)
target_hosts = get_cluster_host_utilization(cluster_object) target_hosts = get_cluster_host_utilization(cluster_object)
raise("There is no host candidate in vcenter that meets all the required conditions, check that the cluster has available hosts in a 'green' status, not in maintenance mode and not overloaded CPU and memory'") if target_hosts.empty?
least_used_host = target_hosts.sort[0][1] least_used_host = target_hosts.sort[0][1]
least_used_host least_used_host
end end
@ -564,10 +570,10 @@ module Vmpooler
datacenter.hostFolder.children.find { |cluster_object| cluster_object.name == cluster } datacenter.hostFolder.children.find { |cluster_object| cluster_object.name == cluster }
end end
def get_cluster_host_utilization(cluster) def get_cluster_host_utilization(cluster, model=nil)
cluster_hosts = [] cluster_hosts = []
cluster.host.each do |host| cluster.host.each do |host|
host_usage = get_host_utilization(host) host_usage = get_host_utilization(host, model)
cluster_hosts << host_usage if host_usage cluster_hosts << host_usage if host_usage
end end
cluster_hosts cluster_hosts
@ -577,11 +583,8 @@ module Vmpooler
source_host = vm.summary.runtime.host source_host = vm.summary.runtime.host
model = get_host_cpu_arch_version(source_host) model = get_host_cpu_arch_version(source_host)
cluster = source_host.parent cluster = source_host.parent
target_hosts = [] target_hosts = get_cluster_host_utilization(cluster, model)
cluster.host.each do |host| raise("There is no host candidate in vcenter that meets all the required conditions, check that the cluster has available hosts in a 'green' status, not in maintenance mode and not overloaded CPU and memory'") if target_hosts.empty?
host_usage = get_host_utilization(host, model)
target_hosts << host_usage if host_usage
end
target_host = target_hosts.sort[0][1] target_host = target_hosts.sort[0][1]
[target_host, target_host.name] [target_host, target_host.name]
end end

View file

@ -2198,7 +2198,7 @@ EOT
end end
it 'should raise error' do it 'should raise error' do
expect{subject.find_least_used_vpshere_compatible_host(vm)}.to raise_error(NoMethodError,/undefined method/) expect{subject.find_least_used_vpshere_compatible_host(vm)}.to raise_error(/There is no host candidate in vcenter that meets all the required conditions/)
end end
end end
@ -2238,7 +2238,7 @@ EOT
end end
it 'should raise error' do it 'should raise error' do
expect{subject.find_least_used_vpshere_compatible_host(vm)}.to raise_error(NoMethodError,/undefined method/) expect{subject.find_least_used_vpshere_compatible_host(vm)}.to raise_error(/There is no host candidate in vcenter that meets all the required conditions/)
end end
end end