Changeset 1626 for trunk/scripts/xvm-migrate-machine
- Timestamp:
- Nov 12, 2008, 10:38:38 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/scripts/xvm-migrate-machine
r1620 r1626 1 1 #!/bin/python 2 # Migrates the machine named $1from the dev cluster.2 # Migrates the machine passed as arguments from the dev cluster. 3 3 # To be run on the prod cluster. 4 4 … … 7 7 not_ready_yet_do_not_run_me 8 8 9 9 from invirt import remctl as r 10 10 from lib import database 11 import subprocess 12 import sys 11 13 12 14 dev_db_uri = 'postgres://sipb-xen@sipb-xen-dev.mit.edu/sipb_xen' … … 17 19 prod_sess = database.session 18 20 21 ## dump from dev db 19 22 def take_data(machine_name): 20 ## dump from dev db; save info well21 23 dev_sess.begin() 22 24 machine = dev_sess.query(database.Machine).filter_by(name=machine_name).one() … … 29 31 nics = machine.nics 30 32 for r in disks + nics + [machine]: 31 d atabase.session.delete(r)33 dev_sess.delete(r) 32 34 33 d atabase.session.commit()35 dev_sess.commit() 34 36 35 37 for r in disks + nics + [machine]: … … 39 41 return machine 40 42 41 ## shut down if up 42 #remctl remote control $MACHINE destroy 43 44 ## copy disk image... copy, copy... 45 ## for each disk: 46 lvname="d_${MACHINE}_${guest_device_name}" 47 lvcreate xenvg -n "$lvname" -L "${size}"M 48 ssh t-i dd if=/dev/xenvg/"$lvname" of=/dev/stdout bs=1M \ 49 | dd if=/dev/stdin of=/dev/xenvg/"$lvname" bs=1M 50 51 ## add to dev db 43 ## add to prod db 52 44 def restore_data(machine): 45 # The machine's type is still the one attached to the dev database; 46 # get the right one 53 47 machine.type = prod_sess.query(database.Type).filter_by(type_id=machine.type.type_id).one() 54 48 prod_sess.begin() 55 ## now copy machine, disks, nics to new ORM objects (yuck, oh well)56 ## and database.session.save(those)57 49 prod_sess.save(machine) 58 50 prod_sess.commit() 51 52 def migrate_vm(machine_name): 53 # Power off the VM on dev 54 # 55 # This has to be done first, because once the machine is deleted 56 # from the database, we can't remctl for it anymore 57 out, err = r.remctl('xvm-remote.mit.edu', 'control', machine_name, 'destroy', err=True) 58 print out 59 60 machine = take_data(machine_name) 61 62 ## copy disk image... copy, copy... 63 for disk in machine.disks: 64 lvname='d_%s_%s' % (machine.name, disk.guest_device_name) 65 66 subprocess.check_call(['lvcreate', '-L%sM' % str(disk.size), '-n', lvname, 'xenvg']) 67 68 ssh = subprocess.Popen(['ssh', '-o', 'GSSAPIDelegateCredentials=no', 69 'torchwood-institute.mit.edu', 70 'dd', 'if=/dev/xenvg/%s' % lvname, 'bs=1M'], 71 stdout=subprocess.PIPE) 72 dd = subprocess.Popen(['dd', 'of=/dev/xenvg/%s' % lvname, 'bs=1M'], 73 stdin=ssh.stdout) 74 dd.wait() 75 76 restore_data(machine) 59 77 60 61 ## power on if desired 62 63 78 if __name__ == '__main__': 79 for vm in sys.argv[1:]: 80 print '===============================================' 81 print 'Migrating %s' % vm 82 print '===============================================' 83 migrate_vm(vm.strip())
Note: See TracChangeset
for help on using the changeset viewer.