예제 #1
0
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"
예제 #2
0
 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)
예제 #3
0
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"
예제 #4
0
 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)
예제 #5
0
 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)