lib/veewee/session.rb in HeSYINUvSBZfxqA-veewee-0.203.1 vs lib/veewee/session.rb in HeSYINUvSBZfxqA-veewee-0.203.2

- old
+ new

@@ -262,12 +262,10 @@ exit end checksums=calculate_checksums(@definition,boxname) - transaction(boxname,"0-initial-#{checksums[0]}",checksums) do - #Create the Virtualmachine and set all the memory and other stuff create_vm(boxname) #Create a disk with the same name as the boxname create_disk(boxname) @@ -329,21 +327,18 @@ end puts "" versionfile.close versionfile.delete end - end #initial Transaction counter=1 @definition[:postinstall_files].each do |postinstall_file| filename=File.join(@definition_dir,boxname,postinstall_file) - transaction(boxname,"#{counter}-#{postinstall_file}-#{checksums[counter]}",checksums) do - Veewee::Ssh.when_ssh_login_works("localhost",ssh_options) do begin Veewee::Ssh.transfer_file("localhost",filename,File.basename(filename),ssh_options) rescue RuntimeError puts "error transferring file, possible not enough permissions to write?" @@ -355,11 +350,10 @@ newcommand.gsub!(/%f/,"#{postinstall_file}") puts "***#{newcommand}" Veewee::Ssh.execute("localhost","#{newcommand}",ssh_options) end - end counter+=1 end puts "#{boxname} was built successfully. " @@ -780,128 +774,9 @@ } } end - def self.transaction(boxname,step_name,checksums,&block) - - current_step_nr=step_name.split("-")[0].to_i - - vm=VirtualBox::VM.find(boxname) - snapnames=Array.new - - #If vm exists , look for snapshots - if !vm.nil? - start_snapshot=vm.root_snapshot - snapshot=start_snapshot - counter=0 - - while (snapshot!=nil) - #puts "#{counter}:#{snapshot.name}" - snapnames[counter]=snapshot.name - counter=counter+1 - snapshot=snapshot.children[0] - end - end - - #find the last snapshot matching the state - counter=[snapnames.length, checksums.length].min-1 - last_good_state=counter - for c in 0..counter do - #puts "#{c}- #{snapnames[c]} - #{checksums[c]}" - if !snapnames[c].match("#{c}.*-#{checksums[c]}") - # puts "we found a bad state" - last_good_state=c-1 - break - end - end - #puts "Last good state: #{last_good_state}" - - if (current_step_nr < last_good_state) - #puts "fast forwarding #{step_name}" - return - end - - #puts "Current step: #{current_step_nr}" - if (current_step_nr == last_good_state) - if vm.running? - vm.stop - end - - #invalidate later snapshots - #puts "remove old snapshots" - - for s in (last_good_state+1)..(snapnames.length-1) - puts "Removing step [#{s}] snapshot as it is no more valid" - snapshot=vm.find_snapshot(snapnames[s]) - snapshot.destroy - #puts snapshot - end - - vm.reload - puts "Loading step #{current_step_nr} snapshots as it has not changed" - sleep 2 - goodsnap=vm.find_snapshot(snapnames[last_good_state]) - goodsnap.restore - sleep 2 - #TODO:Restore snapshot!!! - vm.start - sleep 4 - puts "Starting machine" - end - - #puts "last good state #{last_good_state}" - - - if (current_step_nr > last_good_state) - - if (last_good_state==-1) - #no initial snapshot is found, clean machine! - vm=VirtualBox::VM.find(boxname) - - if !vm.nil? - if vm.running? - puts "Stopping machine" - vm.stop - while vm.running? - sleep 1 - end - end - - #detaching cdroms (used to work in 3.x) -# vm.medium_attachments.each do |m| -# if m.type==:dvd -# #puts "Detaching dvd" -# m.detach -# end -# end - - vm.reload - puts "We found no good state so we are destroying the previous machine+disks" - destroy_vm(boxname) - end - - end - - #puts "(re-)executing step #{step_name}" - - - yield - - #Need to look it up again because if it was an initial load - vm=VirtualBox::VM.find(boxname) - puts "Step [#{current_step_nr}] was successfully - saving state" - vm.save_state - sleep 2 #waiting for it to be ok - #puts "about to snapshot #{vm}" - #take snapshot after successful execution - vm.take_snapshot(step_name,"snapshot taken by veewee") - sleep 2 #waiting for it to be started again - vm.start - end - - #pp snapnames - end end #End Class end #End Module