diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /application-preprocessor/src |
Publish
Diffstat (limited to 'application-preprocessor/src')
-rw-r--r-- | application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java | 68 | ||||
-rw-r--r-- | application-preprocessor/src/main/sh/preprocess-application | 69 |
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 "$@" |