def _create_template_ebs_volume(self, operation): """ Helper function to create template EBS volume to work on. :param NamedConstant operation: Intended use of created template. A value from ``VolumeOperations``. :returns: Suitable volume in the right start state for input operation. :rtype: boto.ec2.volume.Volume """ volume = EbsVolume() # Irrelevant volume attributes. volume.id = u'vol-9c48a689' volume.create_time = u'2015-07-14T22:46:00.447Z' volume.size = 1 volume.snapshot_id = '' volume.zone = u'us-west-2b' volume.type = u'standard' volume_state_table = VolumeStateTable() state_flow = volume_state_table.table[operation] start_state = state_flow.start_state.value # Interesting volume attribute. volume.status = start_state return volume
def create_volume(self, size, zone, **kwargs): volume = Volume() volume.id = 'vol-' + new_id() volume.size = size volume.zone = zone volume.status = 'available' self.volumes[volume.id] = volume return volume
def run_instance(self, image_id, security_group_ids=None, instance_type='c3.xlarge', placement=None, block_device_map=None, subnet_id=None, user_data=None, ebs_optimized=True, instance_profile_name=None): instance = Instance() instance.id = new_id() instance.image_id = image_id instance.root_device_name = '/dev/sda1' instance._state.code = 0 instance._state.name = 'pending' # Create volumes based on block device data from the image. image = self.get_image(image_id) instance_bdm = BlockDeviceMapping() for device_name, bdm in image.block_device_mapping.iteritems(): # Create a new volume and attach it to the instance. volume = Volume() volume.size = 8 volume.id = new_id() self.volumes[volume.id] = volume bdt = BlockDeviceType(volume_id=volume.id, size=8) instance_bdm[device_name] = bdt instance.block_device_mapping = instance_bdm self.instances[instance.id] = instance if self.run_instance_callback: args = RunInstanceArgs() args.image_id = image_id args.instance_type = instance_type args.ebs_optimized = ebs_optimized args.security_group_ids = security_group_ids args.subnet_id = subnet_id args.user_data = user_data args.instance = instance self.run_instance_callback(args) return instance
def test_wait_for_volume(self): aws_svc, encryptor_image, guest_image = build_aws_service() # Create a dummy volume. volume = Volume() volume.size = 8 volume.id = new_id() volume.status = 'detaching' aws_svc.volumes[volume.id] = volume def transition_to_available(callback_volume): self.num_calls += 1 self.assertEqual(volume, callback_volume) self.assertFalse(self.num_calls > 5) if self.num_calls == 5: volume.status = 'available' aws_svc.get_volume_callback = transition_to_available result = aws_service.wait_for_volume(aws_svc, volume.id) self.assertEqual(volume, result)