X-Git-Url: http://xvm.mit.edu/gitweb/invirt/scripts/prod-migration.git/blobdiff_plain/10d545ad7753e9ce129593cd8d5a6f4483587b63..cdc9c24ada16a10982f1327fa4d536774b71898a:/xvm-migrate-machine?ds=inline diff --git a/xvm-migrate-machine b/xvm-migrate-machine index f14c1b2..a58415a 100644 --- a/xvm-migrate-machine +++ b/xvm-migrate-machine @@ -7,24 +7,36 @@ not_ready_yet_do_not_run_me -from invirt import database +from lib import database dev_db_uri = 'postgres://sipb-xen@sipb-xen-dev.mit.edu/sipb_xen' +database.connect(dev_db_uri) +dev_sess = database.session +database.connect() +prod_sess = database.session def take_data(machine_name): ## dump from dev db; save info well - database.connect(dev_db_uri) - database.session.begin() - machine = database.Machine.query().get_by(name=machine_name) - disks = database.Disk.query().filter_by(machine=machine).all() - nics = database.NIC.query().filter_by(machine=machine).all() -## remove from dev db; ideally atomic with dump + dev_sess.begin() + machine = dev_sess.query(database.Machine).filter_by(name=machine_name).one() + + # Clean out the ACL just so we don't have to think about it + machine.acl = [] + dev_sess.update(machine) + + disks = machine.disks + nics = machine.nics for r in disks + nics + [machine]: database.session.delete(r) + database.session.commit() - return machine, disks, nics - + + for r in disks + nics + [machine]: + dev_sess.expunge(i) + del i._instance_key + + return machine ## shut down if up #remctl remote control $MACHINE destroy @@ -37,12 +49,13 @@ ssh t-i dd if=/dev/xenvg/"$lvname" of=/dev/stdout bs=1M \ | dd if=/dev/stdin of=/dev/xenvg/"$lvname" bs=1M ## add to dev db -def restore_data(machine, disks, nics): - database.connect() # to prod DB - database.session.begin() +def restore_data(machine): + machine.type = prod_sess.query(database.Type).filter_by(type_id=machine.type.type_id).one() + prod_sess.begin() ## now copy machine, disks, nics to new ORM objects (yuck, oh well) ## and database.session.save(those) - database.session.commit() + prod_sess.save(machine) + prod_sess.commit() ## power on if desired