@TaskAction public void createRepository() { List<String> repositoryIds = getRepositoryIds(); if (repositoryIds == null || repositoryIds.isEmpty()) { throw new GradleException("Must specify ECR repositoryIds"); } AmazonECRPluginExtension ext = getProject().getExtensions().getByType(AmazonECRPluginExtension.class); AmazonECR ecr = ext.getClient(); GetAuthorizationTokenResult result = ecr.getAuthorizationToken(new GetAuthorizationTokenRequest() .withRegistryIds(repositoryIds)); authorizationData = result.getAuthorizationData(); } }
@Override protected String run() throws Exception { AmazonECR ecr = AWSClientFactory.create(AmazonECRClientBuilder.standard(), this.getContext()); GetAuthorizationTokenResult token = ecr.getAuthorizationToken(new GetAuthorizationTokenRequest()); if (token.getAuthorizationData().size() != 1) { throw new RuntimeException("Did not get authorizationData from AWS"); } AuthorizationData authorizationData = token.getAuthorizationData().get(0); byte[] bytes = org.apache.commons.codec.binary.Base64.decodeBase64(authorizationData.getAuthorizationToken()); String data = new String(bytes, Charsets.UTF_8); String[] parts = data.split(":"); if (parts.length != 2) { throw new RuntimeException("Got invalid authorizationData from AWS"); } String emailString = this.step.getEmail() ? "-e none" : ""; return String.format("docker login -u %s -p %s %s %s", parts[0], parts[1], emailString, authorizationData.getProxyEndpoint()); }
@Nonnull @Override public Secret getPassword() { final AmazonWebServicesCredentials credentials = getCredentials(); if (credentials == null) throw new IllegalStateException("Invalid credentials"); LOG.log(Level.FINE,"Get Password for {0} region : {1}", new Object[]{credentials.getDisplayName(), region}); if(LOG.isLoggable(Level.ALL)){ String fullStackTrace = org.apache.commons.lang.exception.ExceptionUtils.getStackTrace(new Throwable()); LOG.log(Level.ALL,"Trace : {0}", fullStackTrace); } com.amazonaws.AmazonECRClientFactory factory = new com.amazonaws.AmazonECRClientFactory(); final AmazonECRClient client = factory.getAmazonECRClientWithProxy(credentials.getCredentials()); client.setRegion(Region.getRegion(region)); GetAuthorizationTokenRequest request = new GetAuthorizationTokenRequest(); final GetAuthorizationTokenResult authorizationToken = client.getAuthorizationToken(request); final List<AuthorizationData> authorizationData = authorizationToken.getAuthorizationData(); if (authorizationData == null || authorizationData.isEmpty()) { throw new IllegalStateException("Failed to retrieve authorization token for Amazon ECR"); } LOG.fine("Success "); if(LOG.isLoggable(Level.ALL)){ LOG.finest("Auth token: " + authorizationToken.toString()); LOG.finest("Request: " + request.toString()); } return Secret.fromString(authorizationData.get(0).getAuthorizationToken()); }
public AuthorizationToken getAuthorizationToken(String registryId) { List<AuthorizationData> authList = _awsEcrClient.getAuthorizationToken(new GetAuthorizationTokenRequest() .withRegistryIds(registryId)) .getAuthorizationData(); if ( null == authList || authList.isEmpty() ) return null; AuthorizationData data = authList.get(0); if ( null == data ) return null; return AuthorizationToken.builder() .token(data.getAuthorizationToken()) .endpoint(URI.create(data.getProxyEndpoint())) .build(); }
@Override public AwsToken load(AwsCredentials awsCredentials) throws Exception { AmazonECR amazonECR = new AmazonECRClient(new AWSCredentialsProvider() { @Override public AWSCredentials getCredentials() { return awsCredentials; } @Override public void refresh() { } }); amazonECR.setRegion(RegionUtils.getRegion(awsCredentials.getRegion())); GetAuthorizationTokenResult authorizationToken = amazonECR.getAuthorizationToken(new GetAuthorizationTokenRequest()); List<AuthorizationData> authorizationData = authorizationToken.getAuthorizationData(); Assert.isTrue(!CollectionUtils.isEmpty(authorizationData), "authorizationData is null or empty for token " + authorizationToken); AuthorizationData data = authorizationData.get(0); byte[] decode = Base64.getDecoder().decode(data.getAuthorizationToken()); String token = new String(decode); String[] split = token.split(":"); log.info("about to connect to AWS endpoint: {}", data.getProxyEndpoint()); return AwsToken.builder().username(split[0]).password(split[1]) .expiresAt(data.getExpiresAt()).proxyEndpoint(data.getProxyEndpoint()).build(); }