| 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 |
|---|