aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-04-17 19:04:47 +0200
committerGitHub <noreply@github.com>2020-04-17 19:04:47 +0200
commit2e5b18e1c72390b8f9a0fc75f86ecf885bf517c1 (patch)
tree3df6e20eb339654448886adeecf2ac0acb6e4753 /node-admin
parenta3cb09f37cef3595776eff9884042ab534b08eed (diff)
parent207e2f546d7f9b8e7fc83e797016814c2d38ceb0 (diff)
Merge pull request #12971 from vespa-engine/freva/yum-do-not-skip-missing
Fail yum install/upgrade if missing names
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java21
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTester.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java12
3 files changed, 31 insertions, 6 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
index 12029c4fe7e..7b543304e6e 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
@@ -5,6 +5,7 @@ import com.yahoo.vespa.hosted.node.admin.component.TaskContext;
import com.yahoo.vespa.hosted.node.admin.task.util.process.CommandLine;
import com.yahoo.vespa.hosted.node.admin.task.util.process.Terminal;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
@@ -41,6 +42,7 @@ public abstract class YumCommand<T extends YumCommand<T>> {
private final String yumCommand;
private final Pattern commandOutputNoopPattern;
private final List<YumPackageName> packages;
+ private final List<String> options = new ArrayList<>();
GenericYumCommand(Terminal terminal, String yumCommand, List<YumPackageName> packages, Pattern commandOutputNoopPattern) {
this.terminal = terminal;
@@ -48,12 +50,31 @@ public abstract class YumCommand<T extends YumCommand<T>> {
this.packages = packages;
this.commandOutputNoopPattern = commandOutputNoopPattern;
+ switch (yumCommand) {
+ case "install": {
+ if (packages.size() > 1) options.add("skip_missing_names_on_install=False");
+ break;
+ }
+ case "upgrade": {
+ if (packages.size() > 1) options.add("skip_missing_names_on_update=False");
+ break;
+ }
+ case "remove": break;
+ default: throw new IllegalArgumentException("Unknown yum command: " + yumCommand);
+ }
+
if (packages.isEmpty() && ! "upgrade".equals(yumCommand)) {
throw new IllegalArgumentException("No packages specified");
}
}
@Override
+ protected void addParametersToCommandLine(CommandLine commandLine) {
+ super.addParametersToCommandLine(commandLine);
+ options.forEach(option -> commandLine.add("--setopt", option));
+ }
+
+ @Override
public boolean converge(TaskContext context) {
if (packages.isEmpty() && ! "upgrade".equals(yumCommand)) {
throw new IllegalArgumentException("No packages specified");
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTester.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTester.java
index 4d04e1199c5..c5b46473218 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTester.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTester.java
@@ -73,6 +73,10 @@ public class YumTester extends Yum {
StringBuilder cmd = new StringBuilder();
cmd.append("yum ").append(command).append(" --assumeyes");
enableRepos.forEach(repo -> cmd.append(" --enablerepo=").append(repo));
+ if ("install".equals(command) && packages.size() > 1)
+ cmd.append(" --setopt skip_missing_names_on_install=False");
+ if ("upgrade".equals(command) && packages.size() > 1)
+ cmd.append(" --setopt skip_missing_names_on_update=False");
packages.forEach(pkg -> cmd.append(" ").append(pkg.toName()));
cmd.append(" 2>&1");
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java
index a0887e74e47..dc9c036b96b 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java
@@ -75,7 +75,7 @@ public class YumTest {
@Test
public void testAlreadyInstalled() {
terminal.expectCommand(
- "yum install --assumeyes --enablerepo=repo1 --enablerepo=repo2 package-1 package-2 2>&1",
+ "yum install --assumeyes --enablerepo=repo1 --enablerepo=repo2 --setopt skip_missing_names_on_install=False package-1 package-2 2>&1",
0,
"foobar\nNothing to do\n");
@@ -88,7 +88,7 @@ public class YumTest {
@Test
public void testAlreadyUpgraded() {
terminal.expectCommand(
- "yum upgrade --assumeyes package-1 package-2 2>&1",
+ "yum upgrade --assumeyes --setopt skip_missing_names_on_update=False package-1 package-2 2>&1",
0,
"foobar\nNo packages marked for update\n");
@@ -112,7 +112,7 @@ public class YumTest {
@Test
public void testInstall() {
terminal.expectCommand(
- "yum install --assumeyes package-1 package-2 2>&1",
+ "yum install --assumeyes --setopt skip_missing_names_on_install=False package-1 package-2 2>&1",
0,
"installing, installing");
@@ -124,7 +124,7 @@ public class YumTest {
@Test
public void testInstallWithEnablerepo() {
terminal.expectCommand(
- "yum install --assumeyes --enablerepo=repo-name package-1 package-2 2>&1",
+ "yum install --assumeyes --enablerepo=repo-name --setopt skip_missing_names_on_install=False package-1 package-2 2>&1",
0,
"installing, installing");
@@ -210,7 +210,7 @@ public class YumTest {
@Test(expected = ChildProcessFailureException.class)
public void testFailedInstall() {
terminal.expectCommand(
- "yum install --assumeyes --enablerepo=repo-name package-1 package-2 2>&1",
+ "yum install --assumeyes --enablerepo=repo-name --setopt skip_missing_names_on_install=False package-1 package-2 2>&1",
1,
"error");
@@ -224,7 +224,7 @@ public class YumTest {
@Test
public void testUnknownPackages() {
terminal.expectCommand(
- "yum install --assumeyes package-1 package-2 package-3 2>&1",
+ "yum install --assumeyes --setopt skip_missing_names_on_install=False package-1 package-2 package-3 2>&1",
0,
"Loaded plugins: fastestmirror, langpacks\n" +
"Loading mirror speeds from cached hostfile\n" +