Java 类com.amazonaws.services.ec2.model.DescribeSpotInstanceRequestsResult 实例源码

项目:director-aws-plugin    文件:EC2Provider.java   
/**
 * Checks whether the specified Spot instance request is visible, <em>i.e.</em> can
 * be located by a describe Spot instance request call.
 *
 * @param spotInstanceRequestId the Spot instance request ID
 * @return whether the Spot instance request is visible, <em>i.e.</em> can
 * be located by a describe Spot instance request call
 */
@VisibleForTesting
protected boolean spotInstanceRequestExists(String spotInstanceRequestId) {
  DescribeSpotInstanceRequestsResult result;
  try {
    result = client.describeSpotInstanceRequests(
        new DescribeSpotInstanceRequestsRequest()
            .withSpotInstanceRequestIds(spotInstanceRequestId)
    );
  } catch (AmazonServiceException e) {
    if ("InvalidSpotInstanceRequestID.NotFound".equals(e.getErrorCode())) {
      return false;
    }
    throw AWSExceptions.propagate(e);
  }

  for (SpotInstanceRequest spotInstanceRequest : result.getSpotInstanceRequests()) {
    if (spotInstanceRequestId.equals(spotInstanceRequest.getSpotInstanceRequestId())) {
      return true;
    }
  }
  return false;
}
项目:cloud-runner    文件:Instance.java   
public SpotState getSpotStatus() {
    if (spotRequestId == null)
        return SpotState.SPOT_REQUEST_NOT_FOUND;

    com.amazonaws.services.ec2.AmazonEC2 client = AmazonEC2.connect();

    DescribeSpotInstanceRequestsRequest spotInstanceReq = new DescribeSpotInstanceRequestsRequest();
    List<String> spotInstanceRequestIds = new ArrayList<String>();
    spotInstanceRequestIds.add(spotRequestId);
    spotInstanceReq.setSpotInstanceRequestIds(spotInstanceRequestIds);
    DescribeSpotInstanceRequestsResult res = client
            .describeSpotInstanceRequests(spotInstanceReq);

    List<SpotInstanceRequest> reqs = res.getSpotInstanceRequests();
    if (reqs.size() > 0) {
        SpotInstanceRequest req = reqs.get(0);
        id = req.getInstanceId();
        return SpotState.valueFromRequest(req);
    } else {
        return SpotState.SPOT_REQUEST_NOT_FOUND;
    }
}
项目:cloudbreak    文件:ASGroupStatusCheckerTask.java   
private void checkForSpotRequest(Activity activity, AmazonEC2Client amazonEC2Client) {
    if (WAIT_FOR_SPOT_INSTANCES_STATUS_CODE.equals(activity.getStatusCode())) {
        Pattern pattern = Pattern.compile(SPOT_ID_PATTERN);
        Matcher matcher = pattern.matcher(activity.getStatusMessage());
        if (matcher.find()) {
            String spotId = matcher.group(0);
            DescribeSpotInstanceRequestsResult spotResult = amazonEC2Client.describeSpotInstanceRequests(
                    new DescribeSpotInstanceRequestsRequest().withSpotInstanceRequestIds(spotId));
            Optional<SpotInstanceRequest> request = spotResult.getSpotInstanceRequests().stream().findFirst();
            if (request.isPresent()) {
                if (LOW_SPOT_PRICE_STATUS_CODE.equals(request.get().getStatus().getCode())) {
                    throw new CloudConnectorException(request.get().getStatus().getMessage());
                }
            }

        }
    }
}
项目:incubator-provisionr    文件:GetInstanceIdsFromSpotRequests.java   
@Override
public void execute(AmazonEC2 client, Pool pool, DelegateExecution execution) {
    LOG.info(">> retrieving instance Ids from spot request Ids");

    @SuppressWarnings("unchecked")
    List<String> requestIds =
        (List<String>) execution.getVariable(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS);
    DescribeSpotInstanceRequestsResult result = client.describeSpotInstanceRequests(
        new DescribeSpotInstanceRequestsRequest().withSpotInstanceRequestIds(requestIds));

    List<String> instanceIds = new ArrayList<String>();
    for (SpotInstanceRequest spotRequest : result.getSpotInstanceRequests()) {
        if (spotRequest.getInstanceId() != null) {
            instanceIds.add(spotRequest.getInstanceId());
        }
    }

    execution.setVariable(ProcessVariables.INSTANCE_IDS, instanceIds);
}
项目:incubator-provisionr    文件:AllSpotRequestsMatchPredicate.java   
@Override
public void execute(AmazonEC2 client, Pool pool, DelegateExecution execution) {

    LOG.info(">> Checking if all spot requests match predicate {}", predicate);

    @SuppressWarnings("unchecked")
    List<String> requestIds = (List<String>) execution.getVariable(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS);
    checkNotNull(requestIds, "process variable '{}' not found", ProcessVariables.SPOT_INSTANCE_REQUEST_IDS);

    DescribeSpotInstanceRequestsRequest describeRequest = new DescribeSpotInstanceRequestsRequest();
    describeRequest.setSpotInstanceRequestIds(requestIds);

    // Retrieve all of the requests we want to monitor.
    DescribeSpotInstanceRequestsResult describeResult = client.describeSpotInstanceRequests(describeRequest);
    List<SpotInstanceRequest> requests = describeResult.getSpotInstanceRequests();

    if (Iterables.all(requests, predicate)) {
        LOG.info(">> All {} requests match predicate {} ", requests, predicate);
        execution.setVariable(resultVariable, true);
    } else {
        LOG.info("<< Not all requests {} match predicate {}", requests, predicate);
        execution.setVariable(resultVariable, false);
    }
}
项目:dwtc-extractor    文件:Master.java   
public void shutdownInstances() {
    AmazonEC2 ec2 = new AmazonEC2Client(getAwsCredentials());
    ec2.setEndpoint(getOrCry("ec2endpoint"));

    try {
        // cancel spot request, so no new instances will be launched
        DescribeSpotInstanceRequestsRequest describeRequest = new DescribeSpotInstanceRequestsRequest();
        DescribeSpotInstanceRequestsResult describeResult = ec2
                .describeSpotInstanceRequests(describeRequest);
        List<SpotInstanceRequest> describeResponses = describeResult
                .getSpotInstanceRequests();
        List<String> spotRequestIds = new ArrayList<String>();
        List<String> instanceIds = new ArrayList<String>();

        for (SpotInstanceRequest describeResponse : describeResponses) {
            spotRequestIds.add(describeResponse.getSpotInstanceRequestId());
            if ("active".equals(describeResponse.getState())) {
                instanceIds.add(describeResponse.getInstanceId());
            }
        }
        ec2.cancelSpotInstanceRequests(new CancelSpotInstanceRequestsRequest()
                .withSpotInstanceRequestIds(spotRequestIds));
        log.info("Cancelled spot request");

        if (instanceIds.size() > 0) {
            ec2.terminateInstances(new TerminateInstancesRequest(
                    instanceIds));
            log.info("Shut down " + instanceIds.size() + " instances");
        }

    } catch (Exception e) {
        log.warn("Failed to shutdown instances - ", e);
    }
}
项目:dohko    文件:EC2.java   
public List<SpotInstanceOfferResult> getStatusOfSpotInstanceOffers(String... spotInstanceOfferIds)
{
    DescribeSpotInstanceRequestsResult describeSpotInstanceResult = ec2_.describeSpotInstanceRequests(new DescribeSpotInstanceRequestsRequest()
            .withSpotInstanceRequestIds(spotInstanceOfferIds));

    return toSpotInstanceResults(null, describeSpotInstanceResult.getSpotInstanceRequests());
}
项目:amazon-cloudengine    文件:EC2.java   
public List<String> getActiveSpotInstanceId(
        List<String> spotInstanceRequestIds) {
    DescribeSpotInstanceRequestsRequest describeRequest = new DescribeSpotInstanceRequestsRequest();
    describeRequest.setSpotInstanceRequestIds(spotInstanceRequestIds);

    System.out
            .println("Checking to determine if Spot Bids have reached the active state...");

    List<String> instanceIds = new ArrayList<String>();

    try {
        DescribeSpotInstanceRequestsResult describeResult = ec2
                .describeSpotInstanceRequests(describeRequest);
        List<SpotInstanceRequest> describeResponses = describeResult
                .getSpotInstanceRequests();

        for (SpotInstanceRequest describeResponse : describeResponses) {
            System.out.println(" "
                    + describeResponse.getSpotInstanceRequestId()
                    + " is in the " + describeResponse.getState()
                    + " state.");

            if (describeResponse.getState().equals("open"))
                return null;

            if (describeResponse.getState().equals("active"))
                instanceIds.add(describeResponse.getInstanceId());
        }
    } catch (AmazonServiceException e) {
        System.out.println("Error when calling describeSpotInstances");
        System.out.println("Caught Exception: " + e.getMessage());
        System.out.println("Reponse Status Code: " + e.getStatusCode());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());

        return null;
    }
    return instanceIds;
}
项目:scale.cloudpool    文件:GetSpotInstanceRequest.java   
@Override
public SpotInstanceRequest call() throws AmazonClientException {
    DescribeSpotInstanceRequestsRequest request = new DescribeSpotInstanceRequestsRequest();
    request.withSpotInstanceRequestIds(this.spotInstanceRequestId);
    DescribeSpotInstanceRequestsResult result = getClient().getApi().describeSpotInstanceRequests(request);
    return Iterables.getOnlyElement(result.getSpotInstanceRequests());
}
项目:scale.cloudpool    文件:GetSpotInstanceRequests.java   
@Override
public List<SpotInstanceRequest> call() throws AmazonClientException {
    DescribeSpotInstanceRequestsRequest request = new DescribeSpotInstanceRequestsRequest();
    if (this.spotRequestIds != null) {
        request.withSpotInstanceRequestIds(this.spotRequestIds);
    }
    if (this.filters != null) {
        request.withFilters(this.filters);
    }
    DescribeSpotInstanceRequestsResult result = getClient().getApi().describeSpotInstanceRequests(request);
    return result.getSpotInstanceRequests();
}
项目:clouck    文件:Ec2WrapperImpl.java   
@Override
public List<AbstractResource<?>> describeSpotInstanceRequests(Account account, Region region, DateTime dt, Ec2Filter... filters) {
    AmazonEC2 ec2 = findClient(account, region);

    DescribeSpotInstanceRequestsRequest req = new DescribeSpotInstanceRequestsRequest();
    for (Ec2Filter filter : filters) {
        Filter f = new Filter().withName(filter.getName()).withValues(filter.getValues());
        req.withFilters(f);
    }

    log.debug("start describing spot instance requests for account:{} in region:{} via api", account.getId() + "=>" + account.getName(), region);
    DescribeSpotInstanceRequestsResult res = ec2.describeSpotInstanceRequests(req);

    return converter.toEc2SpotInstanceRequest(res.getSpotInstanceRequests(), account.getId(), region, dt);
}
项目:incubator-provisionr    文件:RunSpotInstances.java   
@Override
public void execute(AmazonEC2 client, Pool pool, DelegateExecution execution) throws IOException {
    /* before sending a new request, we check to see if we already registered
       a launch group with the process ID, if yes, we don't re-send the request */
    final String businessKey = execution.getProcessBusinessKey();

    /* we timeout if requests have already been sent - the activity is being retried. */
    Optional<Object> alreadySent = Optional.fromNullable(
        execution.getVariable(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS));

    if (alreadySent.isPresent()) {
        DescribeSpotInstanceRequestsRequest describeRequest = new DescribeSpotInstanceRequestsRequest()
            .withFilters(new Filter()
                .withName("launch-group").withValues(businessKey)
                .withName("state").withValues("open", "active"));

        Stopwatch stopwatch = new Stopwatch().start();
        while (stopwatch.elapsedTime(TimeUnit.MINUTES) < 2) {
            DescribeSpotInstanceRequestsResult result = client.describeSpotInstanceRequests(describeRequest);
            List<SpotInstanceRequest> pending = result.getSpotInstanceRequests();
            if (pending.size() > 0) {
                LOG.info("Not resending spot instance requests {} for businessKey: {}.", pending, businessKey);
                execution.setVariable(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS,
                    collectSpotInstanceRequestIds(pending));
                return;
            }
            LOG.info("The describe call has not returned anything yet, waiting 20s and retrying.");
            Uninterruptibles.sleepUninterruptibly(20, TimeUnit.SECONDS);
        }
    }

    final RequestSpotInstancesRequest request = createSpotInstancesRequest(pool, execution);
    execution.setVariable(ProcessVariables.SPOT_REQUESTS_SENT, true);
    RequestSpotInstancesResult requestResult = client.requestSpotInstances(request);
    List<String> spotInstanceRequestIds = collectSpotInstanceRequestIds(requestResult.getSpotInstanceRequests());

    execution.setVariable(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS, spotInstanceRequestIds);
}
项目:incubator-provisionr    文件:RunSpotInstancesLiveTest.java   
@Test
public void testRunSpotInstances() throws Exception {
    ProcessVariablesCollector collector = new ProcessVariablesCollector();
    collector.install(execution);

    activity.execute(execution);

    @SuppressWarnings("unchecked")
    ArgumentCaptor<List<String>> argument = (ArgumentCaptor<List<String>>) 
            (Object) ArgumentCaptor.forClass(List.class);
    verify(execution).setVariable(eq(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS), argument.capture());
    when(execution.getVariable(ProcessVariables.SPOT_INSTANCE_REQUEST_IDS)).thenReturn(argument.getValue());
    /* The timeout is needed because the describe calls don't return immediately. */
    // TODO: see if we can eliminate this after adding the process variables conditions
    Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MINUTES);

    // shouldn't do anything
    activity.execute(execution);

    Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MINUTES);

    DescribeSpotInstanceRequestsResult result = client.describeSpotInstanceRequests(
            new DescribeSpotInstanceRequestsRequest().withFilters(new Filter()
                .withName("launch-group").withValues(BUSINESS_KEY)));

    assertThat(result.getSpotInstanceRequests()).hasSize(1);
    /* we also need to sleep before the teardown */
    Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MINUTES);
}
项目:elasticsearch_my    文件:AmazonEC2Mock.java   
@Override
public DescribeSpotInstanceRequestsResult describeSpotInstanceRequests(DescribeSpotInstanceRequestsRequest describeSpotInstanceRequestsRequest) throws AmazonServiceException, AmazonClientException {
    throw new UnsupportedOperationException("Not supported in mock");
}
项目:elasticsearch_my    文件:AmazonEC2Mock.java   
@Override
public DescribeSpotInstanceRequestsResult describeSpotInstanceRequests() throws AmazonServiceException, AmazonClientException {
    throw new UnsupportedOperationException("Not supported in mock");
}
项目:director-aws-plugin    文件:EC2Provider.java   
/**
 * Identifies reusable Spot instance requests orphaned by a previous call.
 *
 * @return the reusable Spot instance requests orphaned by a previous call
 */
