diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2019-08-06 13:11:14 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2019-08-06 13:11:16 +0200 |
commit | f95fb13e72b541e2660acc4e539eb3bc587d55d8 (patch) | |
tree | 015ebdc9d0a4ce70d81bbc85b2830b31c7ce1d5c /node-admin | |
parent | f50b3685adfbe94e4c672bcef2f086a99dc8e16e (diff) |
Add method to generate default-env.txt content to string
- Change name of converge method to updateFile
- Remove default-env.txt path from constructor, add as parameter to updateFile instead.
Diffstat (limited to 'node-admin')
2 files changed, 49 insertions, 24 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriter.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriter.java index f8412d07c23..df324a77a87 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriter.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriter.java @@ -5,15 +5,16 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.TreeMap; import java.util.TreeSet; import static com.yahoo.vespa.hosted.node.admin.task.util.file.IOExceptionUtil.ifExists; import static com.yahoo.yolean.Exceptions.uncheck; import static java.nio.file.StandardCopyOption.ATOMIC_MOVE; +import static java.util.stream.Collectors.joining; /** * Rewrites default-env.txt files. @@ -22,12 +23,7 @@ import static java.nio.file.StandardCopyOption.ATOMIC_MOVE; */ public class DefaultEnvRewriter { - private final Map<String, Operation> operations = new TreeMap<>(); - private final Path defaultEnvFile; - - public DefaultEnvRewriter(Path defaultEnvFile) { - this.defaultEnvFile = defaultEnvFile; - } + private final Map<String, Operation> operations = new LinkedHashMap<>(); public DefaultEnvRewriter addOverride(String name, String value) { return addOperation("override", name, value); @@ -49,14 +45,39 @@ public class DefaultEnvRewriter { return this; } - public boolean converge() { - List<String> defaultEnvLines = ifExists(() -> Files.readAllLines(defaultEnvFile)).orElse(List.of()); + /** + * Updates or created a default-env.txt file + * + * @return true if the file was modified + */ + public boolean updateFile(Path defaultEnvFile) { + List<String> currentDefaultEnvLines = ifExists(() -> Files.readAllLines(defaultEnvFile)).orElse(List.of()); + List<String> newDefaultEnvLines = generateContent(currentDefaultEnvLines); + if (currentDefaultEnvLines.equals(newDefaultEnvLines)) { + return false; + } else { + Path tempFile = Paths.get(defaultEnvFile.toString() + ".tmp"); + uncheck(() -> Files.write(tempFile, newDefaultEnvLines)); + uncheck(() -> Files.move(tempFile, defaultEnvFile, ATOMIC_MOVE)); + return true; + } + } + + /** + * @return generated default-env.txt content + */ + public String generateContent() { + return generateContent(List.of()).stream() + .collect(joining(System.lineSeparator(), "", System.lineSeparator())); + } + + private List<String> generateContent(List<String> currentDefaultEnvLines) { List<String> newDefaultEnvLines = new ArrayList<>(); Set<String> seenNames = new TreeSet<>(); - for (String line : defaultEnvLines) { + for (String line : currentDefaultEnvLines) { String[] items = line.split(" "); if (items.length < 2) { - throw new IllegalArgumentException(String.format("Invalid line in file '%s': %s", defaultEnvFile, line)); + throw new IllegalArgumentException(String.format("Invalid line in file '%s': %s", currentDefaultEnvLines, line)); } String name = items[1]; if (!seenNames.contains(name)) { // implicitly removes duplicated variables @@ -74,14 +95,7 @@ public class DefaultEnvRewriter { newDefaultEnvLines.add(operation.toLine()); } } - if (defaultEnvLines.equals(newDefaultEnvLines)) { - return false; - } else { - Path tempFile = Paths.get(defaultEnvFile.toString() + ".tmp"); - uncheck(() -> Files.write(tempFile, newDefaultEnvLines)); - uncheck(() -> Files.move(tempFile, defaultEnvFile, ATOMIC_MOVE)); - return true; - } + return newDefaultEnvLines; } private static class Operation { diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriterTest.java index 7b8ece2c6c2..8314eaa684d 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriterTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriterTest.java @@ -31,18 +31,29 @@ public class DefaultEnvRewriterTest { Path tempFile = temporaryFolder.newFile().toPath(); Files.copy(EXAMPLE_FILE, tempFile, REPLACE_EXISTING); - DefaultEnvRewriter rewriter = new DefaultEnvRewriter(tempFile); + DefaultEnvRewriter rewriter = new DefaultEnvRewriter(); rewriter.addOverride("VESPA_HOSTNAME", "my-new-hostname"); rewriter.addFallback("VESPA_CONFIGSERVER", "new-fallback-configserver"); rewriter.addOverride("VESPA_TLS_CONFIG_FILE", "/override/path/to/config.file"); - boolean converged = rewriter.converge(); + boolean modified = rewriter.updateFile(tempFile); - assertTrue(converged); + assertTrue(modified); assertEquals(Files.readString(EXPECTED_RESULT_FILE), Files.readString(tempFile)); - converged = rewriter.converge(); - assertFalse(converged); + modified = rewriter.updateFile(tempFile); + assertFalse(modified); assertEquals(Files.readString(EXPECTED_RESULT_FILE), Files.readString(tempFile)); } + + @Test + public void generates_default_env_content() throws IOException { + DefaultEnvRewriter rewriter = new DefaultEnvRewriter(); + rewriter.addOverride("VESPA_HOSTNAME", "my-new-hostname"); + rewriter.addFallback("VESPA_CONFIGSERVER", "new-fallback-configserver"); + rewriter.addOverride("VESPA_TLS_CONFIG_FILE", "/override/path/to/config.file"); + rewriter.addUnset("VESPA_LEGACY_OPTION"); + String generatedContent = rewriter.generateContent(); + assertEquals(Files.readString(EXPECTED_RESULT_FILE), generatedContent); + } }
\ No newline at end of file |