Example #1
0
def handleAddGroup(request):
    yield request.credential.addGroup(request.body['group_name'], request.body['group_description'])
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             True)

    defer.returnValue(request)
def handleListInstances(request):
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             [request.credential.instanceToDict(i)
                              for i in request.state.credentialsCache.getCredential(request.credential.name)['instances']])

    return defer_pipe.ret(request)
Example #3
0
def handleListGroups(request):
    groups = yield request.credential.listGroups()
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             groups)
    
    defer.returnValue(request)                             
def handleListKeypairs(request):
    keypairs = yield request.credential.listKeypairs()
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             keypairs)

    defer.returnValue(request)
def handleRunInstances(request):
    credential = request.credential

    userDataFile = None
    if 'user_data' in request.body:
        userData = credentials_misc.replaceUserDataVariables(
            credential, request.body['user_data'])
        userDataFile = '/tmp/' + global_state.make_ref() + '.conf'
        fout = open(userDataFile, 'w')
        fout.write(userData + '\n')
        fout.close()

    instances = yield credential.runInstances(
        amiId=request.body['ami'],
        key=request.body['key'],
        instanceType=request.body['instance_type'],
        groups=request.body['groups'],
        availabilityZone=request.body.get('availability_zone', None),
        number=request.body.get('num_instances', 1),
        userDataFile=userDataFile,
        log=True)

    if userDataFile:
        os.remove(userDataFile)

    for i in instances:
        log.msg('INSTANCE: instance_id: %s public_dns: %s' %
                (i.instanceId, i.publicDNS))

    yield request.state.credentialsCache.invalidate(credential.name)

    queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                             [credential.instanceToDict(i) for i in instances])
    defer.returnValue(request)
def handleRunSpotInstances(request):
    userDataFile=None
    if 'user_data' in request.body:
        userData = credentials_misc.replaceUserDataVariables(request.credential, request.body['user_data'])
        userDataFile = '/tmp/' + global_state.make_ref() + '.conf'
        fout = open(userDataFile, 'w')
        fout.write(userData + '\n')
        fout.close()    
        
    instances = yield request.credential.runSpotInstances(bidPrice=request.body['bid_price'],
                                                          amiId=request.body['ami'],
                                                          key=request.body['key'],
                                                          instanceType=request.body['instance_type'],
                                                          groups=request.body['groups'],
                                                          availabilityZone=request.body.get('availability_zone', None),
                                                          number=request.body.get('num_instances', 1),
                                                          userDataFile=userDataFile,
                                                          log=True)

    if userDataFile:
        os.remove(userDataFile)

    yield request.state.credentialsCache.invalidate(request.credential.name)
    
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             [request.credential.instanceToDict(i)
                              for i in instances])

    defer.returnValue(request)                                  
Example #7
0
def handleAddKeypair(request):
    yield request.credential.addKeypair(request.body['keypair_name'])
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             True)

    defer.returnValue(request)                             
Example #8
0
def handleCredentialConfig(request):
    conf = config.configToDict(request.credential.credInstance.conf)
    conf = func.updateDict(
        conf, {'general.ctype': request.credential.credential.getCType()})

    queue.returnQueueSuccess(request.mq, request.body['return_queue'], conf)

    return defer_pipe.ret(request)
Example #9
0
def handleCredentialConfig(request):
    conf = config.configToDict(request.credential.credInstance.conf)
    conf = func.updateDict(conf,
                           {'general.ctype': request.credential.credential.getCType()})
    
    queue.returnQueueSuccess(request.mq, request.body['return_queue'], conf)
    
    return defer_pipe.ret(request)
Example #10
0
def handleWWWListAddCredentials(request):

    if 'credential_name' in request.body and core.keysInDict(
        ['credential_name', 'description', 'ctype', 'metadata'], request.body):
        # Users can provide a file name or the actual contents of the
        # certificate.
        if 'cert_file' in request.body:
            cert = open(request.body['cert_file']).read()
        else:
            cert = request.body['cert']

        if 'pkey_file' in request.body:
            pkey = open(request.body['pkey_file']).read()
        else:
            pkey = request.body['pkey']

        conf = config.configFromMap(request.body.get('conf', {}),
                                    base=config.configFromEnv())
        cred = persist.createCredential(name=request.body['credential_name'],
                                        desc=request.body['description'],
                                        ctype=request.body['ctype'],
                                        cert=cert,
                                        pkey=pkey,
                                        active=True,
                                        metadata=request.body['metadata'],
                                        conf=conf)

        taskName = yield tasks_tx.createTaskAndSave('addCredential', 1)

        instantiateAndSaveCredential(taskName, cred,
                                     request.state.credentialPersist)

        queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                                 taskName)
        defer.returnValue(request)
    elif 'credential_name' not in request.body:
        credentials = request.state.credentialsCache.getAllCredentials()

        credentialsDicts = [{
            'name': name,
            'description': c['cred_instance'].credential.desc,
            'num_instances': len(c['instances']),
            'ctype': c['cred_instance'].credential.getCType()
        } for name, c in credentials.iteritems()
                            if ('credential_names' in request.body
                                and name in request.body['credential_names'])
                            or 'credential_names' not in request.body]

        queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                                 credentialsDicts)

        defer.returnValue(request)
    else:
        queue.returnQueueError(request.mq, request.body['return_queue'],
                               'Unknown credential query')

        raise UnknownRequestError(str(request.body))
def handleAuthorizeGroup(request):
    yield request.credential.authorizeGroup(groupName=request.body['group_name'],
                                            protocol=request.body.get('protocol', None),
                                            portRange=request.body['port_range'],
                                            sourceGroup=request.body.get('source_group', None),
                                            sourceGroupUser=request.body.get('source_group_user', None),
                                            sourceSubnet=request.body.get('source_subnet', None))
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             True)

    defer.returnValue(request)                             
