mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Refactor the get_cluster_host_utilization method
The same method logic was being used in two places but only one was calling the method get_cluster_host_utilization, so this refactors it to use the method for both. The method could also return an empty array and the subsequent line would try to .sort[0][1] which would return undefined method [] for nil:NilClass in that case. The return value is now checked and an exception raised
This commit is contained in:
parent
1fcb19bd7b
commit
26d6cb28d9
1 changed files with 10 additions and 7 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue