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