Skip to content

Commit

Permalink
Merge pull request #20299 from yrudman/global-region-settings-fix
Browse files Browse the repository at this point in the history
Fixed Settings hierarchy on Global region

(cherry picked from commit 68b086e)

https://bugzilla.redhat.com/show_bug.cgi?id=1836158
  • Loading branch information
Fryguy authored and simaishi committed Jul 1, 2020
1 parent be6cc1f commit a3251c7
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/models/miq_server.rb
Expand Up @@ -633,7 +633,7 @@ def tenant_identity
end

def miq_region
::MiqRegion.my_region
MiqRegion.find_by(:region => region_id)
end

def self.display_name(number = 1)
Expand Down
75 changes: 75 additions & 0 deletions spec/lib/vmdb/settings_spec.rb
Expand Up @@ -578,6 +578,81 @@
settings = Vmdb::Settings.for_resource(MiqServer.new(:zone => server.zone))
expect(settings.api.token_ttl).to eq "4.hour"
end

context "on global region" do
let(:key) { "yuri" }
let(:value_region_remote) { "region_remote" }
let(:value_server_remote) { "server_remote" }
let(:value_zone_remote) { "zone_remote" }

before do
Zone.seed
@region_global = MiqRegion.first
@region_remote = FactoryBot.create(:miq_region, :id => ApplicationRecord.id_in_region(1, @region_global.region + 1))
@zone_remote = FactoryBot.create(:zone, :id => ApplicationRecord.id_in_region(2, @region_remote.region))
@server_remote = FactoryBot.create(:miq_server, :zone => @zone_remote, :id => ApplicationRecord.id_in_region(1, @region_remote.region))
SettingsChange.create!(:id => ApplicationRecord.id_in_region(1, @region_global.region),
:resource_id => @region_global.id,
:resource_type => "MiqRegion",
:key => "/#{key}",
:value => "value from global region")
zone_global = FactoryBot.create(:zone, :id => ApplicationRecord.id_in_region(1, @region_global.region))
SettingsChange.create!(:id => ApplicationRecord.id_in_region(2, @region_global.region),
:resource_id => zone_global.id,
:resource_type => "Zone",
:key => "/#{key}",
:value => "value from global zone")
end

it "applies settings from remote sever if there are specified" do
SettingsChange.create!(:id => ApplicationRecord.id_in_region(1, @region_remote.region),
:resource_id => @server_remote.id,
:resource_type => "MiqServer",
:key => "/#{key}",
:value => value_server_remote)
expect(Vmdb::Settings.for_resource(@server_remote)[key]).to eq(value_server_remote)
end

it "applies settings from remote region if settings on remote server not specified" do
SettingsChange.create!(:id => ApplicationRecord.id_in_region(1, @region_remote.region),
:resource_id => @region_remote.id,
:resource_type => "MiqRegion",
:key => "/#{key}",
:value => value_region_remote)
expect(Vmdb::Settings.for_resource(@server_remote)[key]).to eq(value_region_remote)
end

it "applies settings from remote zone if settings on remote server not specified" do
SettingsChange.create!(:id => ApplicationRecord.id_in_region(1, @region_remote.region),
:resource_id => @zone_remote.id,
:resource_type => "Zone",
:key => "/#{key}",
:value => value_zone_remote)
expect(Vmdb::Settings.for_resource(@server_remote)[key]).to eq(value_zone_remote)
end

it "loads settings from correct level of hirerarchy" do
SettingsChange.create!(:id => ApplicationRecord.id_in_region(1, @region_remote.region),
:resource_id => @region_remote.id,
:resource_type => "MiqRegion",
:key => "/#{key}",
:value => value_region_remote)
SettingsChange.create!(:id => ApplicationRecord.id_in_region(2, @region_remote.region),
:resource_id => @zone_remote.id,
:resource_type => "Zone",
:key => "/#{key}",
:value => value_zone_remote)
SettingsChange.create!(:id => ApplicationRecord.id_in_region(3, @region_remote.region),
:resource_id => @server_remote.id,
:resource_type => "MiqServer",
:key => "/#{key}",
:value => value_server_remote)

expect(Vmdb::Settings.for_resource(@server_remote)[key]).to eq(value_server_remote)
expect(Vmdb::Settings.for_resource(@zone_remote)[key]).to eq(value_zone_remote)
expect(Vmdb::Settings.for_resource(@region_remote)[key]).to eq(value_region_remote)
end
end
end

describe ".for_resource_yaml" do
Expand Down
17 changes: 17 additions & 0 deletions spec/models/miq_server_spec.rb
Expand Up @@ -482,6 +482,23 @@
end
end

describe "#miq_region" do
before do
Zone.seed
@region1 = MiqRegion.first.region
@region2 = FactoryBot.create(:miq_region, :id => MiqRegion.id_in_region(1, @region1 + 1)).region
zone = FactoryBot.create(:zone, :id => Zone.id_in_region(2, @region2))

@server1 = FactoryBot.create(:miq_server)
@server2 = FactoryBot.create(:miq_server, :zone => zone, :id => MiqServer.id_in_region(1, @region2))
end

it "returns region this server belongs to" do
expect(@server1.miq_region.region).to eq(@region1)
expect(@server2.miq_region.region).to eq(@region2)
end
end

context ".audit_managed_resources" do
let(:ems) { FactoryBot.create(:ems_infra) }
let!(:active_vm) { FactoryBot.create(:vm_infra, :ext_management_system => ems) }
Expand Down

0 comments on commit a3251c7

Please sign in to comment.