theforeman/foreman_maintain

View on GitHub
definitions/procedures/restore/extract_files.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Procedures::Restore
  class ExtractFiles < ForemanMaintain::Procedure
    metadata do
      description 'Extract any existing tar files in backup'

      param :backup_dir,
        'Path to backup directory',
        :required => true
    end

    def run
      backup = ForemanMaintain::Utils::Backup.new(@backup_dir)
      with_spinner('Extracting Files') do |spinner|
        if backup.file_map[:pulp_data][:present]
          spinner.update('Extracting pulp data')
          extract_pulp_data(backup)
        end
        if backup.file_map[:pgsql_data][:present]
          spinner.update('Extracting pgsql data')
          extract_pgsql_data(backup)
        end
      end
    end

    def base_tar
      {
        :overwrite => true,
        :absolute_names => true,
        :listed_incremental => '/dev/null',
        :command => 'extract',
        :directory => '/',
      }
    end

    def extract_pulp_data(backup)
      pulp_data_tar = if backup.pulp_tar_split?
                        base_tar.merge(
                          :multi_volume => true,
                          :split_data => true,
                          :archive => backup.file_map[:pulp_data][:path]
                        )
                      else
                        base_tar.merge(
                          :archive => backup.file_map[:pulp_data][:path]
                        )
                      end

      feature(:tar).run(pulp_data_tar)
    end

    def any_database
      feature(:foreman_database) || feature(:candlepin_database) || feature(:pulpcore_database)
    end

    def extract_pgsql_data(backup)
      pgsql_data_tar = base_tar.merge(
        :archive => backup.file_map[:pgsql_data][:path],
        :gzip => true
      )
      feature(:tar).run(pgsql_data_tar)
      del_data_dir_param if el?
    end

    def del_data_dir_param
      # workaround for https://tickets.puppetlabs.com/browse/MODULES-11160
      execute("sed -i '/data_directory/d' #{any_database.postgresql_conf}")
    end
  end
end