in aws-core-common/src/main/java/jetbrains/buildServer/clouds/amazon/connector/impl/LinkedAwsConnectionProviderImpl.java [119:188]
public List<ConnectionCredentials> getConnectionCredentialsFromBuild(@NotNull SBuild build) throws ConnectionCredentialsException {
SBuildType buildType = build.getBuildType();
if (buildType == null) {
throw new AwsBuildFeatureException("There is no BuildType for the Build with id: " + build.getBuildId());
}
String failedMessage =
String.format("Failed to inject AWS connection for Build with ID: <%s>, BuildConfiguration: <%s> in Project <%s>: ", build.getBuildId(), buildType.getExternalId(), build.getProjectId());
SProject project = myProjectManager.findProjectById(buildType.getProjectId());
if (project == null) {
throw new AwsBuildFeatureException(failedMessage + "Cannot find this Project");
}
Collection<SBuildFeatureDescriptor> awsConnectionsToInject = build.getBuildFeaturesOfType(AwsConnBuildFeatureParams.AWS_CONN_TO_ENV_VARS_BUILD_FEATURE_TYPE);
if (awsConnectionsToInject.isEmpty()) {
return Collections.emptyList();
}
final boolean subProjectsFeatureEnabled = ParamUtil.toBooleanOrTrue(buildType, AwsCloudConnectorConstants.ALLOWED_IN_SUBPROJECTS_FEATURE_FLAG);
if (subProjectsFeatureEnabled) {
reportInfo(build, "Filtering AWS Connections, injecting connections only from the same project or allowed to be used in SubProjects");
awsConnectionsToInject = awsConnectionsToInject
.stream()
.filter(
awsConnBuildFeature -> {
try {
ConnectionDescriptor awsConnectionToInject = getLinkedConnectionFromParameters(project, awsConnBuildFeature.getParameters());
return
awsConnectionToInject.getProjectId().equals(buildType.getProjectId()) ||
ParamUtil.isAllowedInSubProjects(awsConnectionToInject.getParameters());
} catch (ConnectionCredentialsException e) {
Loggers.CLOUD.warn(String.format("Project %s, Build %s, AWS Connection will not be injected: %s", project.getExternalId(), build.getBuildId(), e.getMessage()));
}
return false;
}
)
.collect(Collectors.toList());
}
final boolean buildStepsFeatureEnabled = ParamUtil.toBooleanOrTrue(buildType, AwsCloudConnectorConstants.ALLOWED_IN_BUILDS_FEATURE_FLAG);
if (buildStepsFeatureEnabled) {
reportInfo(build, "Filtering AWS Connections, injecting connections which are allowed to be used in Builds");
awsConnectionsToInject = awsConnectionsToInject
.stream()
.filter(
awsConnBuildFeature -> {
try {
ConnectionDescriptor awsConnectionToInject = getLinkedConnectionFromParameters(project, awsConnBuildFeature.getParameters());
final String isAllowedInBuildSteps = awsConnectionToInject.getParameters().get(AwsCloudConnectorConstants.ALLOWED_IN_BUILDS_PARAM);
return isAllowedInBuildSteps == null || Boolean.parseBoolean(isAllowedInBuildSteps);
} catch (ConnectionCredentialsException e) {
Loggers.CLOUD.warn(String.format("Project %s, Build %s, AWS Connection will not be injected: %s", project.getExternalId(), build.getBuildId(), e.getMessage()));
}
return false;
}
)
.collect(Collectors.toList());
}
List<ConnectionCredentials> credentialsToInject = new ArrayList<>();
for (SBuildFeatureDescriptor awsConnectionBuildFeature : awsConnectionsToInject) {
credentialsToInject.add(getConnectionCredentials(project, awsConnectionBuildFeature.getParameters()));
}
return credentialsToInject;
}