ManageIQ/manageiq-automation_engine

View on GitHub
app/models/miq_ae_yaml_export_zipfs.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# Class to Export Automate Model to a zip file
class MiqAeYamlExportZipfs < MiqAeYamlExport
  def initialize(domain, options)
    super
    @temp_file_name = File.join(Dir.tmpdir, "temp_file.zip")
    @zipfile_name   = options['zip_file'].blank? ? "#{@domain}.zip" : options['zip_file']
    options['overwrite'] ||= false
    if File.exist?(@zipfile_name) && !options['overwrite']
      raise MiqAeException::FileExists, "File [#{@zipfile_name}] exists, to overwrite it use OVERWRITE=true"
    end
  end

  def write_data(base_path, export_hash)
    @zip_file.dir.mkdir(base_path) unless @zip_file.file.directory?(base_path)
    fq_filename = File.join(base_path, export_hash['output_filename'].downcase)
    @zip_file.file.open(fq_filename, "w") { |zipf| zipf.puts export_hash['export_data'] }
    _log.info("writing zip fqfilename: #{fq_filename}")
  end

  def export
    require 'zip/filesystem'
    Zip::File.open(@temp_file_name, Zip::File::CREATE) do |zf|
      @zip_file = zf
      write_model
      @zip_file&.close
      FileUtils.mv(@temp_file_name, @options['zip_file'])
    end
  ensure
    @zip_file = nil
  end
end