in src/jetbrains/buildServer/clouds/local/LocalCloudClient.java [26:79]
public LocalCloudClient(@NotNull final CloudClientParameters params) {
final String images = params.getParameter(LocalCloudConstants.IMAGES_PROFILE_SETTING);
if (images == null || images.trim().length() == 0) {
myErrorInfo = new CloudErrorInfo("No images specified");
return;
}
final IdGenerator imageIdGenerator = new IdGenerator();
final StringBuilder error = new StringBuilder();
final String[] allLines = StringUtil.splitByLines(images.trim());
for (String imageInfo : allLines) {
imageInfo = imageInfo.trim();
if (imageInfo.isEmpty() || imageInfo.startsWith("@@")) continue;
final int atPos = imageInfo.indexOf('@');
if (atPos < 0) {
error.append(" Failed to parse image info: \"").append(imageInfo).append("\".");
continue;
}
final String imageName = imageInfo.substring(0, atPos).trim();
final String agentHomePath = imageInfo.substring(atPos + 1).trim();
final LocalCloudImage image = new LocalCloudImage(imageIdGenerator.next(), imageName, agentHomePath, myExecutor);
for (String line : allLines) {
String prefix = "@@" + imageName + ":";
if (!line.startsWith(prefix)) continue;
line = line.substring(prefix.length()).trim();
if (line.contains("reuse")) image.setIsReusable(true);
if (line.contains("delay")) image.setIsEternalStarting(true);
if (line.contains("agentPoolId:")) {
String poolIdStr = line.substring("agentPoolId:".length());
try {
Integer poolId = Integer.parseInt(poolIdStr);
image.setAgentPoolId(poolId);
} catch (NumberFormatException e) {
Loggers.SERVER.warnAndDebugDetails("Could not parse local cloud image pool id parameter", e);
}
}
if (!line.startsWith("prop:")) continue;
String[] kv = line.substring(5).trim().split("=", 2);
if (kv.length == 2) {
image.addExtraProperty(kv[0].trim(), kv[1].trim());
}
}
myImages.add(image);
}
myErrorInfo = error.length() == 0 ? null : new CloudErrorInfo(error.substring(1));
}