Class/Module Index [+]

Quicksearch

Rudy::Routines::Handlers::Disks

Constants

ACTIONS

Public Instance Methods

any?(routine) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 22
def any?(routine)
  (routine.kind_of?(Hash) && routine.disks && 
  routine.disks.kind_of?(Hash) && !routine.disks.empty?) ? true : false
end
archive(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 279
def archive(rbox, disk, index)
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached?
  
  Rudy::Routines.rescue {
    li "Creating backup: #{back.name}"
    back = disk.archive
  }
end
attach(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 137
def attach(rbox, disk, index)
  
  Rudy::Routines.rescue {
    unless disk.volume_exists?
      msg = "Creating volume... "
      disk.create
      Rudy::Utils.waiter(2, 60, STDOUT, msg) { 
        disk.volume_available?
      }
    end
  }
  
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  unless @@global.force
    raise Rudy::Disks::AlreadyAttached, disk.name if disk.volume_attached?
  end
  
  devices = rbox.stash.attached_volumes.collect { |v| v.device }
  if devices.member? disk.device
    li "Device ID #{disk.device} is taken. Using #{devices.sort.last.succ}"
    disk.device = devices.sort.last.succ 
    disk.save :replace
  end
  
  Rudy::Routines.rescue {
    msg = "Attaching #{disk.volid} to #{rbox.stash.instid}... "
    disk.volume_attach(rbox.stash.instid)
    Rudy::Utils.waiter(3, 30, STDOUT, msg) { 
      disk.volume_attached?
    }
  }
end
create(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 83
def create(rbox, disk, index)
  if disk.exists?
    li "Disk found: #{disk.name}"
    disk.refresh!          
  end
  
  disk.index = index  # Needed for windows
  
  Rudy::Routines.rescue {
    unless disk.volume_exists?
      msg = "Creating volume... "
      disk.create
      Rudy::Utils.waiter(2, 60, STDOUT, msg) { 
        disk.volume_available?
      }
    end
  }
  
  Rudy::Routines.rescue {
    attach rbox, disk, index unless disk.volume_attached?
  }
  Rudy::Routines.rescue {
    format rbox, disk, index if disk.raw?
  }
  Rudy::Routines.rescue {
    mount rbox, disk, index unless disk.mounted?
  }
  disk.save :replace
end
destroy(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 262
def destroy(rbox, disk, index)
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
    
  umount rbox,disk,index if disk.mounted? && !rbox.nil? && !rbox.stash.windows?
  detach rbox,disk,index if disk.volume_attached?
  
  unless @@global.force
    raise Rudy::Disks::InUse, disk.name if disk.volume_attached?
  end
  
  Rudy::Routines.rescue {
    li "Destroying #{disk.name}"
    disk.destroy
  }
end
detach(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 115
def detach(rbox, disk, index)
  
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  unless @@global.force
    raise Rudy::Disks::NotAttached, disk.name unless disk.volume_attached?
  end
  
  umount rbox, disk, index if disk.mounted?
  raise Rudy::Disks::InUse, disk.name if disk.mounted?
  
  Rudy::Routines.rescue {
    msg = "Detaching #{disk.volid}..."
    disk.volume_detach 
    Rudy::Utils.waiter(2, 60, STDOUT, msg) { 
      disk.volume_available? 
    }
  }
  
end
execute(type, routine, rset, lbox, argv=nil) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 41
def execute(type, routine, rset, lbox, argv=nil)
  original_user = rset.user
  rset.add_key user_keypairpath(current_machine_user)
  rset.switch_user current_machine_user
  
  routine.each_pair do |action, disks|
    unless respond_to?(action.to_sym)  
      Rudy::Huxtable.le %(DiskHandler: unknown action "#{action}")
      next
    end
    # A quick hack to take advantage of the threading in Rye::Set.
    # The action method does not run in the context of a Rye::Box
    # object so we need to send rset as an argument. 
    rset.batch do
      # Windows EC2 instances have 2 disks by default (C: and D:)
      volumes = self.stash.attached_volumes
      disks.each_pair do |path, props|
        # self contains the current instance of Rye::Box. 
        disk = Rudy::Disk.new(self.stash.position, path, props)
        disk.refresh! if disk.exists?  # We need the volume ID if available
        # don't include the current disk in the count. 
        volumes.reject! { |v| v.awsid == disk.volid } if disk.volid && disk.volume_attached?
        disk_index = volumes.size + 2
        Rudy::Routines::Handlers::Disks.send(action, self, disk, disk_index)
      end
    end

  end
  
  rset.switch_user original_user
end
format(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 227
def format(rbox, disk, index)
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  attach rbox, disk unless disk.volume_attached?
  
  raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached?
  
  unless @@global.force
    raise Rudy::Disks::AlreadyFormatted, disk.name if !disk.raw?
  end
  
  if disk.fstype.nil? || disk.fstype.empty?
    disk.fstype = rbox.stash.default_fstype
  end
  
  print "Creating #{disk.fstype} filesystem for #{disk.path}... "
  if rbox.stash.windows?
    li "(index: #{index})"
    windows_diskpart_partition rbox, disk, index
    disk.mounted = true
  else
    li $/
    args = [:t, disk.fstype, :F, disk.device]
    rbox.sudo do
      rudy_mkfs *args
    end
  end
  
  disk.raw = false
  disk.save :replace
  sleep 1
  disk
end
fstype(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 73
def fstype(rbox, disk, index)
  
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  #p rbox.rudy_blkid :s, 'TYPE', :o, 'value', disk.device
  
end
mount(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 172
def mount(rbox, disk, index)
  
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  if rbox.stash.windows?
    Rudy::Huxtable.li "Skipping for Windows"
    return 
  end
  
  attach rbox, disk unless disk.volume_attached?
  
  unless @@global.force
    raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached?
    raise Rudy::Disks::NotFormatted, disk.name if disk.raw?
    raise Rudy::Disks::AlreadyMounted, disk.name if disk.mounted?
  end
  
  li "Mounting at #{disk.path}... "
  
  rbox.sudo do
    mkdir(:p, disk.path)
    mount(:t, disk.fstype, disk.device, disk.path)
  end
        
  disk.mounted = true
  disk.save :replace
  sleep 1

end
paths(routine) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 35
def paths(routine)
  return nil unless disks?(routine)
  routine.disks.values.collect { |d| d.keys }.flatten
end
raise_early_exceptions(type, batch, rset, lbox, argv=nil) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 18
def raise_early_exceptions(type, batch, rset, lbox, argv=nil)
  
end
restore(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 291
def restore(rbox, disk, index)

  if disk.exists?
    li "Disk found: #{disk.name}"
    disk.refresh!       
  end
  
  unless @@global.force
    raise Rudy::Disks::AlreadyAttached, disk.name if disk.volume_attached?
  end
  
  latest_backup = disk.backups.last
  
  if latest_backup.fstype.nil? || latest_backup.fstype.empty?
    latest_backup.fstype = rbox.stash.default_fstype
  end
  
  disk.size, disk.fstype = latest_backup.size, latest_backup.fstype
  
  li "Backup found: #{latest_backup.name}"
  
  Rudy::Routines.rescue {
    unless disk.volume_exists?
      msg = "Creating volume... "
      disk.create latest_backup.size, latest_backup.zone, latest_backup.snapid
      Rudy::Utils.waiter(2, 60, STDOUT, msg) { 
        disk.volume_available?
      }
      disk.raw = false
      disk.save :replace  
    end
  }
  
  attach rbox, disk, index unless disk.volume_attached?
  mount rbox, disk, index unless disk.mounted?
  
  disk.save :replace

end
umount(rbox, disk, index) click to toggle source
# File lib/rudy/routines/handlers/disks.rb, line 204
def umount(rbox, disk, index)
  
  raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
  disk.refresh!
  
  unless @@global.force
    raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached?
    raise Rudy::Disks::NotMounted, disk.name if !disk.mounted?
  end
  
  li "Unmounting #{disk.path}... "
  
  unless rbox.nil? || rbox.stash.windows?
    rbox.sudo { umount disk.path }
  end
  
  disk.mounted = false
  disk.save :replace
  sleep 2
  
end
Also aliased as: unmount
unmount(rbox, disk, index) click to toggle source
Alias for: umount

[Validate]

Generated with the Darkfish Rdoc Generator 2.