Skip to content

Commit

Permalink
Fix support for legacy DATASTORE_DIRECTORY
Browse files Browse the repository at this point in the history
  • Loading branch information
bdunne committed Dec 15, 2016
1 parent 2f01cf9 commit 8ada346
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
13 changes: 9 additions & 4 deletions lib/miq_automation_engine/models/miq_ae_datastore.rb
Original file line number Diff line number Diff line change
Expand Up @@ -159,19 +159,24 @@ def self.seed_default_namespace
end

def self.reset_to_defaults
raise "Datastore directory [#{DATASTORE_DIRECTORY}] not found" unless Dir.exist?(DATASTORE_DIRECTORY)
saved_attrs = preserved_attrs_for_domains
default_domain_names.each do |domain_name|
reset_domain(DATASTORE_DIRECTORY, domain_name, Tenant.root_tenant)
end

reset_domains_from_legacy_directory
reset_domains_from_vmdb_plugins

restore_attrs_for_domains(saved_attrs)
reset_default_namespace
MiqAeDomain.reset_priorities
end

def self.reset_domains_from_legacy_directory
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(ae_datastore, domain_name, Tenant.root_tenant)
end
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)
Expand Down
17 changes: 9 additions & 8 deletions lib/miq_automation_engine/models/miq_ae_domain.rb
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,15 @@ def version
end

def available_version
fname = about_file_name
return nil if fname.nil? || !File.exist?(fname)
class_yaml = YAML.load_file(fname)
domain_path = Vmdb::Plugins.instance.registered_automate_domains.detect { |d| d.name == name }.try(:path)
domain_path ||= MiqAeDatastore::DATASTORE_DIRECTORY.join(name)
self.class.version_from_schema(domain_path)
end

def self.version_from_schema(path)
about_file = path.join("System/About#{CLASS_DIR_SUFFIX}/#{CLASS_YAML_FILENAME}")
return unless about_file.file?
class_yaml = YAML.load_file(about_file)
fields = class_yaml.fetch_path('object', 'schema') if class_yaml.kind_of?(Hash)
version_field = fields.try(:detect) { |f| f.fetch_path('field', 'name') == 'version' }
version_field.try(:fetch_path, 'field', 'default_value')
Expand Down Expand Up @@ -196,11 +202,6 @@ def about_class
MiqAeClass.where(:namespace_id => ns.id).find_by("lower(name) = ?", "about") if ns
end

def about_file_name
about = about_class
File.join(MiqAeDatastore::DATASTORE_DIRECTORY, "#{about.fqname}#{CLASS_DIR_SUFFIX}", CLASS_YAML_FILENAME) if about
end

def self.reset_priority_of_system_domains
domains = MiqAeDomain.where('source = ? AND name <> ?',
SYSTEM_SOURCE, MiqAeDatastore::MANAGEIQ_DOMAIN).order('name DESC')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
before do
EvmSpecHelper.local_guid_miq_server_zone
@user = FactoryGirl.create(:user_with_group)
@temp_dir = Dir.mktmpdir
@temp_dir = Pathname.new(Dir.mktmpdir)
require 'miq_ae_datastore'
stub_const("MiqAeDatastore::DATASTORE_DIRECTORY", @temp_dir)
end
Expand Down Expand Up @@ -43,7 +43,7 @@ def write_about_file(domain, version)
schema = [{"field" => {"name" => "version", "default_value" => version}}]
hash = {"object_type" => "class", "version" => 1.0,
"object" => {"attributes" => {"name" => "About"}, "schema" => schema}}
fname = domain.send(:about_file_name)
fname = @temp_dir.join(domain.name, "System/About.class/__class__.yaml")
FileUtils.mkdir_p(File.dirname(fname))
File.write(fname, hash.to_yaml)
end
Expand Down

0 comments on commit 8ada346

Please sign in to comment.