summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2019-08-06 13:11:14 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-08-06 13:11:16 +0200
commitf95fb13e72b541e2660acc4e539eb3bc587d55d8 (patch)
tree015ebdc9d0a4ce70d81bbc85b2830b31c7ce1d5c /node-admin
parentf50b3685adfbe94e4c672bcef2f086a99dc8e16e (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')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriter.java52
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/DefaultEnvRewriterTest.java21
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