in aws-ecr-repository/src/main/java/software/amazon/ecr/repository/ReadHandler.java [68:138]
public static ResourceModel buildModel(final AmazonWebServicesClientProxy proxy, final ProxyClient<EcrClient> proxyClient, final Repository repo, final Logger logger) {
final String arn = repo.repositoryArn();
final String repositoryUri = repo.repositoryUri();
final String repositoryName = repo.repositoryName();
final String registryId = repo.registryId();
final EcrClient client = proxyClient.client();
Map<String, Object> repositoryPolicyText = null;
LifecyclePolicy lifecyclePolicy = null;
Set<Tag> tags = null;
try {
final GetRepositoryPolicyResponse getRepositoryPolicyResponse = proxy.injectCredentialsAndInvokeV2(Translator.getRepositoryPolicyRequest(repositoryName, registryId), client::getRepositoryPolicy);
repositoryPolicyText = deserializePolicyText(getRepositoryPolicyResponse.policyText());
} catch (RepositoryPolicyNotFoundException e) {
// RepositoryPolicyText is not required so it might not exist
} catch (EcrException e) {
// This is a short term fix for GetAtt backwards compatibility
if (!e.awsErrorDetails().errorCode().equals(ACCESS_DENIED_ERROR_CODE)) {
throw new CfnGeneralServiceException(e.getMessage(), e);
}
logger.log(String.format("AccessDenied error: %s for Repository: %s", e.getMessage(), repo.toString()));
}
try {
final GetLifecyclePolicyResponse getLifecyclePolicyResponse = proxy.injectCredentialsAndInvokeV2(Translator.getLifecyclePolicyRequest(repositoryName, registryId), client::getLifecyclePolicy);
lifecyclePolicy = LifecyclePolicy.builder()
.registryId(getLifecyclePolicyResponse.registryId())
.lifecyclePolicyText(getLifecyclePolicyResponse.lifecyclePolicyText())
.build();
} catch (LifecyclePolicyNotFoundException e) {
// LifecyclePolicy is not required so it might not exist
} catch (EcrException e) {
if (!e.awsErrorDetails().errorCode().equals(ACCESS_DENIED_ERROR_CODE)) {
throw new CfnGeneralServiceException(e.getMessage(), e);
}
logger.log(String.format("AccessDenied error: %s for Repository: %s", e.getMessage(), repo.toString()));
}
try {
final ListTagsForResourceResponse listTagsResponse = proxy.injectCredentialsAndInvokeV2(Translator.listTagsForResourceRequest(arn), client::listTagsForResource);
tags = Translator.translateTagsFromSdk(listTagsResponse.tags());
} catch (EcrException e) {
if (!e.awsErrorDetails().errorCode().equals(ACCESS_DENIED_ERROR_CODE)) {
throw new CfnGeneralServiceException(e.getMessage(), e);
}
logger.log(String.format("AccessDenied error: %s for Repository: %s", e.getMessage(), repo.toString()));
}
EncryptionConfiguration encryptionConfiguration = null;
if (repo.encryptionConfiguration() != null) {
encryptionConfiguration = EncryptionConfiguration.builder()
.encryptionType(repo.encryptionConfiguration().encryptionTypeAsString())
.build();
if (repo.encryptionConfiguration().kmsKey() != null) {
encryptionConfiguration.setKmsKey(repo.encryptionConfiguration().kmsKey());
}
}
return ResourceModel.builder()
.repositoryName(repositoryName)
.lifecyclePolicy(lifecyclePolicy)
.repositoryPolicyText(repositoryPolicyText)
.tags(tags)
.arn(arn)
.repositoryUri(repositoryUri)
.imageScanningConfiguration(ImageScanningConfiguration.builder().scanOnPush(repo.imageScanningConfiguration().scanOnPush()).build())
.imageTagMutability(repo.imageTagMutability().toString())
.encryptionConfiguration(encryptionConfiguration)
.build();
}