@VisibleForTesting
protected Set<String> checkForOrphanedSpotInstanceRequests() {

  Set<String> orphanedSpotInstanceRequests = Sets.newHashSet();

  LOG.info(">> Checking for orphaned Spot instance requests");
  String idTagName = ec2TagHelper.getClouderaDirectorIdTagName();
  DescribeSpotInstanceRequestsRequest describeSpotInstanceRequestsRequest =
      new DescribeSpotInstanceRequestsRequest().withFilters(
          new Filter()
              .withName("tag:" + idTagName)
              .withValues(virtualInstanceIds));
  DescribeSpotInstanceRequestsResult describeSpotInstanceRequestsResult =
      client.describeSpotInstanceRequests(describeSpotInstanceRequestsRequest);
  for (SpotInstanceRequest existingSpotInstanceRequest :
      describeSpotInstanceRequestsResult.getSpotInstanceRequests()) {
    String spotInstanceRequestId = existingSpotInstanceRequest.getSpotInstanceRequestId();
    String virtualInstanceId = null;
    for (Tag tag : existingSpotInstanceRequest.getTags()) {
      if (idTagName.equals(tag.getKey())) {
        virtualInstanceId = tag.getValue();
      }
    }
    if (virtualInstanceId == null) {
      LOG.warn(">> Orphaned Spot instance request {} has no virtual instance id",
          spotInstanceRequestId);
    } else {
      SpotAllocationRecord spotAllocationRecord = getSpotAllocationRecord(virtualInstanceId);
      SpotInstanceState spotInstanceState =
          SpotInstanceState.fromValue(existingSpotInstanceRequest.getState());
      switch (spotInstanceState) {
        case Active:
          spotAllocationRecord.spotInstanceRequestId = spotInstanceRequestId;
          String ec2InstanceId = existingSpotInstanceRequest.getInstanceId();
          LOG.info(">> Reusing fulfilled orphaned Spot instance request {} / {} / {}",
              spotInstanceRequestId, virtualInstanceId, ec2InstanceId);
          if (spotAllocationRecord.ec2InstanceId == null) {
            spotAllocationRecord.ec2InstanceId = ec2InstanceId;
          }
          break;
        case Cancelled:
        case Closed:
        case Failed:
          break;
        default:
          if (existingSpotInstanceRequest.getValidUntil().getTime() > System.currentTimeMillis()) {
            LOG.info(">> Reusing pending orphaned Spot instance request {} / {}",
                spotInstanceRequestId, virtualInstanceId);
            spotAllocationRecord.spotInstanceRequestId = spotInstanceRequestId;
          }
          break;
      }
    }
  }

  return orphanedSpotInstanceRequests;
}
项目:cloudbreak    文件:AwsCheckSpotInstance.java   
@Parameters({"region", "hostGroupToCheck", "scalingAdjustment"})
@Test
public void checkSpotInstance(Regions region, String hostGroupToCheck, @Optional Integer scalingAdjustment) {
    //GIVEN
    Integer spotInstanceCount = 0;
    IntegrationTestContext itContext = getItContext();

    String stackId = itContext.getContextParam(CloudbreakITContextConstants.STACK_ID);

    StackV1Endpoint stackV1Endpoint = getCloudbreakClient().stackV1Endpoint();
    StackResponse stackResponse = stackV1Endpoint.get(Long.valueOf(stackId), new HashSet<>());

    List<InstanceGroupResponse> instanceGroups = stackResponse.getInstanceGroups();

    List<String> instanceIdList = new ArrayList<>();
    List<String> hostGroupList = Arrays.asList(hostGroupToCheck.split(","));

    for (InstanceGroupResponse instanceGroup : instanceGroups) {
        if (hostGroupList.contains(instanceGroup.getGroup())) {
            Set<InstanceMetaDataJson> instanceMetaData = instanceGroup.getMetadata();
            for (InstanceMetaDataJson metaData : instanceMetaData) {
                instanceIdList.add(metaData.getInstanceId());
            }
        }
    }
    //WHEN
    AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion(region).build();
    DescribeSpotInstanceRequestsResult describeSpotInstanceRequestsResult = ec2.describeSpotInstanceRequests();
    List<SpotInstanceRequest> spotInstanceRequests = describeSpotInstanceRequestsResult.getSpotInstanceRequests();
    //THEN
    Assert.assertFalse(spotInstanceRequests.isEmpty());

    List<String> spotInstanceIdList = new ArrayList<>();

    for (SpotInstanceRequest request : spotInstanceRequests) {
        spotInstanceIdList.add(request.getInstanceId());
    }

    for (String id : instanceIdList) {
        Assert.assertTrue(spotInstanceIdList.contains(id));
        if (spotInstanceIdList.contains(id)) {
            spotInstanceCount += 1;
        }
    }

    if (scalingAdjustment != null) {
        Assert.assertNotNull(itContext.getContextParam(CloudbreakITContextConstants.INSTANCE_COUNT, List.class));
        Integer instanceCountPrev = 0;
        for (String hostGroup : hostGroupList) {
            List<Map<String, Integer>> instanceList = itContext.getContextParam(CloudbreakITContextConstants.INSTANCE_COUNT, List.class);
            Assert.assertTrue(instanceList.size() >= 2);
            instanceCountPrev += instanceList.get(instanceList.size() - 2).get(hostGroup);
        }
        Assert.assertEquals(Integer.valueOf(instanceCountPrev + scalingAdjustment), spotInstanceCount);
    }
}