Skip to content

Commit

Permalink
Merge pull request #12824 from tinaafitz/quota_requested_fix
Browse files Browse the repository at this point in the history
Quota requested fix
(cherry picked from commit 74e8191)

https://bugzilla.redhat.com/show_bug.cgi?id=1399802
  • Loading branch information
mkanoor authored and chessbyte committed Nov 30, 2016
1 parent b495c94 commit 9a7e993
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 49 deletions.
Expand Up @@ -258,7 +258,7 @@ def error(type)

options_hash = service_options if @service

if @service && @service_template.prov_type.starts_with?("generic")
if @service && !@service_template.prov_type.nil? && @service_template.prov_type.starts_with?("generic")
$evm.log(:info, "Generic Service Item. No quota check being done.")
$evm.root['ae_result'] = 'ok'
$evm.root['ae_next_state'] = 'finished'
Expand Down
12 changes: 12 additions & 0 deletions spec/automation/unit/method_validation/calculate_requested_spec.rb
Expand Up @@ -45,6 +45,18 @@ def check_results(requested_hash, storage, cpu, vms, memory)
end
end

context "Service Bundle provisioning quota" do
it "Bundle of 2, google and vmware" do
create_service_bundle([google_template, vmware_template])
expect { run_automate_method(service_attrs) }.not_to raise_exception
end

it "Bundle of 2, google and generic" do
create_service_bundle([google_template, generic_template])
expect { run_automate_method(service_attrs) }.not_to raise_exception
end
end

context "VM provisioning quota" do
it "vmware calculate_requested" do
setup_model("vmware")
Expand Down
Expand Up @@ -5,7 +5,7 @@
@allowed_service_templates = %w(top vm_service1 vm_service2)
user_helper
build_small_environment
build_model
build_model_from_vms([@src_vm, @src_vm])
end

def create_request_and_tasks(dialog_options = {})
Expand All @@ -15,23 +15,6 @@ def create_request_and_tasks(dialog_options = {})
@request.create_request_tasks
end

def build_model
model = {"top" => {:type => 'composite',
:children => %w(vm_service1 vm_service2),
:child_options => {'vm_service1' => {:provision_index => 0},
'vm_service2' => {:provision_index => 1}}},
"vm_service1" => {:type => 'atomic',
:request => {:src_vm_id => @src_vm.id,
:number_of_vms => 1, :requester => @user}
},
"vm_service2" => {:type => 'atomic',
:request => {:src_vm_id => @src_vm.id,
:number_of_vms => 1, :requester => @user}
}
}
build_service_template_tree(model)
end

def run_automate_method
attrs = []
attrs << "ServiceTemplateProvisionTask::service_template_provision_task=#{@stp.id}"
Expand Down
Expand Up @@ -5,7 +5,7 @@
@allowed_service_templates = %w(top vm_service1 vm_service2)
user_helper
build_small_environment
build_model
build_model_from_vms([@src_vm, @src_vm])
end

def create_request_and_tasks(dialog_options = {:dialog => {}})
Expand All @@ -15,23 +15,6 @@ def create_request_and_tasks(dialog_options = {:dialog => {}})
@request.create_request_tasks
end

def build_model
model = {"top" => {:type => 'composite',
:children => %w(vm_service1 vm_service2),
:child_options => {'vm_service1' => {:provision_index => 0},
'vm_service2' => {:provision_index => 1}}},
"vm_service1" => {:type => 'atomic',
:request => {:src_vm_id => @src_vm.id,
:number_of_vms => 1, :requester => @user}
},
"vm_service2" => {:type => 'atomic',
:request => {:src_vm_id => @src_vm.id,
:number_of_vms => 1, :requester => @user}
}
}
build_service_template_tree(model)
end

def run_automate_method(stpt)
attrs = []
attrs << "ServiceTemplateProvisionTask::service_template_provision_task=#{stpt.id}" if stpt
Expand Down
47 changes: 35 additions & 12 deletions spec/support/quota_helper.rb
Expand Up @@ -108,21 +108,29 @@ def vmware_requested_quota_values
:cores_per_socket => [2, '2']}
end

