diff options
Diffstat (limited to 'node-admin')
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" + |