def handleUpdateInstances(request):
    convertedInstances = [request.credential.instanceFromDict(i) for i in request.body["instances"]]

    queue.returnQueueSuccess(
        request.mq,
        request.body["return_queue"],
        [
            request.credential.instanceToDict(ci)
            for ci in request.state.credentialsCache.getCredential(request.credential.name)["instances"]
            for i in convertedInstances
            if (ci.spotRequestId and ci.spotRequestId == i.spotRequestId) or ci.instanceId == i.instanceId
        ],
    )

    return defer_pipe.ret(request)
def handleUpdateInstances(request):
    convertedInstances = [
        request.credential.instanceFromDict(i)
        for i in request.body['instances']
    ]

    queue.returnQueueSuccess(request.mq, request.body['return_queue'], [
        request.credential.instanceToDict(ci)
        for ci in request.state.credentialsCache.getCredential(
            request.credential.name)['instances'] for i in convertedInstances
        if (ci.spotRequestId and ci.spotRequestId == i.spotRequestId)
        or ci.instanceId == i.instanceId
    ])

    return defer_pipe.ret(request)
def handleTerminateInstances(request):
    if request.body['instances']:
        yield request.credential.terminateInstances([request.credential.instanceFromDict(i)
                                                    for i in request.body['instances']],
                                                    log=True)

        request.state.credentialsCache.invalidate(request.credential.name)

        queue.returnQueueSuccess(request.mq,
                                 request.body['return_queue'],
                                 True)
    else:
        queue.returnQueueSuccess(request.mq,
                                 request.body['return_queue'],
                                 True)
        
    defer.returnValue(request)
Example #15
0
def handleWWWDeleteCredential(request):
    clusters = yield clusters_client.listClusters('localhost',
                                                  {},
                                                  'guest')

    for cluster in clusters:
        if cluster['cred_name'] == request.body['credential_name']:
            raise CredentialInUseError()

    if not request.body.get('dry_run', False):
        yield request.state.credentialPersist.deleteCredential(request.body['credential_name'])

    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             True)

    defer.returnValue(request)
def handleTerminateInstances(request):
    if request.body['instances']:
        yield request.credential.terminateInstances([
            request.credential.instanceFromDict(i)
            for i in request.body['instances']
        ],
                                                    log=True)

        request.state.credentialsCache.invalidate(request.credential.name)

        queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                                 True)
    else:
        queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                                 True)

    defer.returnValue(request)
Example #17
0
def handleGetCType(request):
    queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                             request.credential.credential.getCType())
    return defer_pipe.ret(request)
Example #18
0
def handleGetCType(request):
    queue.returnQueueSuccess(request.mq,
                             request.body['return_queue'],
                             request.credential.credential.getCType())
    return defer_pipe.ret(request)
Example #19
0
def handleWWWListAddCredentials(request):

    if 'credential_name' in request.body and core.keysInDict(['credential_name',
                                                              'description',
                                                              'ctype',
                                                              'metadata'],
                                                            request.body):
        # Users can provide a file name or the actual contents of the
        # certificate.
        if 'cert_file' in request.body:
            cert = open(request.body['cert_file']).read()
        else:
            cert = request.body['cert']

        if 'pkey_file' in request.body:
            pkey = open(request.body['pkey_file']).read()
        else:
            pkey = request.body['pkey']

        conf = config.configFromMap(request.body.get('conf', {}),
                                    base=config.configFromEnv())
        cred = persist.createCredential(name=request.body['credential_name'],
                                        desc=request.body['description'],
                                        ctype=request.body['ctype'],
                                        cert=cert,
                                        pkey=pkey,
                                        active=True,
                                        metadata=request.body['metadata'],
                                        conf=conf)

        taskName = yield tasks_tx.createTaskAndSave('addCredential', 1)

        instantiateAndSaveCredential(taskName, cred, request.state.credentialPersist)

        queue.returnQueueSuccess(request.mq,
                                 request.body['return_queue'],
                                 taskName)
        defer.returnValue(request)                                       
    elif 'credential_name' not in request.body:
        credentials = request.state.credentialsCache.getAllCredentials()

        credentialsDicts = [{'name': name,
                             'description': c['cred_instance'].credential.desc,
                             'num_instances': len(c['instances']),
                             'ctype': c['cred_instance'].credential.getCType()}
                             for name, c in credentials.iteritems()
                             if ('credential_names' in request.body and name in request.body['credential_names']) or
                             'credential_names' not in request.body]

        
        queue.returnQueueSuccess(request.mq,
                                 request.body['return_queue'],
                                 credentialsDicts)

        defer.returnValue(request)
    else:
        queue.returnQueueError(request.mq,
                               request.body['return_queue'],
                               'Unknown credential query')        
        
        raise UnknownRequestError(str(request.body))
Example #20
0
def handleAddKeypair(request):
    yield request.credential.addKeypair(request.body['keypair_name'])
    queue.returnQueueSuccess(request.mq, request.body['return_queue'], True)

    defer.returnValue(request)
Example #21
0
def handleAddGroup(request):
    yield request.credential.addGroup(request.body['group_name'],
                                      request.body['group_description'])
    queue.returnQueueSuccess(request.mq, request.body['return_queue'], True)

    defer.returnValue(request)
Example #22
0
def handleListGroups(request):
    groups = yield request.credential.listGroups()
    queue.returnQueueSuccess(request.mq, request.body['return_queue'], groups)

    defer.returnValue(request)
def handleListKeypairs(request):
    keypairs = yield request.credential.listKeypairs()
    queue.returnQueueSuccess(request.mq, request.body['return_queue'],
                             keypairs)

    defer.returnValue(request)