class Oneds::Mrproper::Cleaners::DirectoryCleaner

Attributes

datastore_manager[R]

Public Class Methods

new(client, dry_run) click to toggle source
Calls superclass method Oneds::Mrproper::Cleaners::Cleaner::new
# File lib/oneds/mrproper/cleaners/directory_cleaner.rb, line 7
def initialize(client, dry_run)
  super(dry_run)

  @datastore_manager = Oneds::Mrproper::One::Managers::DatastoreManager.new client
end

Public Instance Methods

clean() click to toggle source
# File lib/oneds/mrproper/cleaners/directory_cleaner.rb, line 13
def clean
  logger.info 'Cleaning forgotten datastore directories'
  datastores = datastore_manager.datastore_paths.sort
  base_path = File.dirname(datastores.first)
  logger.debug "Datasores registered in OpenNebula: #{datastores.inspect}"
  directories = Dir[File.join(base_path, '*')].sort
  logger.debug "Directories present on filesystem: #{directories.inspect}"

  dirs_to_remove = directories - datastores
  logger.debug "Directories that will be removed: #{dirs_to_remove.inspect}"

  remove_directories dirs_to_remove
end

Private Instance Methods

remove_directories(directories) click to toggle source
# File lib/oneds/mrproper/cleaners/directory_cleaner.rb, line 29
def remove_directories(directories)
  directories.each do |dir|
    unless File.directory? dir
      logger.warn "Skipping file #{dir.inspect}, not a directory"
      next
    end

    unless Dir[File.join(dir, '*')].empty?
      logger.warn "Skipping not empty directory #{dir.inspect} which is not registered in OpenNebula"
      next
    end

    logger.info "Removing empty directory #{dir.inspect}"
    FileUtils.rm_r dir unless dry_run
  end
end