Changeset 496

Show
Ignore:
Timestamp:
06/16/08 14:53:13 (3 months ago)
Author:
mbailey
Message:

added deprec:xen:migrate
shuts down xen instance on one host, copies disk to another host and sets everything up so you can run it

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/deprec/recipes/xen.rb

    r473 r496  
    33  namespace :deprec do 
    44    namespace :xen do 
     5       
     6      # Config variables for migration 
     7      default(:xen_slice) { Capistrano::CLI.ui.ask("Slice name") } 
     8      default(:xen_old_host) { Capistrano::CLI.ui.ask("Old Xen host") } 
     9      default(:xen_new_host) { Capistrano::CLI.ui.ask("New Xen host") } 
     10      set(:xen_disk_size) { Capistrano::CLI.ui.ask("Disk size (GB)") } 
     11      set(:xen_swap_size) { Capistrano::CLI.ui.ask("Swap size (GB)") } 
    512       
    613      # ref: http://www.eadz.co.nz/blog/article/xen-gutsy.html 
     
    106113        sudo "xm info" 
    107114      end 
    108        
     115 
     116      desc "Migrate a slice on one Xen host to another. Slice is stopped, disk is tar'd up and transferred to new host." 
     117      task :migrate do 
     118 
     119        # Get user input for these values 
     120        xen_old_host && xen_new_host && xen_disk_size && xen_swap_size && xen_slice 
     121 
     122        create_lvm_disks 
     123        build_slice_from_tarball 
     124      end 
     125 
     126 
     127      task :copy_xen_disk do 
     128        mnt_dir = "/mnt/#{xen_slice}-disk" 
     129        tarball = "/tmp/#{xen_slice}-disk.tar" 
     130        lvm_disk = "/dev/vm_local/#{xen_slice}-disk" 
     131 
     132        # Shutdown slice 
     133        sudo "xm list | grep #{xen_slice} && xm shutdown #{xen_slice} && sleep 10; exit 0", :hosts => xen_old_host 
     134 
     135        # Tar up disk partition 
     136        sudo "test -d #{mnt_dir} || #{sudo} mkdir #{mnt_dir}; exit 0", :hosts => xen_old_host 
     137        sudo "mount | grep #{mnt_dir} || #{sudo} mount -t auto #{lvm_disk} #{mnt_dir}; exit 0", :hosts => xen_old_host 
     138        sudo "sh -c 'cd #{mnt_dir} && tar cfp #{tarball} *'", :hosts => xen_old_host 
     139        sudo "umount #{mnt_dir}", :hosts => xen_old_host 
     140        sudo "rmdir #{mnt_dir}", :hosts => xen_old_host 
     141 
     142        # start slice again if necessary 
     143        # xm create ${SLICE}.cfg 
     144 
     145        # copy to other server 
     146        run "scp #{tarball} #{xen_new_host}:/tmp/", :hosts => xen_old_host 
     147 
     148        # clean up tarball 
     149        sudo "rm #{tarball}", :hosts => xen_old_host 
     150      end 
     151 
     152      task :copy_slice_config do 
     153        run "scp /etc/xen/#{xen_slice}.cfg #{xen_new_host}:", :hosts => xen_old_host 
     154        sudo "test -f /etc/xen/#{xen_slice}.cfg || #{sudo} mv #{xen_slice}.cfg /etc/xen/", :hosts => xen_new_host 
     155      end 
     156 
     157      task :create_lvm_disks do 
     158        xen_new_host 
     159        # create lvm disks on new host 
     160        disks = {"#{xen_slice}-disk" => xen_disk_size, "#{xen_slice}-swap" => xen_swap_size} 
     161        disks.each { |disk, size| 
     162          puts "Creating #{disk} (#{size} GB)" 
     163          sudo "lvcreate -L #{size}G -n #{disk} vm_local", :hosts => xen_new_host 
     164          sudo "mkfs.ext3 /dev/vm_local/#{disk}", :hosts => xen_new_host 
     165        } 
     166      end 
     167 
     168      task :build_slice_from_tarball do 
     169        mnt_dir = "/mnt/#{xen_slice}-disk" 
     170        tarball = "/tmp/#{xen_slice}-disk.tar" 
     171        lvm_disk = "/dev/vm_local/#{xen_slice}-disk" 
     172 
     173        # untar archive into lvm disk 
     174        sudo "test -d #{mnt_dir} || #{sudo} mkdir #{mnt_dir}; exit 0", :hosts => xen_new_host 
     175        sudo "mount | grep #{mnt_dir} || #{sudo} mount -t auto #{lvm_disk} #{mnt_dir}; exit 0", :hosts => xen_new_host 
     176        sudo "sh -c 'cd #{mnt_dir} && tar xf #{tarball}'", :hosts => xen_new_host 
     177        sudo "umount #{mnt_dir}", :hosts => xen_new_host 
     178        sudo "rmdir #{mnt_dir}", :hosts => xen_new_host 
     179      end 
    109180       
    110181