Ejemplo n.º 1
0
def ec2_hosts():
    hosts = []
    conn = aws.EC2Connection(settings.AWS_ACCESS_KEY, settings.AWS_SECERT_KEY)
    for r in conn.get_all_instances():
        for i in r.instances:
            hosts.append(instance2dict(i))
    return hosts
Ejemplo n.º 2
0
def num_instances():
    """ Calculate the number of active (booting or running) instances
    """
    count = 0

    ec2_conn = connection.EC2Connection(settings.AWS_ACCESS_KEY_ID,
                                        settings.AWS_SECRET_ACCESS_KEY)

    for reservation in ec2_conn.get_all_instances():
        for instance in reservation.instances:
            if instance.state in ('pending', 'running'):
                count += 1

    return count
def test_instance(stackid, sshkey):
    print("## Testing Instance")

    print("### Get Instance ID from CloudFormation")
    cfcn = cfconnection.CloudFormationConnection()
    stack = cfcn.describe_stacks(stackid)[0]
    resource = stack.list_resources()[0]
    instanceid = resource.physical_resource_id

    print("### Get Instance Info")
    ec2cn = ec2connection.EC2Connection()
    instance = ec2cn.get_only_instances(instanceid)[0]

    print("### Waiting for Reboot (2m)")
    instance.reboot()
    sleep(120)

    print("### Get Public DNS Name of Instance")
    dnsname = instance.public_dns_name

    print("### Setup Fabric")
    fabfile.env.host_string = dnsname
    fabfile.env.user = '******'
    fabfile.env.key_filename = sshkey
    fabfile.env.disable_known_hosts = True
    fabfile.env.warn_only = True

    print("### Run Fabric Checks")
    fabfile.check_mount_points()
    fabfile.check_package_install()
    fabfile.check_readahead()
    fabfile.check_config()
    fabfile.check_datadir()
    fabfile.check_keepalive()
    fabfile.check_zone_reclaim()
    fabfile.check_thp()
    fabfile.check_ulimits()
    fabfile.check_service()
    fabfile.check_chkconfig()
    fabfile.check_mmsagent()
    fabfile.cleanup()

    print("## Testing Completed")
Ejemplo n.º 4
0
def process_request_api(id, key="stockfish", instance_type="m1.medium", image_prefix = "ec2stockfish", debug=False, start=False,
                        stop=False, get_status=False, dryrun=False):
    ec2conn = connection.EC2Connection()
    if not dryrun:
        if get_status:
            if not id:
                raise Exception("Need a --id option for uniquely querying image")
            i = get_instance(ec2conn, id, image_prefix= image_prefix)
            if i:
                print json.dumps({"id": id, "state": i.state, "dns_name":i.dns_name})
            else:
                print json.dumps({"id": id, "state": "Not found"})
                # print "id: {0}, state: {1}".format(options.id, i.state)

        # if 0 < num_instances_to_start <= options.max_instances:
        elif stop:
            if not id:
                raise Exception("Need a --id option for terminating image")
            i = get_instance(ec2conn, id, image_prefix= image_prefix)
            if i:
                ec2conn.terminate_instances(instance_ids=[i.id])
                print json.dumps({"id": id, "state": "terminated"})

                # print "id: {0}, state: terminated".format(options.id)
        elif start:
            if not id:
                raise Exception("Need a --id option for uniquely associating your image")
            start_instances(ec2conn, image_name= image_prefix, key = key, num = 1, instance_type = instance_type)

        # if num_instances_to_start >=0:
        #     # Remove soft-delete tags as we need to keep instances!
        #     remove_soft_delete_instances(running_instances)

        # elif num_instances_to_start < 0:
        #     # Execute only forcestop for now, hysterisis later
        #     update_sqs_queue(options.queue, options.ctrl_queue, queue_size)
    else:
        print "Dryrun, not doing anything"
def package(stackid, iops=1000, enterprise=False):
    print("## Packaging Instance")

    print("### Get Instance ID from CloudFormation")
    cfcn = cfconnection.CloudFormationConnection()
    stack = cfcn.describe_stacks(stackid)[0]
    resource = stack.list_resources()[0]
    instanceid = resource.physical_resource_id

    print("### Get Instance Information from EC2")
    ec2cn = ec2connection.EC2Connection()
    instance = ec2cn.get_only_instances(instanceid)[0]

    if enterprise is False:
        name = "MongoDB {version} {iops} IOPS".format(version=MONGODB_VERSION,
                                                      iops=iops)
        description = "MongoDB {version} {iops} IOPS".format(
            version=MONGODB_VERSION, iops=iops)
    else:
        name = "MongoDB Standard {version} {iops} IOPS".format(
            version=MONGODB_VERSION, iops=iops)
        description = "MongoDB Standard {version} {iops} IOPS".format(
            version=MONGODB_VERSION, iops=iops)

    print("### Creating AMI For Instance {instanceid}".format(
        instanceid=instanceid))
    imageid = ec2cn.create_image(
        instanceid,
        name,
        description,
        no_reboot=False,
        block_device_mapping=instance.block_device_mapping)

    print("### Instance AMI Created {imageid}".format(imageid=imageid))
    print("## Packaging Complete")

    return imageid
Ejemplo n.º 6
0
        for i in r.instances:
            hosts.append(instance2dict(i))
    return hosts


roles = {}
for host in ec2_hosts():
    for tag in host['tags']:
        try:
            roles[tag].append(host['ip_address'])
        except KeyError:
            roles[tag] = [host['ip_address']]

fab.env.roledefs.update(roles)

ec2_conn = aws.EC2Connection(settings.AWS_ACCESS_KEY, settings.AWS_SECERT_KEY)


def host_yaml(host):
    s = '---\n'
    for key, val in host.iteritems():
        if hasattr(val, '__iter__'):
            s += '%s: %s\n' % (key, ', '.join(val))
        else:
            s += '%s: %s\n' % (key, val)
    return s.strip('\n')


# End support

# Begin tasks