summaryrefslogtreecommitdiffstats
path: root/application-preprocessor/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /application-preprocessor/src
Publish
Diffstat (limited to 'application-preprocessor/src')
-rw-r--r--application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java68
-rw-r--r--application-preprocessor/src/main/sh/preprocess-application69
2 files changed, 137 insertions, 0 deletions
diff --git a/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java b/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java
new file mode 100644
index 00000000000..1762a4b9884
--- /dev/null
+++ b/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java
@@ -0,0 +1,68 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.application.preprocessor;
+
+import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.config.model.application.provider.BaseDeployLogger;
+import com.yahoo.config.model.application.provider.FilesApplicationPackage;
+import com.yahoo.config.provision.*;
+import com.yahoo.yolean.Exceptions;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+import java.io.File;
+import java.io.IOException;
+import java.util.Optional;
+
+/**
+ * Main entry for preprocessing an application package.
+ *
+ * @author lulf
+ * @since 5.25
+ */
+public class ApplicationPreprocessor {
+ private final File applicationDir;
+ private final Optional<File> outputDir;
+ private final Optional<Environment> environment;
+ private final Optional<RegionName> region;
+
+ public ApplicationPreprocessor(File applicationDir, Optional<File> outputDir, Optional<Environment> environment, Optional<RegionName> region) {
+ this.applicationDir = applicationDir;
+ this.outputDir = outputDir;
+ this.environment = environment;
+ this.region = region;
+ }
+
+ public void run() throws IOException, TransformerException, ParserConfigurationException, SAXException {
+ DeployLogger logger = new BaseDeployLogger();
+ FilesApplicationPackage.Builder applicationPackageBuilder = new FilesApplicationPackage.Builder(applicationDir);
+ outputDir.ifPresent(applicationPackageBuilder::preprocessedDir);
+ ApplicationPackage preprocessed = applicationPackageBuilder.build().preprocess(
+ new Zone(environment.orElse(Environment.defaultEnvironment()), region.orElse(RegionName.defaultName())),
+ (a, b) -> {
+ }, logger);
+ preprocessed.validateXML(logger);
+ }
+
+
+ public static void main(String args[]) {
+ int argCount = args.length;
+ if (argCount < 1) {
+ System.out.println("Usage: application-preprocessor <application> [environment] [region] [outputDirectory]");
+ System.exit(1);
+ }
+ File applicationDir = new File(args[0]);
+ Optional<Environment> environment = (argCount > 1) ? Optional.of(Environment.valueOf(args[1])) : Optional.empty();
+ Optional<RegionName> region = (argCount > 2) ? Optional.of(RegionName.from(args[2])) : Optional.empty();
+ Optional<File> outputDir = (argCount > 3) ? Optional.of(new File(args[3])) : Optional.empty();
+ ApplicationPreprocessor preprocessor = new ApplicationPreprocessor(applicationDir, outputDir, environment, region);
+ try {
+ preprocessor.run();
+ System.out.println("Application preprocessed successfully. Preprocessed application stored in " + new File(applicationDir, ".preprocessed").getAbsolutePath());
+ } catch (Exception e) {
+ System.err.println("Error validating application package: " + Exceptions.toMessageString(e));
+ System.exit(1);
+ }
+ }
+}
diff --git a/application-preprocessor/src/main/sh/preprocess-application b/application-preprocessor/src/main/sh/preprocess-application
new file mode 100644
index 00000000000..68c7fa23d00
--- /dev/null
+++ b/application-preprocessor/src/main/sh/preprocess-application
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# BEGIN environment bootstrap section
+# Do not edit between here and END as this section should stay identical in all scripts
+
+findpath () {
+ myname=${0}
+ mypath=${myname%/*}
+ myname=${myname##*/}
+ if [ "$mypath" ] && [ -d "$mypath" ]; then
+ return
+ fi
+ mypath=$(pwd)
+ if [ -f "${mypath}/${myname}" ]; then
+ return
+ fi
+ echo "FATAL: Could not figure out the path where $myname lives from $0"
+ exit 1
+}
+
+COMMON_ENV=libexec/vespa/common-env.sh
+
+source_common_env () {
+ if [ "$VESPA_HOME" ] && [ -d "$VESPA_HOME" ]; then
+ # ensure it ends with "/" :
+ VESPA_HOME=${VESPA_HOME%/}/
+ export VESPA_HOME
+ common_env=$VESPA_HOME/$COMMON_ENV
+ if [ -f "$common_env" ]; then
+ . $common_env
+ return
+ fi
+ fi
+ return 1
+}
+
+findroot () {
+ source_common_env && return
+ if [ "$VESPA_HOME" ]; then
+ echo "FATAL: bad VESPA_HOME value '$VESPA_HOME'"
+ exit 1
+ fi
+ if [ "$ROOT" ] && [ -d "$ROOT" ]; then
+ VESPA_HOME="$ROOT"
+ source_common_env && return
+ fi
+ findpath
+ while [ "$mypath" ]; do
+ VESPA_HOME=${mypath}
+ source_common_env && return
+ mypath=${mypath%/*}
+ done
+ echo "FATAL: missing VESPA_HOME environment variable"
+ echo "Could not locate $COMMON_ENV anywhere"
+ exit 1
+}
+
+findroot
+
+# END environment bootstrap section
+
+ROOT=$VESPA_HOME
+export ROOT
+cd $ROOT || { echo "Cannot cd to $ROOT" 1>&2; exit 1; }
+
+# get common PATH:
+. $ROOT/libexec/vespa/common-env.sh
+
+java -cp $ROOT/lib/jars/application-preprocessor-jar-with-dependencies.jar com.yahoo.application.preprocessor.ApplicationPreprocessor "$@"