Aparna | added 'resize' functionality to the finish_migration() and 'confirm_migration()' methods.

This commit is contained in:
asparikh
2014-09-08 16:29:58 -05:00
parent 10337162ea
commit 429ef98c43

View File

@@ -32,6 +32,7 @@ from nova.openstack.common import log as logging
from nova.openstack.common import loopingcall from nova.openstack.common import loopingcall
from nova.virt import driver from nova.virt import driver
from nova.virt import virtapi from nova.virt import virtapi
from nova.compute import flavors
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@@ -178,6 +179,7 @@ class EC2Driver(driver.ComputeDriver):
def spawn(self, context, instance, image_meta, injected_files, def spawn(self, context, instance, image_meta, injected_files,
admin_password, network_info=None, block_device_info=None): admin_password, network_info=None, block_device_info=None):
LOG.info("***** Calling SPAWN *******************")
#Creating the EC2 instance #Creating the EC2 instance
instance_type = flavor_map[instance.get_flavor().name] instance_type = flavor_map[instance.get_flavor().name]
reservation = self.ec2_conn.run_instances(aws_ami, instance_type=instance_type) reservation = self.ec2_conn.run_instances(aws_ami, instance_type=instance_type)
@@ -188,6 +190,7 @@ class EC2Driver(driver.ComputeDriver):
self._wait_for_state(instance, ec2_id, "running", power_state.RUNNING) self._wait_for_state(instance, ec2_id, "running", power_state.RUNNING)
def snapshot(self, context, instance, name, update_task_state): def snapshot(self, context, instance, name, update_task_state):
LOG.info("***** Calling SNAPSHOT *******************")
if instance['name'] not in self.instances: if instance['name'] not in self.instances:
raise exception.InstanceNotRunning(instance_id=instance['uuid']) raise exception.InstanceNotRunning(instance_id=instance['uuid'])
update_task_state(task_state=task_states.IMAGE_UPLOADING) update_task_state(task_state=task_states.IMAGE_UPLOADING)
@@ -206,13 +209,18 @@ class EC2Driver(driver.ComputeDriver):
block_device_info=None, bad_volumes_callback=None): block_device_info=None, bad_volumes_callback=None):
if reboot_type == 'SOFT': if reboot_type == 'SOFT':
ec2_id = instance['metadata']['ec2_id'] self._soft_reboot(context, instance, network_info, block_device_info)
self.ec2_conn.reboot_instances(instance_ids=[ec2_id], dry_run=False)
elif reboot_type == 'HARD': elif reboot_type == 'HARD':
self._hard_reboot(context, instance, network_info, block_device_info) self._hard_reboot(context, instance, network_info, block_device_info)
def _soft_reboot(self, context, instance, network_info, block_device_info=None):
LOG.info("***** Calling SOFT REBOOT *******************")
ec2_id = instance['metadata']['ec2_id']
self.ec2_conn.reboot_instances(instance_ids=[ec2_id], dry_run=False)
LOG.info("Soft Reboot Complete.")
def _hard_reboot(self, context, instance, network_info, block_device_info=None): def _hard_reboot(self, context, instance, network_info, block_device_info=None):
LOG.info("Starting Reboot.") LOG.info("***** Calling HARD REBOOT *******************")
self.power_off(instance) self.power_off(instance)
self.power_on(context, instance, network_info, block_device) self.power_on(context, instance, network_info, block_device)
LOG.info("Hard Reboot Complete.") LOG.info("Hard Reboot Complete.")
@@ -257,12 +265,14 @@ class EC2Driver(driver.ComputeDriver):
pass pass
def power_off(self, instance): def power_off(self, instance):
LOG.info("***** Calling POWER OFF *******************")
# Powering off the EC2 instance # Powering off the EC2 instance
ec2_id = instance['metadata']['ec2_id'] ec2_id = instance['metadata']['ec2_id']
self.ec2_conn.stop_instances(instance_ids=[ec2_id], force=False, dry_run=False) self.ec2_conn.stop_instances(instance_ids=[ec2_id], force=False, dry_run=False)
self._wait_for_state(instance, ec2_id, "stopped", power_state.SHUTDOWN) self._wait_for_state(instance, ec2_id, "stopped", power_state.SHUTDOWN)
def power_on(self, context, instance, network_info, block_device_info): def power_on(self, context, instance, network_info, block_device_info):
LOG.info("***** Calling POWER ON *******************")
# Powering on the EC2 instance # Powering on the EC2 instance
ec2_id = instance['metadata']['ec2_id'] ec2_id = instance['metadata']['ec2_id']
self.ec2_conn.start_instances(instance_ids=[ec2_id], dry_run=False) self.ec2_conn.start_instances(instance_ids=[ec2_id], dry_run=False)
@@ -472,10 +482,23 @@ class EC2Driver(driver.ComputeDriver):
def finish_migration(self, context, migration, instance, disk_info, def finish_migration(self, context, migration, instance, disk_info,
network_info, image_meta, resize_instance, network_info, image_meta, resize_instance,
block_device_info=None, power_on=True): block_device_info=None, power_on=True):
return LOG.info("***** Calling FINISH MIGRATION *******************")
def confirm_migration(self, migration, instance, network_info): def confirm_migration(self, migration, instance, network_info):
return LOG.info("***** Calling CONFIRM MIGRATION *******************")
ec2_id = instance['metadata']['ec2_id']
ec_instance_info = self.ec2_conn.get_only_instances(instance_ids=[ec2_id], filters=None, dry_run=False, max_results=None)
ec2_instance = ec_instance_info[0]
new_instance_type_name = flavors.get_flavor(migration['new_instance_type_id'])['name']
# EC2 instance needs to be stopped to modify it's attribute. So we stop the instance,
# modify the instance type in this case, and then restart the instance.
ec2_instance.stop()
self._wait_for_state(instance, ec2_id, "stopped", power_state.SHUTDOWN)
new_instance_type = flavor_map[new_instance_type_name]
ec2_instance.modify_attribute('instanceType', new_instance_type)
ec2_instance.start()
self._wait_for_state(instance, ec2_id, "running", power_state.RUNNING)
def pre_live_migration(self, context, instance_ref, block_device_info, def pre_live_migration(self, context, instance_ref, block_device_info,
network_info, disk, migrate_data=None): network_info, disk, migrate_data=None):