Esempio n. 1
0
def launch_ami(c, ami_id, count, security_groups, tags):
    """
    Launches and tags count instances of the given ami_id.  Applies
    security groups and tags.  Only returns after the instances are running.

    Does not wait for services on the host to start.
    """
    session = c["session"]
    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource("ec2", region_name=region_name)

    response = ec2_client.run_instances(
        ImageId=ami_id, MinCount=count, KeyName=c["ssh_key_name"], MaxCount=count, SecurityGroups=security_groups
    )

    ids = []
    new_id = None
    for instance in response["Instances"]:
        new_id = instance["InstanceId"]
        i_obj = ec2_region.Instance(new_id)
        i_obj.create_tags(Tags=get_tag_structure(tags))

        ids.append(new_id)

    # Wait for it to be running...
    waiter = ec2_client.get_waiter("instance_running")
    print "Waiting on IDs: ", ids
    waiter.wait(InstanceIds=ids)
    print "Done waiting!"

    return ids
Esempio n. 2
0
def create_ami_from_instance(c, instance_id, ami_name, tags):
    """
    Given a running instance, this will create a new AMI.

    Note - this will stop your running instance.
    """
    session = c["session"]
    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource("ec2", region_name=region_name)
    ec2_client.stop_instances(InstanceIds=[instance_id])
    waiter = ec2_client.get_waiter("instance_stopped")
    waiter.wait(InstanceIds=[instance_id])

    # Remove any ami that already exists with our name.
    try:
        name_filter = [{"Name": "name", "Values": [ami_name]}]

        images = ec2_client.describe_images(Filters=name_filter)
        image_id = images["Images"][0]["ImageId"]
        print "Deregistering AMI: ", image_id
        ec2_client.deregister_image(ImageId=image_id)
    except Exception as ex:
        print "Error deregistring ami: ", ex

    instance = ec2_region.Instance(instance_id)
    image = instance.create_image(Name=ami_name)
    new_ami_id = image.id
    ami = ec2_region.Image(new_ami_id)

    tags = get_tag_structure(tags)
    ami.create_tags(Tags=tags)

    print "Waiting on AMI..."
    waiter = ec2_client.get_waiter("image_available")
    waiter.wait(ImageIds=[new_ami_id])
    print "Done"

    return new_ami_id
Esempio n. 3
0
def create_ami_from_instance(c, instance_id, ami_name, tags):
    """
    Given a running instance, this will create a new AMI.

    Note - this will stop your running instance.
    """
    session = c["session"]
    region_name = c["region_name"]
    ec2_client = session.client('ec2')
    ec2_region = session.resource('ec2', region_name=region_name)
    ec2_client.stop_instances(InstanceIds=[instance_id])
    waiter = ec2_client.get_waiter("instance_stopped")
    waiter.wait(InstanceIds=[instance_id])

    # Remove any ami that already exists with our name.
    try:
        name_filter = [{'Name': 'name', 'Values': [ami_name]}]

        images = ec2_client.describe_images(Filters=name_filter)
        image_id = images["Images"][0]["ImageId"]
        print "Deregistering AMI: ", image_id
        ec2_client.deregister_image(ImageId=image_id)
    except Exception as ex:
        print "Error deregistring ami: ", ex

    instance = ec2_region.Instance(instance_id)
    image = instance.create_image(Name=ami_name)
    new_ami_id = image.id
    ami = ec2_region.Image(new_ami_id)

    tags = get_tag_structure(tags)
    ami.create_tags(Tags=tags)

    print "Waiting on AMI..."
    waiter = ec2_client.get_waiter('image_available')
    waiter.wait(ImageIds=[new_ami_id])
    print "Done"

    return new_ami_id
Esempio n. 4
0
def launch_ami(c, ami_id, count, security_groups, tags):
    """
    Launches and tags count instances of the given ami_id.  Applies
    security groups and tags.  Only returns after the instances are running.

    Does not wait for services on the host to start.
    """
    session = c["session"]
    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    response = ec2_client.run_instances(
        ImageId=ami_id,
        MinCount=count,
        KeyName=c["ssh_key_name"],
        MaxCount=count,
        SecurityGroups=security_groups,
    )

    ids = []
    new_id = None
    for instance in response["Instances"]:
        new_id = instance["InstanceId"]
        i_obj = ec2_region.Instance(new_id)
        i_obj.create_tags(Tags=get_tag_structure(tags))

        ids.append(new_id)

    # Wait for it to be running...
    waiter = ec2_client.get_waiter('instance_running')
    print "Waiting on IDs: ", ids
    waiter.wait(InstanceIds=ids)
    print "Done waiting!"

    return ids