/** * Check that the AMI requested is available in the cloud and can be used. */
 public FormValidation doValidateAmi(
     @QueryParameter boolean useInstanceProfileForCredentials,
     @QueryParameter String credentialsId,
     @QueryParameter String ec2endpoint,
     @QueryParameter String region,
     final @QueryParameter String ami)
     throws IOException {
   AWSCredentialsProvider credentialsProvider =
       EC2Cloud.createCredentialsProvider(useInstanceProfileForCredentials, credentialsId);
   AmazonEC2 ec2;
   if (region != null) {
     ec2 = EC2Cloud.connect(credentialsProvider, AmazonEC2Cloud.getEc2EndpointUrl(region));
   } else {
     ec2 = EC2Cloud.connect(credentialsProvider, new URL(ec2endpoint));
   }
   if (ec2 != null) {
     try {
       List<String> images = new LinkedList<String>();
       images.add(ami);
       List<String> owners = new LinkedList<String>();
       List<String> users = new LinkedList<String>();
       DescribeImagesRequest request = new DescribeImagesRequest();
       request.setImageIds(images);
       request.setOwners(owners);
       request.setExecutableUsers(users);
       List<Image> img = ec2.describeImages(request).getImages();
       if (img == null || img.isEmpty()) {
         // de-registered AMI causes an empty list to be
         // returned. so be defensive
         // against other possibilities
         return FormValidation.error("No such AMI, or not usable with this accessId: " + ami);
       }
       String ownerAlias = img.get(0).getImageOwnerAlias();
       return FormValidation.ok(
           img.get(0).getImageLocation() + (ownerAlias != null ? " by " + ownerAlias : ""));
     } catch (AmazonClientException e) {
       return FormValidation.error(e.getMessage());
     }
   } else return FormValidation.ok(); // can't test
 }
  public Request<DescribeImagesRequest> marshall(DescribeImagesRequest describeImagesRequest) {

    if (describeImagesRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DescribeImagesRequest> request =
        new DefaultRequest<DescribeImagesRequest>(describeImagesRequest, "AmazonEC2");
    request.addParameter("Action", "DescribeImages");
    request.addParameter("Version", "2016-04-01");
    request.setHttpMethod(HttpMethodName.POST);

    com.amazonaws.internal.SdkInternalList<String> imageIdsList =
        (com.amazonaws.internal.SdkInternalList<String>) describeImagesRequest.getImageIds();
    if (!imageIdsList.isEmpty() || !imageIdsList.isAutoConstruct()) {
      int imageIdsListIndex = 1;

      for (String imageIdsListValue : imageIdsList) {
        if (imageIdsListValue != null) {
          request.addParameter(
              "ImageId." + imageIdsListIndex, StringUtils.fromString(imageIdsListValue));
        }
        imageIdsListIndex++;
      }
    }

    com.amazonaws.internal.SdkInternalList<String> ownersList =
        (com.amazonaws.internal.SdkInternalList<String>) describeImagesRequest.getOwners();
    if (!ownersList.isEmpty() || !ownersList.isAutoConstruct()) {
      int ownersListIndex = 1;

      for (String ownersListValue : ownersList) {
        if (ownersListValue != null) {
          request.addParameter("Owner." + ownersListIndex, StringUtils.fromString(ownersListValue));
        }
        ownersListIndex++;
      }
    }

    com.amazonaws.internal.SdkInternalList<String> executableUsersList =
        (com.amazonaws.internal.SdkInternalList<String>) describeImagesRequest.getExecutableUsers();
    if (!executableUsersList.isEmpty() || !executableUsersList.isAutoConstruct()) {
      int executableUsersListIndex = 1;

      for (String executableUsersListValue : executableUsersList) {
        if (executableUsersListValue != null) {
          request.addParameter(
              "ExecutableBy." + executableUsersListIndex,
              StringUtils.fromString(executableUsersListValue));
        }
        executableUsersListIndex++;
      }
    }

    com.amazonaws.internal.SdkInternalList<Filter> filtersList =
        (com.amazonaws.internal.SdkInternalList<Filter>) describeImagesRequest.getFilters();
    if (!filtersList.isEmpty() || !filtersList.isAutoConstruct()) {
      int filtersListIndex = 1;

      for (Filter filtersListValue : filtersList) {

        if (filtersListValue.getName() != null) {
          request.addParameter(
              "Filter." + filtersListIndex + ".Name",
              StringUtils.fromString(filtersListValue.getName()));
        }

        com.amazonaws.internal.SdkInternalList<String> valuesList =
            (com.amazonaws.internal.SdkInternalList<String>) filtersListValue.getValues();
        if (!valuesList.isEmpty() || !valuesList.isAutoConstruct()) {
          int valuesListIndex = 1;

          for (String valuesListValue : valuesList) {
            if (valuesListValue != null) {
              request.addParameter(
                  "Filter." + filtersListIndex + ".Value." + valuesListIndex,
                  StringUtils.fromString(valuesListValue));
            }
            valuesListIndex++;
          }
        }
        filtersListIndex++;
      }
    }

    return request;
  }
  public Request<DescribeImagesRequest> marshall(DescribeImagesRequest describeImagesRequest) {

    if (describeImagesRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DescribeImagesRequest> request =
        new DefaultRequest<DescribeImagesRequest>(describeImagesRequest, "AmazonEC2");
    request.addParameter("Action", "DescribeImages");
    request.addParameter("Version", "2012-10-01");

    java.util.List<String> imageIdsList = describeImagesRequest.getImageIds();
    int imageIdsListIndex = 1;

    for (String imageIdsListValue : imageIdsList) {
      if (imageIdsListValue != null) {
        request.addParameter(
            "ImageId." + imageIdsListIndex, StringUtils.fromString(imageIdsListValue));
      }

      imageIdsListIndex++;
    }

    java.util.List<String> ownersList = describeImagesRequest.getOwners();
    int ownersListIndex = 1;

    for (String ownersListValue : ownersList) {
      if (ownersListValue != null) {
        request.addParameter("Owner." + ownersListIndex, StringUtils.fromString(ownersListValue));
      }

      ownersListIndex++;
    }

    java.util.List<String> executableUsersList = describeImagesRequest.getExecutableUsers();
    int executableUsersListIndex = 1;

    for (String executableUsersListValue : executableUsersList) {
      if (executableUsersListValue != null) {
        request.addParameter(
            "ExecutableBy." + executableUsersListIndex,
            StringUtils.fromString(executableUsersListValue));
      }

      executableUsersListIndex++;
    }

    java.util.List<Filter> filtersList = describeImagesRequest.getFilters();
    int filtersListIndex = 1;

    for (Filter filtersListValue : filtersList) {
      Filter filterMember = filtersListValue;
      if (filterMember != null) {
        if (filterMember.getName() != null) {
          request.addParameter(
              "Filter." + filtersListIndex + ".Name",
              StringUtils.fromString(filterMember.getName()));
        }

        java.util.List<String> valuesList = filterMember.getValues();
        int valuesListIndex = 1;

        for (String valuesListValue : valuesList) {
          if (valuesListValue != null) {
            request.addParameter(
                "Filter." + filtersListIndex + ".Value." + valuesListIndex,
                StringUtils.fromString(valuesListValue));
          }

          valuesListIndex++;
        }
      }

      filtersListIndex++;
    }

    return request;
  }