Methods
public instance
Included modules
Constants
ACTIONS | = | [:create, :destroy, :archive, :mount, :restore, :attach, :detach, :mount, :umount, :fstype].freeze |
Public instance methods
any?
(routine)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 22 22: def any?(routine) 23: (routine.kind_of?(Hash) && routine.disks && 24: routine.disks.kind_of?(Hash) && !routine.disks.empty?) ? true : false 25: end
archive
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 279 279: def archive(rbox, disk, index) 280: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 281: disk.refresh! 282: 283: raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached? 284: 285: Rudy::Routines.rescue { 286: li "Creating backup: #{back.name}" 287: back = disk.archive 288: } 289: end
attach
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 137 137: def attach(rbox, disk, index) 138: 139: Rudy::Routines.rescue { 140: unless disk.volume_exists? 141: msg = "Creating volume... " 142: disk.create 143: Rudy::Utils.waiter(2, 60, STDOUT, msg) { 144: disk.volume_available? 145: } 146: end 147: } 148: 149: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 150: disk.refresh! 151: 152: unless @@global.force 153: raise Rudy::Disks::AlreadyAttached, disk.name if disk.volume_attached? 154: end 155: 156: devices = rbox.stash.attached_volumes.collect { |v| v.device } 157: if devices.member? disk.device 158: li "Device ID #{disk.device} is taken. Using #{devices.sort.last.succ}" 159: disk.device = devices.sort.last.succ 160: disk.save :replace 161: end 162: 163: Rudy::Routines.rescue { 164: msg = "Attaching #{disk.volid} to #{rbox.stash.instid}... " 165: disk.volume_attach(rbox.stash.instid) 166: Rudy::Utils.waiter(3, 30, STDOUT, msg) { 167: disk.volume_attached? 168: } 169: } 170: end
create
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 83 83: def create(rbox, disk, index) 84: if disk.exists? 85: li "Disk found: #{disk.name}" 86: disk.refresh! 87: end 88: 89: disk.index = index # Needed for windows 90: 91: Rudy::Routines.rescue { 92: unless disk.volume_exists? 93: msg = "Creating volume... " 94: disk.create 95: Rudy::Utils.waiter(2, 60, STDOUT, msg) { 96: disk.volume_available? 97: } 98: end 99: } 100: 101: Rudy::Routines.rescue { 102: attach rbox, disk, index unless disk.volume_attached? 103: } 104: Rudy::Routines.rescue { 105: format rbox, disk, index if disk.raw? 106: } 107: Rudy::Routines.rescue { 108: mount rbox, disk, index unless disk.mounted? 109: } 110: disk.save :replace 111: end
destroy
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 262 262: def destroy(rbox, disk, index) 263: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 264: disk.refresh! 265: 266: umount rbox,disk,index if disk.mounted? && !rbox.nil? && !rbox.stash.windows? 267: detach rbox,disk,index if disk.volume_attached? 268: 269: unless @@global.force 270: raise Rudy::Disks::InUse, disk.name if disk.volume_attached? 271: end 272: 273: Rudy::Routines.rescue { 274: li "Destroying #{disk.name}" 275: disk.destroy 276: } 277: end
detach
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 115 115: def detach(rbox, disk, index) 116: 117: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 118: disk.refresh! 119: 120: unless @@global.force 121: raise Rudy::Disks::NotAttached, disk.name unless disk.volume_attached? 122: end 123: 124: umount rbox, disk, index if disk.mounted? 125: raise Rudy::Disks::InUse, disk.name if disk.mounted? 126: 127: Rudy::Routines.rescue { 128: msg = "Detaching #{disk.volid}..." 129: disk.volume_detach 130: Rudy::Utils.waiter(2, 60, STDOUT, msg) { 131: disk.volume_available? 132: } 133: } 134: 135: end
execute
(type, routine, rset, lbox, argv=nil)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 41 41: def execute(type, routine, rset, lbox, argv=nil) 42: original_user = rset.user 43: rset.add_key user_keypairpath(current_machine_user) 44: rset.switch_user current_machine_user 45: 46: routine.each_pair do |action, disks| 47: unless respond_to?(action.to_sym) 48: Rudy::Huxtable.le %Q(DiskHandler: unknown action "#{action}") 49: next 50: end 51: # A quick hack to take advantage of the threading in Rye::Set. 52: # The action method does not run in the context of a Rye::Box 53: # object so we need to send rset as an argument. 54: rset.batch do 55: # Windows EC2 instances have 2 disks by default (C: and D:) 56: volumes = self.stash.attached_volumes 57: disks.each_pair do |path, props| 58: # self contains the current instance of Rye::Box. 59: disk = Rudy::Disk.new(self.stash.position, path, props) 60: disk.refresh! if disk.exists? # We need the volume ID if available 61: # don't include the current disk in the count. 62: volumes.reject! { |v| v.awsid == disk.volid } if disk.volid && disk.volume_attached? 63: disk_index = volumes.size + 2 64: Rudy::Routines::Handlers::Disks.send(action, self, disk, disk_index) 65: end 66: end 67: 68: end 69: 70: rset.switch_user original_user 71: end
format
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 227 227: def format(rbox, disk, index) 228: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 229: disk.refresh! 230: 231: attach rbox, disk unless disk.volume_attached? 232: 233: raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached? 234: 235: unless @@global.force 236: raise Rudy::Disks::AlreadyFormatted, disk.name if !disk.raw? 237: end 238: 239: if disk.fstype.nil? || disk.fstype.empty? 240: disk.fstype = rbox.stash.default_fstype 241: end 242: 243: print "Creating #{disk.fstype} filesystem for #{disk.path}... " 244: if rbox.stash.windows? 245: li "(index: #{index})" 246: windows_diskpart_partition rbox, disk, index 247: disk.mounted = true 248: else 249: li $/ 250: args = [:t, disk.fstype, :F, disk.device] 251: rbox.sudo do 252: rudy_mkfs *args 253: end 254: end 255: 256: disk.raw = false 257: disk.save :replace 258: sleep 1 259: disk 260: end
fstype
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 73 73: def fstype(rbox, disk, index) 74: 75: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 76: disk.refresh! 77: 78: #p rbox.rudy_blkid :s, 'TYPE', :o, 'value', disk.device 79: 80: end
mount
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 172 172: def mount(rbox, disk, index) 173: 174: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 175: disk.refresh! 176: 177: if rbox.stash.windows? 178: Rudy::Huxtable.li "Skipping for Windows" 179: return 180: end 181: 182: attach rbox, disk unless disk.volume_attached? 183: 184: unless @@global.force 185: raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached? 186: raise Rudy::Disks::NotFormatted, disk.name if disk.raw? 187: raise Rudy::Disks::AlreadyMounted, disk.name if disk.mounted? 188: end 189: 190: li "Mounting at #{disk.path}... " 191: 192: rbox.sudo do 193: mkdir(:p, disk.path) 194: mount(:t, disk.fstype, disk.device, disk.path) 195: end 196: 197: disk.mounted = true 198: disk.save :replace 199: sleep 1 200: 201: end
paths
(routine)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 35 35: def paths(routine) 36: return nil unless disks?(routine) 37: routine.disks.values.collect { |d| d.keys }.flatten 38: end
raise_early_exceptions
(type, batch, rset, lbox, argv=nil)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 18 18: def raise_early_exceptions(type, batch, rset, lbox, argv=nil) 19: 20: end
restore
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 291 291: def restore(rbox, disk, index) 292: 293: if disk.exists? 294: li "Disk found: #{disk.name}" 295: disk.refresh! 296: end 297: 298: unless @@global.force 299: raise Rudy::Disks::AlreadyAttached, disk.name if disk.volume_attached? 300: end 301: 302: latest_backup = disk.backups.last 303: 304: if latest_backup.fstype.nil? || latest_backup.fstype.empty? 305: latest_backup.fstype = rbox.stash.default_fstype 306: end 307: 308: disk.size, disk.fstype = latest_backup.size, latest_backup.fstype 309: 310: li "Backup found: #{latest_backup.name}" 311: 312: Rudy::Routines.rescue { 313: unless disk.volume_exists? 314: msg = "Creating volume... " 315: disk.create latest_backup.size, latest_backup.zone, latest_backup.snapid 316: Rudy::Utils.waiter(2, 60, STDOUT, msg) { 317: disk.volume_available? 318: } 319: disk.raw = false 320: disk.save :replace 321: end 322: } 323: 324: attach rbox, disk, index unless disk.volume_attached? 325: mount rbox, disk, index unless disk.mounted? 326: 327: disk.save :replace 328: 329: end
umount
(rbox, disk, index)
[show source]
# File lib/rudy/routines/handlers/disks.rb, line 204 204: def umount(rbox, disk, index) 205: 206: raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists? 207: disk.refresh! 208: 209: unless @@global.force 210: raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached? 211: raise Rudy::Disks::NotMounted, disk.name if !disk.mounted? 212: end 213: 214: li "Unmounting #{disk.path}... " 215: 216: unless rbox.nil? || rbox.stash.windows? 217: rbox.sudo { umount disk.path } 218: end 219: 220: disk.mounted = false 221: disk.save :replace 222: sleep 2 223: 224: end