def vmware_model
def vmware_template
@ems = FactoryGirl.create(:ems_vmware)
@vm_template = FactoryGirl.create(:template_vmware,
:hardware => FactoryGirl.create(:hardware, :cpu1x2, :memory_mb => 512))
FactoryGirl.create(:template_vmware,
:hardware => FactoryGirl.create(:hardware, :cpu1x2, :memory_mb => 512))
end

def vmware_model
@vm_template = vmware_template
@storage = FactoryGirl.create(:storage_nfs)
create_request(vmware_requested_quota_values)
create_hardware
create_vmware_vms
end

def google_model
ems = FactoryGirl.create(:ems_google_with_authentication,
def google_template
@ems = FactoryGirl.create(:ems_google_with_authentication,
:availability_zones => [FactoryGirl.create(:availability_zone_google)])
@vm_template = FactoryGirl.create(:template_google, :ext_management_system => ems)
m2_small_flavor = FactoryGirl.create(:flavor_google, :ems_id => ems.id, :cloud_subnet_required => false,
FactoryGirl.create(:template_google, :ext_management_system => @ems)
end

def google_model
@vm_template = google_template
m2_small_flavor = FactoryGirl.create(:flavor_google, :ems_id => @ems.id, :cloud_subnet_required => false,
:cpus => 4, :cpu_cores => 1, :memory => 1024)
create_request(:number_of_vms => 1, :owner_email => 'user@example.com',
:src_vm_id => @vm_template.id,
Expand All @@ -132,11 +140,15 @@ def google_model
create_google_vms
end

def generic_template
FactoryGirl.create(:service_template,
:name => 'generic',
:service_type => 'atomic',
:prov_type => 'generic')
end

def build_generic_service_item
@service_template = FactoryGirl.create(:service_template,
:name => 'generic',
:service_type => 'atomic',
:prov_type => 'generic')
@service_template = generic_template
@service_request = build_service_template_request("generic", @user, :dialog => {"test" => "dialog"})
end

Expand All @@ -159,10 +171,21 @@ def build_vmware_service_item
@service_request = build_service_template_request("vmware_service_item", @user, :dialog => {"test" => "dialog"})
end

def setup_model(vendor = "vmware")
def create_service_bundle(items)
user_setup
create_tenant_quota
build_model_from_vms(items)
@service_request = build_service_template_request("top", @user, :dialog => {"test" => "dialog"})
end

def user_setup
@user = FactoryGirl.create(:user_with_group)
@miq_group = @user.current_group
@tenant = @miq_group.tenant
end

def setup_model(vendor = "vmware")
user_setup
create_tenant_quota
send("#{vendor}_model") unless vendor == 'generic'
end
Expand Down
31 changes: 31 additions & 0 deletions spec/support/service_template_helper.rb
Expand Up @@ -9,10 +9,12 @@ def build_service_template_tree(hash)
def build_all_atomics(hash)
hash.each do |name, value|
next unless value[:type] == "atomic"

item = FactoryGirl.create(:service_template, :name => name,
:options => {:dialog => {}},
:service_type => 'atomic')
item.update_attributes(:prov_type => value[:prov_type]) if value[:prov_type].present?
next if value[:prov_type] && value[:prov_type].starts_with?("generic")
options = value[:request]
options ||= {}
options[:dialog] = {}
Expand All @@ -32,6 +34,35 @@ def build_all_composites(hash)
end
end

def build_model_from_vms(items)
model = {}
child_options = {}
children = []
items.each_with_index do |item, index|
key = "vm_service#{index + 1}"
model[key] = add_item(item)
children.append(key)
child_options[key] = {:provision_index => index}
end

model['top'] = { :type => 'composite',
:children => children,
:child_options => child_options }

build_service_template_tree(model)
end

def add_item(item)
if item.respond_to?(:prov_type)
{:type => 'atomic', :prov_type => item.prov_type}
else
{:type => 'atomic',
:prov_type => item.vendor,
:request => {:src_vm_id => item.id, :number_of_vms => 1, :requester => @user}
}
end
end

def build_a_composite(name, hash)
item = FactoryGirl.create(:service_template, :name => name,
:options => {:dialog => {}},
Expand Down

0 comments on commit 9a7e993

Please sign in to comment.