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