diff options
author | Bjørn Meland <bjormel@users.noreply.github.com> | 2022-12-16 14:38:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-16 14:38:58 +0100 |
commit | 11dfec8907b43d8522c01f6e925b12825c4268f4 (patch) | |
tree | fc6ae104204144a9dd2ef8a98a0d8a091028422c /node-admin | |
parent | e4302310d2c61aaff8ed7b29246d232d985e70a2 (diff) |
Revert "Revert "support for disablerepo in yum command""
Diffstat (limited to 'node-admin')
4 files changed, 33 insertions, 13 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 975f5b8eb90..424791bdabf 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 @@ -34,6 +34,7 @@ public abstract class YumCommand<T extends YumCommand<T>> { PACKAGE_NAME_BUILDERS_GENERATOR = builder -> List.of( builder::setName, builder::setEpoch, builder::setVersion, builder::setRelease, builder::setArchitecture); + private List<String> disabledRepos = List.of(); private List<String> enabledRepos = List.of(); private final Terminal terminal; @@ -41,6 +42,12 @@ public abstract class YumCommand<T extends YumCommand<T>> { this.terminal = terminal; } + /** Disables the given repos for this command */ + public T disableRepo(String... repo) { + disabledRepos = List.of(repo); + return getThis(); + } + /** Enables the given repos for this command */ public T enableRepo(String... repo) { enabledRepos = List.of(repo); @@ -51,6 +58,11 @@ public abstract class YumCommand<T extends YumCommand<T>> { protected void addParametersToCommandLine(CommandLine commandLine) { commandLine.add("--assumeyes"); + if (!enabledRepos.isEmpty() && disabledRepos.isEmpty()) { + commandLine.add("--disablerepo=*"); + } else { + disabledRepos.forEach(repo -> commandLine.add("--disablerepo=" + repo)); + } enabledRepos.forEach(repo -> commandLine.add("--enablerepo=" + repo)); } 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 20a42aed3d5..c5ea2dd7f41 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 @@ -50,6 +50,7 @@ public class YumTester extends Yum { public class GenericYumCommandExpectation { private final CommandType commandType; protected final List<YumPackageName> packages; + private List<String> disableRepos = List.of(); private List<String> enableRepos = List.of(); private GenericYumCommandExpectation(CommandType commandType, String... packages) { @@ -57,6 +58,11 @@ public class YumTester extends Yum { this.packages = Stream.of(packages).map(YumPackageName::fromString).toList(); } + public GenericYumCommandExpectation withDisableRepo(String... repo) { + this.disableRepos = List.of(repo); + return this; + } + public GenericYumCommandExpectation withEnableRepo(String... repo) { this.enableRepos = List.of(repo); return this; @@ -90,6 +96,7 @@ public class YumTester extends Yum { cmd.append("yum ").append(commandType.command); if (commandType != CommandType.deleteVersionLock) { cmd.append(" --assumeyes"); + disableRepos.forEach(repo -> cmd.append(" --disablerepo=").append(repo)); enableRepos.forEach(repo -> cmd.append(" --enablerepo=").append(repo)); } if (commandType == CommandType.install && packages.size() > 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 8c9e36abb32..e52dedbf7ef 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 @@ -99,7 +99,7 @@ public class YumTest { void testAlreadyInstalled() { mockRpmQuery("package-1", null); terminal.expectCommand( - "yum install --assumeyes --enablerepo=repo1 --enablerepo=repo2 --setopt skip_missing_names_on_install=False package-1 package-2 2>&1", + "yum install --assumeyes \"--disablerepo=*\" --enablerepo=repo1 --enablerepo=repo2 --setopt skip_missing_names_on_install=False package-1 package-2 2>&1", 0, "foobar\nNothing to do.\n"); // Note trailing dot assertFalse(yum.install("package-1", "package-2") @@ -161,7 +161,7 @@ public class YumTest { void testInstallWithEnablerepo() { mockRpmQuery("package-1", null); terminal.expectCommand( - "yum install --assumeyes --enablerepo=repo-name --setopt skip_missing_names_on_install=False package-1 package-2 2>&1", + "yum install --assumeyes \"--disablerepo=*\" --enablerepo=repo-name --setopt skip_missing_names_on_install=False package-1 package-2 2>&1", 0, "installing, installing"); @@ -201,10 +201,10 @@ public class YumTest { terminal.expectCommand("yum versionlock delete \"package-0:0.1-8.el7.*\" 2>&1"); - terminal.expectCommand("yum versionlock add --assumeyes --enablerepo=somerepo \"package-0:0.10-654.el7.*\" 2>&1"); + terminal.expectCommand("yum versionlock add --assumeyes \"--disablerepo=*\" --enablerepo=somerepo \"package-0:0.10-654.el7.*\" 2>&1"); terminal.expectCommand( - "yum install --assumeyes --enablerepo=somerepo package-0:0.10-654.el7 2>&1", + "yum install --assumeyes \"--disablerepo=*\" --enablerepo=somerepo package-0:0.10-654.el7 2>&1", 0, "Nothing to do\n"); @@ -254,7 +254,7 @@ public class YumTest { assertThrows(ChildProcessFailureException.class, () -> { mockRpmQuery("package-1", null); terminal.expectCommand( - "yum install --assumeyes --enablerepo=repo-name --setopt skip_missing_names_on_install=False package-1 package-2 2>&1", + "yum install --assumeyes \"--disablerepo=*\" --enablerepo=repo-name --setopt skip_missing_names_on_install=False package-1 package-2 2>&1", 1, "error"); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTesterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTesterTest.java index 59c138b51df..9533c555860 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTesterTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTesterTest.java @@ -18,6 +18,7 @@ public class YumTesterTest { private static final String[] packages = {"pkg1", "pkg2"}; private static final String[] repos = {"repo1", "repo2"}; + private static final String[] disablerepos = {"disablerepo1", "disablerepo2"}; private static final YumPackageName minimalPackage = YumPackageName.fromString("pkg-1.13.1-0.el7"); private static final YumPackageName fullPackage = YumPackageName.fromString("2:pkg-1.13.1-0.el7.x86_64"); @@ -27,17 +28,17 @@ public class YumTesterTest { @Test void generic_yum_methods() { - assertYumMethod(yum -> yum.expectInstall(packages).withEnableRepo(repos), - yum -> yum.install(List.of(packages)).enableRepo(repos).converge(context)); + assertYumMethod(yum -> yum.expectInstall(packages).withDisableRepo(disablerepos).withEnableRepo(repos), + yum -> yum.install(List.of(packages)).disableRepo(disablerepos).enableRepo(repos).converge(context)); - assertYumMethod(yum -> yum.expectUpdate(packages).withEnableRepo(repos), - yum -> yum.upgrade(List.of(packages)).enableRepo(repos).converge(context)); + assertYumMethod(yum -> yum.expectUpdate(packages).withDisableRepo(disablerepos).withEnableRepo(repos), + yum -> yum.upgrade(List.of(packages)).disableRepo(disablerepos).enableRepo(repos).converge(context)); - assertYumMethod(yum -> yum.expectRemove(packages).withEnableRepo(repos), - yum -> yum.remove(List.of(packages)).enableRepo(repos).converge(context)); + assertYumMethod(yum -> yum.expectRemove(packages).withDisableRepo(disablerepos).withEnableRepo(repos), + yum -> yum.remove(List.of(packages)).disableRepo(disablerepos).enableRepo(repos).converge(context)); - assertYumMethod(yum -> yum.expectInstallFixedVersion(minimalPackage.toName()).withEnableRepo(repos), - yum -> yum.installFixedVersion(minimalPackage).enableRepo(repos).converge(context)); + assertYumMethod(yum -> yum.expectInstallFixedVersion(minimalPackage.toName()).withDisableRepo(disablerepos).withEnableRepo(repos), + yum -> yum.installFixedVersion(minimalPackage).disableRepo(disablerepos).enableRepo(repos).converge(context)); // versionlock always returns success assertYumMethodAlwaysSuccess(yum -> yum.expectDeleteVersionLock(minimalPackage.toName()), |