Exemple #1
0
def create_launcher_instance(ec2_conn, cf_conn, stack_name, launcher_ami, launcher_instance_type):
    launcher_instances = get_tagged_instances(ec2_conn, {"eggo_stack_name": stack_name, "eggo_node_type": "launcher"})
    if len(launcher_instances) > 0:
        print "Launcher instance ({instance}) already exists. Reusing.".format(
            instance=launcher_instances[0].ip_address
        )
        return launcher_instances[0]

    print "Creating launcher instance."
    # see http://stackoverflow.com/questions/19029588/how-to-auto-assign-public-ip-to-ec2-instance-with-boto
    interface = NetworkInterfaceSpecification(
        subnet_id=get_subnet_id(cf_conn, stack_name),
        groups=[get_security_group_id(cf_conn, stack_name)],
        associate_public_ip_address=True,
    )
    interfaces = NetworkInterfaceCollection(interface)
    reservation = ec2_conn.run_instances(
        launcher_ami, key_name=get_ec2_key_pair(), instance_type=launcher_instance_type, network_interfaces=interfaces
    )
    launcher_instance = reservation.instances[0]

    launcher_instance.add_tag("owner", getuser())
    launcher_instance.add_tag("ec2_key_pair", get_ec2_key_pair())
    launcher_instance.add_tag("eggo_stack_name", stack_name)
    launcher_instance.add_tag("eggo_node_type", "launcher")
    wait_for_instance_state(ec2_conn, launcher_instance)
    execute(install_director_client, hosts=[launcher_instance.ip_address])
    execute(install_private_key, hosts=[launcher_instance.ip_address])
    return launcher_instance
Exemple #2
0
def terminate_launcher_instance(ec2_conn, stack_name):
    launcher_instance = get_launcher_instance(ec2_conn, stack_name)
    launcher_instance.terminate()
    wait_for_instance_state(ec2_conn, launcher_instance, "terminated")