@Override public boolean binaryEqualsIgnoreVersion(String binary1, String binary2) { for (Repository repository : repositories) { if (repository.binaryEqualsIgnoreVersion(binary1, binary2)) { return true; } } return false; }
@Override public URI binaryToHttpUri(String binary) { Set<URI> httpUris = newTreeSet(); for (Repository repository : repositories) { URI httpUri = repository.binaryToHttpUri(binary); if (httpUri != null) { httpUris.add(httpUri); } } if (httpUris.size() > 1) { throw new RuntimeException(String.format("Ambiguous binary %s found %s", binary, httpUris)); } if (httpUris.isEmpty()) { return null; } return httpUris.iterator().next(); }
@Override public boolean configEqualsIgnoreVersion(String config1, String config2) { for (Repository repository : repositories) { if (repository.configEqualsIgnoreVersion(config1, config2)) { return true; } } return false; }
public static Installation toInstallation(Repository repository, Assignment assignment) { assignment = resolveAssignment(repository, assignment); // load resources Map<String, Integer> resources = readResources(repository, assignment); // create installation URI binaryUri = repository.binaryToHttpUri(assignment.getBinary()); Preconditions.checkNotNull(binaryUri, "Unknown binary %s", binaryUri); URI configUri = repository.configToHttpUri(assignment.getConfig()); Preconditions.checkNotNull(configUri, "Unknown config %s", configUri); return new Installation( repository.configShortName(assignment.getConfig()), assignment, binaryUri, configUri, resources); }
public Assignment upgradeAssignment(Repository repository, Assignment assignment) { Preconditions.checkNotNull(assignment, "assignment is null"); String binary = assignment.getBinary(); if (binaryVersion != null) { binary = repository.binaryUpgrade(binary, binaryVersion); Preconditions.checkArgument(binary != null, "Can not upgrade binary " + assignment.getBinary() + " to " + binaryVersion); } else{ Preconditions.checkArgument(repository.binaryToHttpUri(assignment.getBinary()) != null, "Can not locate existing binary " + assignment.getBinary() + " for upgrade"); } String config = assignment.getConfig(); if (configVersion != null) { config = repository.configUpgrade(config, configVersion); Preconditions.checkArgument(config != null, "Can not upgrade config " + assignment.getConfig() + " to " + configVersion); } else { Preconditions.checkArgument(repository.configToHttpUri(assignment.getConfig()) != null, "Can not locate existing config " + assignment.getConfig() + " for upgrade"); } return new Assignment(binary, config); }
@Override public boolean apply(RemoteAgent agent) { for (RemoteSlot slot : agent.getSlots()) { if (repository.binaryEqualsIgnoreVersion(assignment.getBinary(), slot.status().getAssignment().getBinary()) && repository.configEqualsIgnoreVersion(assignment.getConfig(), slot.status().getAssignment().getConfig())) { return false; } } return true; } };
public static ConfigurationFactory createConfigurationFactory(Repository repository, String config) { try { URI configUri = repository.configToHttpUri(config); Preconditions.checkNotNull(configUri, "Unknown configuration: " + config); return createConfigurationFactory(configUri); } catch (IOException e) { throw new RuntimeException("Unable to read configuration " + config); } }
config = status.getAssignment().getConfig(); if (repository != null) { shortBinary = Objects.firstNonNull(repository.binaryRelativize(binary), binary); shortConfig = Objects.firstNonNull(repository.configRelativize(config), config); } else { shortBinary = binary;
@Override public String configShortName(String config) { if (!config.startsWith("@")) { return null; } String noAtSign = config.substring(1); for (Repository repository : repositories) { String shortName = repository.configShortName(config); if (!config.equals(shortName) && !noAtSign.endsWith(shortName)) { return shortName; } } return noAtSign.replaceAll("[:%/ !$]", "_"); }
public static Assignment resolveAssignment(Repository repository, Assignment assignment) { // resolve assignment String resolvedBinary = repository.binaryResolve(assignment.getBinary()); Preconditions.checkArgument(resolvedBinary != null, "Unknown binary " + assignment.getBinary()); String resolvedConfig = repository.configResolve(assignment.getConfig()); Preconditions.checkArgument(resolvedConfig != null, "Unknown config " + assignment.getConfig()); assignment = new Assignment(resolvedBinary, resolvedConfig); return assignment; }
@Override public String configRelativize(String config) { Set<String> relativeConfigs = newTreeSet(); for (Repository repository : repositories) { String relativeConfig = repository.configRelativize(config); if (relativeConfig != null) { relativeConfigs.add(relativeConfig); } } // if we end up with more than one form for the relative config, just return the absolute config if (relativeConfigs.size() != 1) { return config; } return relativeConfigs.iterator().next(); }
@Override public String binaryRelativize(String binary) { Set<String> relativeBinaries = newTreeSet(); for (Repository repository : repositories) { String relativeBinary = repository.binaryRelativize(binary); if (relativeBinary != null) { relativeBinaries.add(relativeBinary); } } // if we end up with more than one form for the relative binary, just return the absolute binary if (relativeBinaries.size() != 1) { return binary; } return relativeBinaries.iterator().next(); }
@Override public String binaryResolve(String binary) { Set<String> binaries = newTreeSet(); for (Repository repository : repositories) { String resolved = repository.binaryResolve(binary); if (resolved != null) { binaries.add(resolved); } } if (binaries.size() > 1) { throw new RuntimeException(String.format("Ambiguous binary %s matched %s", binary, binaries)); } if (binaries.isEmpty()) { return null; } return binaries.iterator().next(); }
@Override public String configResolve(String config) { Set<String> configs = newTreeSet(); for (Repository repository : repositories) { String resolved = repository.configResolve(config); if (resolved != null) { configs.add(resolved); } } if (configs.size() > 1) { throw new RuntimeException(String.format("Ambiguous config %s matched %s", config, configs)); } if (configs.isEmpty()) { return null; } return configs.iterator().next(); }
@Override public String binaryUpgrade(String binary, String version) { Set<String> binaries = newTreeSet(); for (Repository repository : repositories) { String resolved = repository.binaryUpgrade(binary, version); if (resolved != null) { binaries.add(resolved); } } if (binaries.size() > 1) { throw new RuntimeException(String.format("Ambiguous upgrade version %s for binary %s matched %s", version, binary, binaries)); } if (binaries.isEmpty()) { return null; } return binaries.iterator().next(); }
URI configFile = repository.configToHttpUri(assignment.getConfig()); repository.configShortName(assignment.getConfig()), assignment, repository.binaryToHttpUri(assignment.getBinary()), configFile, ImmutableMap.<String, Integer>of());
@Override public boolean apply(@Nullable AgentStatus status) { // We can only install on online agents if (status.getState() != ONLINE) { return false; } // Constraints: normally we only allow only instance of a binary+config on each agent if (!allowDuplicateInstallationsOnAnAgent) { for (SlotStatus slot : status.getSlotStatuses()) { if (repository.binaryEqualsIgnoreVersion(assignment.getBinary(), slot.getAssignment().getBinary()) && repository.configEqualsIgnoreVersion(assignment.getConfig(), slot.getAssignment().getConfig())) { return false; } } } // agents without declared resources are considered to have unlimited resources if (!status.getResources().isEmpty()) { // verify that required resources are available Installation installation = toInstallation(repository, assignment); Map<String, Integer> availableResources = getAvailableResources(status); if (!resourcesAreAvailable(availableResources, installation.getResources())) { return false; } } return true; } }
@Override public URI configToHttpUri(String config) { Set<URI> httpUris = newTreeSet(); for (Repository repository : repositories) { URI httpUri = repository.configToHttpUri(config); if (httpUri != null) { httpUris.add(httpUri); } } if (httpUris.size() > 1) { throw new RuntimeException(String.format("Ambiguous config %s found %s", config, httpUris)); } if (httpUris.isEmpty()) { return null; } return httpUris.iterator().next(); }
config = slotStatus.getAssignment().getConfig(); if (repository != null) { shortBinary = Objects.firstNonNull(repository.binaryRelativize(binary), binary); shortConfig = Objects.firstNonNull(repository.configRelativize(config), config); } else { shortBinary = binary;
private static URI getRequiredUri(Repository repository, MavenCoordinates mavenCoordinates) { URI uri = repository.binaryToHttpUri(mavenCoordinates.toGAV()); Preconditions.checkArgument(uri != null, "Could not find %s in repository %s", mavenCoordinates.toGAV(), repository); return uri; }