commit 7505ce2f51b447e6496d1ecff2e561ed64f6e560 Author: Josh Edwards Date: Fri May 1 14:13:50 2015 -0400 Allowing the plugin to reference Hudson/Jenkins proxy settings and use them when accessing AWS diff --git a/pom.xml b/pom.xml index 63cd047..a5b14f2 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ com.amazonaws aws-java-sdk - 1.3.32 + 1.9.33 commons-logging @@ -47,6 +47,11 @@ + org.apache.httpcomponents + httpcore + 4.4 + + org.mockito mockito-core 1.8.0 diff --git a/src/main/java/com/syncapse/jenkinsci/plugins/awscloudformationwrapper/CloudFormation.java b/src/main/java/com/syncapse/jenkinsci/plugins/awscloudformationwrapper/CloudFormation.java index 9ca520f..24d37d2 100644 --- a/src/main/java/com/syncapse/jenkinsci/plugins/awscloudformationwrapper/CloudFormation.java +++ b/src/main/java/com/syncapse/jenkinsci/plugins/awscloudformationwrapper/CloudFormation.java @@ -11,7 +11,9 @@ import java.util.Map; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; +import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.cloudformation.AmazonCloudFormation; import com.amazonaws.services.cloudformation.AmazonCloudFormationAsyncClient; @@ -32,6 +34,9 @@ import com.amazonaws.services.cloudformation.model.StackStatus; import com.amazonaws.services.cloudformation.model.StackSummary; import com.google.common.collect.Lists; import hudson.EnvVars; +import hudson.ProxyConfiguration; +import hudson.model.Hudson; + import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; @@ -231,11 +236,30 @@ public class CloudFormation { protected AmazonCloudFormation getAWSClient() { AWSCredentials credentials = new BasicAWSCredentials(this.awsAccessKey, this.awsSecretKey); + + Hudson hudson = Hudson.getInstance(); + ProxyConfiguration proxyConfig = hudson != null ? hudson.proxy : null; + if (proxyConfig != null && proxyConfig.name != null) { + ClientConfiguration config = new ClientConfiguration(); + config.setProxyHost(proxyConfig.name); + config.setProxyPort(proxyConfig.port); + config.setProxyUsername(proxyConfig.getUserName()); + config.setProxyPassword(proxyConfig.getPassword()); + config.setPreemptiveBasicProxyAuth(true); + AWSCredentialsProvider provider = new BasicAWSCredentialsProvider(credentials); + AmazonCloudFormation amazonClient = new AmazonCloudFormationAsyncClient( + provider, config); + + amazonClient.setEndpoint(awsRegion.endPoint); + return amazonClient; + } else { AmazonCloudFormation amazonClient = new AmazonCloudFormationAsyncClient( credentials); + amazonClient.setEndpoint(awsRegion.endPoint); return amazonClient; } + } private boolean waitForStackToBeDeleted() { @@ -446,3 +470,21 @@ public class CloudFormation { return map; } } + +class BasicAWSCredentialsProvider implements AWSCredentialsProvider { + + AWSCredentials awsCredentials; + + public BasicAWSCredentialsProvider(AWSCredentials awsCredentials) { + this.awsCredentials = awsCredentials; + } + + public AWSCredentials getCredentials() { + return awsCredentials; + } + + public void refresh() { + + } + +}