From 3572c4e4f4dc903a9e41dc62d05563428523d69c Mon Sep 17 00:00:00 2001 From: Rob Rudin Date: Wed, 6 Jan 2016 08:49:52 -0500 Subject: [PATCH] #74 New command for verifying server version --- .../admin/RequireAtLeastMl8Command.java | 32 +++++++++++++++++++ .../marklogic/mgmt/admin/AdminManager.java | 9 ++++++ .../command/admin/RequireAtLeastMl8Test.java | 14 ++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/main/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Command.java create mode 100644 src/test/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Test.java diff --git a/src/main/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Command.java b/src/main/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Command.java new file mode 100644 index 00000000..780380f9 --- /dev/null +++ b/src/main/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Command.java @@ -0,0 +1,32 @@ +package com.marklogic.appdeployer.command.admin; + +import com.marklogic.appdeployer.command.AbstractCommand; +import com.marklogic.appdeployer.command.CommandContext; + +/** + * Version 2.+ of ml-app-deployer requires at least version 8.x of MarkLogic. There are features in ml-app-deployer 2.x + * - such as support for alerts and triggers - that require a certain version of 8, but we at least want to make sure + * that no one tries to run this against ML 7 or an older version. + */ +public class RequireAtLeastMl8Command extends AbstractCommand { + + @Override + public void execute(CommandContext context) { + int major = 0; + try { + String version = context.getAdminManager().getServerVersion(); + if (logger.isInfoEnabled()) { + logger.info("Verifying MarkLogic version is at least 8 or higher; version: " + version); + } + major = Integer.parseInt(version.split("\\.")[0]); + } catch (Exception e) { + logger.warn("Unable to verify MarkLogic version is 8 or higher, will continue with deployment; error: " + + e.getMessage()); + major = 8; + } + if (major < 8) { + throw new RuntimeException("Only MarkLogic versions 8 and higher are supported"); + } + } + +} diff --git a/src/main/java/com/marklogic/mgmt/admin/AdminManager.java b/src/main/java/com/marklogic/mgmt/admin/AdminManager.java index 0031fb82..47c0a6e3 100644 --- a/src/main/java/com/marklogic/mgmt/admin/AdminManager.java +++ b/src/main/java/com/marklogic/mgmt/admin/AdminManager.java @@ -12,6 +12,7 @@ import org.springframework.web.client.RestTemplate; import com.marklogic.mgmt.AbstractManager; +import com.marklogic.rest.util.Fragment; import com.marklogic.rest.util.RestTemplateUtil; public class AdminManager extends AbstractManager { @@ -197,6 +198,14 @@ public boolean execute() { }); } + public Fragment getServerConfig() { + return new Fragment(restTemplate.getForObject(adminConfig.getBaseUrl() + "/admin/v1/server-config", String.class)); + } + + public String getServerVersion() { + return getServerConfig().getElementValue("/m:host/m:version"); + } + public void setWaitForRestartCheckInterval(int waitForRestartCheckInterval) { this.waitForRestartCheckInterval = waitForRestartCheckInterval; } diff --git a/src/test/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Test.java b/src/test/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Test.java new file mode 100644 index 00000000..b8e8f213 --- /dev/null +++ b/src/test/java/com/marklogic/appdeployer/command/admin/RequireAtLeastMl8Test.java @@ -0,0 +1,14 @@ +package com.marklogic.appdeployer.command.admin; + +import org.junit.Test; + +import com.marklogic.appdeployer.AbstractAppDeployerTest; + +public class RequireAtLeastMl8Test extends AbstractAppDeployerTest { + + @Test + public void testThatNoExceptionIsThrown() { + initializeAppDeployer(new RequireAtLeastMl8Command()); + appDeployer.deploy(appConfig); + } +}