def diag(aws_svc=None, region='us-west-2', instance_id=None, snapshot_id=None, vpc_id=None, subnet_id=None, security_group_ids=None, diag_instance_type='m3.medium', ssh_keypair=None): if instance_id: snapshot_id = snapshot_log_volume(aws_svc, instance_id).id log.info("Waiting for 30 seconds for snapshot to be available") time.sleep(30) diag_image = DIAG_IMAGES_BY_REGION[region] log.info("Launching diag instance") if not security_group_ids: vpc_id = None if subnet_id: subnet = aws_svc.get_subnet(subnet_id) vpc_id = subnet.vpc_id temp_sg_id = create_diag_security_group(aws_svc, vpc_id=vpc_id).id security_group_ids = [temp_sg_id] log_volume = EBSBlockDeviceType(delete_on_termination=True, snapshot_id=snapshot_id) bdm = BlockDeviceMapping() # Choose /dev/sda3 since it is the first free mountpoint bdm['/dev/sda3'] = log_volume diag_instance = aws_svc.run_instance(diag_image, instance_type=diag_instance_type, ebs_optimized=False, subnet_id=subnet_id, security_group_ids=security_group_ids, block_device_map=bdm) aws_svc.create_tags(diag_instance.id, name=NAME_DIAG_INSTANCE % {'snapshot_id': snapshot_id}, description=DESCRIPTION_DIAG_INSTANCE % {'snapshot_id': snapshot_id}) wait_for_instance(aws_svc, diag_instance.id) diag_instance = aws_svc.get_instance(diag_instance.id) print "Diag instance id: %s" % diag_instance.id if diag_instance.ip_address: print "IP address: %s" % diag_instance.ip_address if diag_instance.private_ip_address: print "Private IP address: %s" % diag_instance.private_ip_address print "User: root" print "SSH Keypair: %s" % ssh_keypair print "Log volume mountpoint: /dev/xbd2a for PV, /dev/xbd2e for HVM"
def test_instance_error_state(self): """ Test that we raise an exception when an instance goes into an error state while we're waiting for it. """ aws_svc, encryptor_image, guest_image = build_aws_service() instance = aws_svc.run_instance(guest_image.id) instance._state.name = 'error' try: encrypt_ami.wait_for_instance(aws_svc, instance.id, timeout=100) except encrypt_ami.InstanceError as e: self.assertTrue('error state' in e.message)
def diag(aws_svc=None, region='us-west-2', instance_id=None, snapshot_id=None, vpc_id=None, subnet_id=None, security_group_ids=None, diag_instance_type='m3.medium', ssh_keypair=None): if instance_id: snapshot_id = snapshot_log_volume(aws_svc, instance_id).id log.info("Waiting for 30 seconds for snapshot to be available") time.sleep(30) diag_image = DIAG_IMAGES_BY_REGION[region] log.info("Launching diag instance") if not security_group_ids: vpc_id = None if subnet_id: subnet = aws_svc.get_subnet(subnet_id) vpc_id = subnet.vpc_id temp_sg_id = create_diag_security_group(aws_svc, vpc_id=vpc_id).id security_group_ids = [temp_sg_id] log_volume = EBSBlockDeviceType( delete_on_termination=True, snapshot_id=snapshot_id) bdm = BlockDeviceMapping() # Choose /dev/sda3 since it is the first free mountpoint bdm['/dev/sda3'] = log_volume diag_instance = aws_svc.run_instance( diag_image, instance_type=diag_instance_type, ebs_optimized=False, subnet_id=subnet_id, security_group_ids=security_group_ids, block_device_map=bdm) aws_svc.create_tags( diag_instance.id, name=NAME_DIAG_INSTANCE % {'snapshot_id': snapshot_id}, description=DESCRIPTION_DIAG_INSTANCE % {'snapshot_id': snapshot_id} ) wait_for_instance(aws_svc, diag_instance.id) diag_instance = aws_svc.get_instance(diag_instance.id) print "Diag instance id: %s" % diag_instance.id if diag_instance.ip_address: print "IP address: %s" % diag_instance.ip_address if diag_instance.private_ip_address: print "Private IP address: %s" % diag_instance.private_ip_address print "User: root" print "SSH Keypair: %s" % ssh_keypair print "Log volume mountpoint: /dev/xbd2a for PV, /dev/xbd2e for HVM"
def test_wait_for_instance_unexpectedly_terminated(self): """ Test that we handle the edge case when an instance is terminated on startup. """ aws_svc, encryptor_image, guest_image = build_aws_service() instance = aws_svc.run_instance(guest_image.id) aws_svc.terminate_instance(instance.id) try: encrypt_ami.wait_for_instance( aws_svc, instance.id, state='running', timeout=100) except encrypt_ami.InstanceError as e: self.assertTrue('unexpectedly terminated' in e.message)
def test_wait_for_instance_terminated(self): """ Test waiting for an instance to terminate. """ aws_svc, encryptor_image, guest_image = build_aws_service() instance = aws_svc.run_instance(guest_image.id) aws_svc.terminate_instance(instance.id) result = encrypt_ami.wait_for_instance( aws_svc, instance.id, state='terminated', timeout=100) self.assertEquals(instance, result)