Skip to content

Commit

Permalink
Merge pull request #274 from d-m-u/refactoring_domain_reset
Browse files Browse the repository at this point in the history
Refactoring automate system domain list to include legacy domains

(cherry picked from commit 06ed15d)

Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1686054
  • Loading branch information
Fryguy authored and simaishi committed Mar 6, 2019
1 parent 8b21d98 commit e0cceef
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 17 deletions.
46 changes: 31 additions & 15 deletions app/models/miq_ae_datastore.rb
Expand Up @@ -130,7 +130,7 @@ def self.reset_default_namespace
seed_default_namespace
end

def self.reset_domain(datastore_dir, domain_name, tenant)
private_class_method def self.reset_domain(datastore_dir, domain_name, tenant)
_log.info("Resetting domain #{domain_name} from #{datastore_dir}")
ns = MiqAeDomain.find_by_fqname(domain_name)
ns.destroy if ns
Expand All @@ -142,6 +142,10 @@ def self.reset_domain(datastore_dir, domain_name, tenant)
end
end

private_class_method def self.reset_domains(domains)
domains.each { |domain| reset_domain(domain.datastores_path.to_s, domain.name, Tenant.root_tenant) }
end

def self.seed_default_namespace
default_ns = MiqAeNamespace.create!(:name => DEFAULT_OBJECT_NAMESPACE)
object_class = default_ns.ae_classes.create!(:name => 'Object')
Expand All @@ -161,38 +165,50 @@ def self.seed_default_namespace
def self.reset_to_defaults
saved_attrs = preserved_attrs_for_domains

reset_domains_from_legacy_directory
reset_domains_from_vmdb_plugins
reset_all_domains

restore_attrs_for_domains(saved_attrs)
reset_default_namespace
MiqAeDomain.reset_priorities
end

def self.reset_domains_from_legacy_directory
private_class_method def self.domains
legacy_domains + plugin_domains
end

private_class_method def self.default_domains
domains.select(&:system?)
end

private_class_method def self.legacy_domains
domain_files = DATASTORE_DIRECTORY.join('*', MiqAeDomain::DOMAIN_YAML_FILENAME)
Dir.glob(domain_files).each do |domain_file|
domain_name = File.basename(File.dirname(domain_file))
reset_domain(DATASTORE_DIRECTORY, domain_name, Tenant.root_tenant)
domains = Dir.glob(domain_files).map do |domain_file|
Vmdb::Plugins::AutomateDomain.new(File.dirname(domain_file))
end
filter_domains(domains)
end

def self.reset_domains_from_vmdb_plugins
datastores_for_reset.each do |domain|
reset_domain(domain.datastores_path.to_s, domain.name, Tenant.root_tenant)
end
private_class_method def self.plugin_domains
filter_domains(Vmdb::Plugins.automate_domains)
end

def self.datastores_for_reset
domains = Vmdb::Plugins.automate_domains
private_class_method def self.filter_domains(domains)
return domains unless Rails.env.test? && ENV["AUTOMATE_DOMAINS"]

filter = ENV["AUTOMATE_DOMAINS"].split(",")
domains.select { |i| filter.include?(i.name) }
end

private_class_method def self.domain_names
domains.collect(&:name)
end

def self.default_domain_names
Vmdb::Plugins.system_automate_domains.collect(&:name)
default_domains.collect(&:name)
end

private_class_method def self.reset_all_domains
reset_domains(domains)
end

def self.seed
Expand All @@ -207,7 +223,7 @@ def self.seed
_log.info "Seeding... Complete"
end
end
_log.info "Reseting domain priorities at startup..."
_log.info("Resetting domain priorities at startup...")
MiqAeDomain.reset_priorities
end

Expand Down
@@ -0,0 +1,11 @@
---
object_type: domain
version: 1.0
object:
attributes:
name: drew_test_not_system
description:
display_name:
system:
priority: 100
enabled:
@@ -0,0 +1,12 @@
---
object_type: domain
version: 1.0
object:
attributes:
name: drew_test_system
description:
display_name:
system: true
source: system
priority: 100
enabled:
20 changes: 18 additions & 2 deletions spec/models/miq_ae_datastore_spec.rb
Expand Up @@ -94,8 +94,24 @@ def setup_version_xml(v)
expect(MiqAeMethod.count).to eq(3)
end

it ".default_domain_names" do
expect(MiqAeDatastore.default_domain_names).to include("ManageIQ")
describe ".default_domain_names" do
describe "vmdb plugin domains" do
it "includes MIQ" do
expect(MiqAeDatastore.default_domain_names).to include('ManageIQ')
end
end

describe "legacy domains" do
it "includes system domain" do
stub_const("MiqAeDatastore::DATASTORE_DIRECTORY", ManageIQ::AutomationEngine::Engine.root.join('spec/models/miq_ae_datastore/data/automate_domain_list_tests'))
expect(MiqAeDatastore.default_domain_names).to include('drew_test_system')
end

it "doesn't include non-system domain" do
stub_const("MiqAeDatastore::DATASTORE_DIRECTORY", ManageIQ::AutomationEngine::Engine.root.join('spec/models/miq_ae_datastore/data/automate_domain_list_tests'))
expect(MiqAeDatastore.default_domain_names).not_to include('drew_test_not_system')
end
end
end

it "temporary file cleanup for unsuccessful import" do
Expand Down

0 comments on commit e0cceef

Please sign in to comment.