Aparna | added 'resize' functionality to the finish_migration() and 'confirm_migration()' methods.
This commit is contained in:
		
							
								
								
									
										33
									
								
								ec2driver.py
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								ec2driver.py
									
									
									
									
									
								
							@@ -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):
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user