diff --git a/scripts/migrate_instance_flavor_id.py b/scripts/migrate_instance_flavor_id.py new file mode 100755 index 0000000..8ddc655 --- /dev/null +++ b/scripts/migrate_instance_flavor_id.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +import os +import sys + +sys.path.append(os.environ.get('STACKTACH_INSTALL_DIR', '/stacktach')) + +import csv +from stacktach import models + + +def migrate_forwards(csv_file_path): + with open(csv_file_path, "r") as f: + for old_flavor, new_flavor in csv.reader(f): + models.InstanceUsage.objects.filter( + instance_type_id=old_flavor, instance_flavor_id=None)\ + .update(instance_flavor_id=new_flavor) + models.InstanceExists.objects.filter( + instance_type_id=old_flavor, instance_flavor_id=None)\ + .update(instance_flavor_id=new_flavor) + models.InstanceReconcile.objects.filter( + instance_type_id=old_flavor, instance_flavor_id=None)\ + .update(instance_flavor_id=new_flavor) + + +def migrate_backwards(csv_file_path): + with open(csv_file_path, "r") as f: + for old_flavor, new_flavor in csv.reader(f): + models.InstanceUsage.objects.filter(instance_flavor_id=new_flavor)\ + .update(instance_flavor_id=None) + models.InstanceExists.objects.filter(instance_flavor_id=new_flavor)\ + .update(instance_flavor_id=None) + models.InstanceReconcile.objects.filter( + instance_flavor_id=new_flavor)\ + .update(instance_flavor_id=None) + +if __name__ == '__main__': + try: + csv_file_path = sys.argv[1] + action = sys.argv[2] + except Exception: + print ("""usage: migrate_flavor_id.py """ + """ """ + """\n\nThe input file for this script can be generated""" + """ using the following SQL query:""" + """\nSELECT id, flavorid""" + """\nINTO OUTFILE '/tmp/flavors.csv'""" + """\nFIELDS TERMINATED BY ','""" + """\nENCLOSED BY '"'""" + """\nLINES TERMINATED BY '\\n'""" + """\nFROM instance_types;""") + sys.exit(2) + + if action == "forwards": + migrate_forwards(csv_file_path) + elif action == "backwards": + migrate_backwards(csv_file_path)