Skip to content

Commit

Permalink
Calculate quota using service dialogs overrides.
Browse files Browse the repository at this point in the history
Changed requested method to use dialog overrides in quota calculations.

Modified requested method to calculate quota based on dialog values for:
number_of_sockets, cores_per_socket, number_of_cpus, vm_memory and storage.

This can be tested by using service dialogs using these values.

https://bugzilla.redhat.com/show_bug.cgi?id=1497912

Testing

Create a service using service dialog overrides values for the above values.
You can use one or more override values.
Order the service, change some values and run.

Note: We are honoring number_of_vms in a service dialog but not using number_of_vms in quota calculations. Doing quota calculations for number_of_vms in a service dialog will be in
a followup PR.

I am including screenshots of a dialog using some values.
  • Loading branch information
billfitzgerald0120 committed Oct 25, 2017
1 parent 10d61e1 commit e62c97e
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def get_total_requested(options_hash, prov_option)
end

def request_totals(template_totals, dialog_totals)
[template_totals, dialog_totals].max
dialog_totals.positive? ? dialog_totals : template_totals
end

def collect_template_totals(prov_option)
Expand Down Expand Up @@ -195,7 +195,38 @@ def collect_totals(array)

def collect_dialog_totals(prov_option, options_hash)
dialog_values(prov_option, options_hash, dialog_array = [])
collect_totals(dialog_array)
total = collect_totals(dialog_array)
if prov_option == :number_of_cpus
options_hash.each do |_sequence_id, options|
if options.keys.include?(:number_of_sockets) || options.keys.include?(:cores_per_socket)
$evm.log(:info, "Recalculating number of cpus based on dialog overrides")
total = recalculate_number_of_cpus(service_resource, options[:number_of_sockets].to_i, options[:cores_per_socket].to_i)
end
end
end
total
end

def service_resource
resource = nil
@service_template.service_resources.each do |child_service_resource|
next if @service_template.service_type == 'composite'
next if @service_template.prov_type.starts_with?("generic")
resource = child_service_resource.resource
end
resource
end

def recalculate_number_of_cpus(resource, override_number_of_sockets, override_cores_per_socket)
$evm.log(:info, "Recalculating the number_of_cpus resource: #{resource} override_number_of_sockets: #{override_number_of_sockets} override_cores_per_socket: #{override_cores_per_socket}")
if override_number_of_sockets.positive? && override_cores_per_socket.positive?
cpu_in_request = override_number_of_sockets * override_cores_per_socket
elsif override_number_of_sockets.positive?
cpu_in_request = get_option_value(resource, :cores_per_socket) * override_number_of_sockets
elsif override_cores_per_socket.positive?
cpu_in_request = get_option_value(resource, :number_of_sockets) * override_cores_per_socket
end
cpu_in_request * get_option_value(resource, :number_of_vms) if cpu_in_request.to_i.positive?
end

def dialog_values(prov_option, options_hash, dialog_array)
Expand Down
71 changes: 71 additions & 0 deletions spec/automation/unit/method_validation/calculate_requested_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,77 @@ def check_results(requested_hash, storage, cpu, vms, memory)
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 4, 1, 1.gigabytes)
end

it "vmware service item with dialog override number_of_sockets = 3" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_number_of_sockets" => "3"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 6, 1, 1.gigabytes)
end

it "vmware service item with dialog override cores_per_socket = 4" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_cores_per_socket" => "4"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 8, 1, 1.gigabytes)
end

it "vmware service item with dialog override sockets = 3 and cores = 4 = 12" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_number_of_sockets" => "3",
"dialog_option_0_cores_per_socket" => "4"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 12, 1, 1.gigabytes)
end

it "vmware service item with dialog override number_of_cpus = 5" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_number_of_cpus" => "5"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 5, 1, 1.gigabytes)
end

it "vmware service item with dialog override vm_memory = 2147483648" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_vm_memory" => "2147483648"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 4, 1, 2.gigabytes)
end

it "vmware service item with dialog override number_of_vms = 5" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_number_of_vms" => "5"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 512.megabytes, 4, 5, 1.gigabytes)
end

it "vmware service item with dialog override storage = 2147483648" do
setup_model("vmware")
build_small_environment
build_vmware_service_item
@service_request.options[:dialog] = {"dialog_option_0_storage" => "2147483648"}
@service_request.save
ws = run_automate_method(service_attrs)
check_results(ws.root['quota_requested'], 2.gigabytes, 4, 1, 1.gigabytes)
end
end

context "Service Bundle provisioning quota" do
Expand Down

0 comments on commit e62c97e

Please sign in to comment.