diff --git a/app/models/miq_ae_datastore.rb b/app/models/miq_ae_datastore.rb index 4a322bccd..c6f709751 100644 --- a/app/models/miq_ae_datastore.rb +++ b/app/models/miq_ae_datastore.rb @@ -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 @@ -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') @@ -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 @@ -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 diff --git a/spec/models/miq_ae_datastore/data/automate_domain_list_tests/not_system/__domain__.yaml b/spec/models/miq_ae_datastore/data/automate_domain_list_tests/not_system/__domain__.yaml new file mode 100644 index 000000000..45337aae7 --- /dev/null +++ b/spec/models/miq_ae_datastore/data/automate_domain_list_tests/not_system/__domain__.yaml @@ -0,0 +1,11 @@ +--- +object_type: domain +version: 1.0 +object: + attributes: + name: drew_test_not_system + description: + display_name: + system: + priority: 100 + enabled: diff --git a/spec/models/miq_ae_datastore/data/automate_domain_list_tests/system/__domain__.yaml b/spec/models/miq_ae_datastore/data/automate_domain_list_tests/system/__domain__.yaml new file mode 100644 index 000000000..66ba40135 --- /dev/null +++ b/spec/models/miq_ae_datastore/data/automate_domain_list_tests/system/__domain__.yaml @@ -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: diff --git a/spec/models/miq_ae_datastore_spec.rb b/spec/models/miq_ae_datastore_spec.rb index 07cf47093..5126c973c 100644 --- a/spec/models/miq_ae_datastore_spec.rb +++ b/spec/models/miq_ae_datastore_spec.rb @@ -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