@Test public void testFromHash() { String id1 = Identifiers.makeIdFromHash("Hello".hashCode()); Assert.assertTrue(!Strings.isBlank(id1)); String id2 = Identifiers.makeIdFromHash("hello".hashCode()); String id3 = Identifiers.makeIdFromHash("hello".hashCode()); Assert.assertEquals(id2, id3); Assert.assertNotEquals(id1, id2); Assert.assertEquals(Identifiers.makeIdFromHash(0), "A"); String idLong = Identifiers.makeIdFromHash(Long.MAX_VALUE); log.info("ID's made from hash, of 'hello' is "+id1+" and of Long.MAX_VALUE is "+idLong); Assert.assertTrue(idLong.length() > id1.length()); }
@Test public void testFromNegativeHash() { String id1 = Identifiers.makeIdFromHash(-1); Assert.assertTrue(!Strings.isBlank(id1)); log.info("ID's made from hash, of -1 is "+id1+" and of Long.MIN_VALUE is "+Identifiers.makeIdFromHash(Long.MIN_VALUE)); }
@Override protected String getInstallLabelExtraSalt() { String downloadUrl = entity.getConfig(BrooklynNode.DOWNLOAD_URL); String uploadUrl = entity.getConfig(BrooklynNode.DISTRO_UPLOAD_URL); if (Objects.equal(downloadUrl, BrooklynNode.DOWNLOAD_URL.getConfigKey().getDefaultValue()) && Objects.equal(uploadUrl, BrooklynNode.DISTRO_UPLOAD_URL.getDefaultValue())) { // if both are at the default value, then no salt return null; } return Identifiers.makeIdFromHash(Objects.hashCode(downloadUrl, uploadUrl)); }
@Override public String deployArchive(String url) { String volumeId = Identifiers.makeIdFromHash(url.hashCode()); String path = Os.mergePaths(getRunDir(), volumeId); ArchiveUtils.deploy(url, getMachine(), path); return path; }
/** * Needed because the download url and install commands are likely different for different VanillaSoftwareProcesses! * This is particularly true for YAML entities. We take a hash of the download_url, install_command and environment variables. * We thus assume any templating of the script has already been done by this point. */ @Override protected String getInstallLabelExtraSalt() { // run non-blocking in case a value set later is used (e.g. a port) Integer hash = hashCodeIfResolved(SoftwareProcess.DOWNLOAD_URL.getConfigKey(), VanillaSoftwareProcess.INSTALL_COMMAND, SoftwareProcess.SHELL_ENVIRONMENT); // if any of the above blocked then we must make a unique install label, // as other yet-unknown config is involved if (hash==null) return Identifiers.makeRandomId(8); // a user-friendly hash is nice, but tricky since it would have to be short; // go with a random one unless it's totally blank if (hash==0) return "default"; return Identifiers.makeIdFromHash(hash); }
public static String imageName(Entity entity, String dockerfile) { String simpleName = entity.getEntityType().getSimpleName(); String version = entity.config().get(SoftwareProcess.SUGGESTED_VERSION); long hash = HashGenerator.builder() .add(simpleName) .add(version) .add(dockerfile) .add(entity, VanillaSoftwareProcess.INSTALL_UNIQUE_LABEL) .add(entity, SoftwareProcess.DOWNLOAD_URL.getConfigKey()) .add(entity, SoftwareProcess.PRE_INSTALL_FILES) .add(entity, SoftwareProcess.PRE_INSTALL_TEMPLATES) .add(entity, VanillaSoftwareProcess.PRE_INSTALL_COMMAND) .add(entity, VanillaSoftwareProcess.INSTALL_COMMAND) .add(entity, SoftwareProcess.SHELL_ENVIRONMENT) .build(); return Identifiers.makeIdFromHash(hash).toLowerCase(Locale.ENGLISH); }