aboutsummaryrefslogtreecommitdiffstats
path: root/application-preprocessor
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
Publish
Diffstat (limited to 'application-preprocessor')
-rw-r--r--application-preprocessor/.gitignore2
-rw-r--r--application-preprocessor/OWNERS1
-rw-r--r--application-preprocessor/README1
-rw-r--r--application-preprocessor/pom.xml91
-rw-r--r--application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java68
-rw-r--r--application-preprocessor/src/main/sh/preprocess-application69
6 files changed, 232 insertions, 0 deletions
diff --git a/application-preprocessor/.gitignore b/application-preprocessor/.gitignore
new file mode 100644
index 00000000000..12251442258
--- /dev/null
+++ b/application-preprocessor/.gitignore
@@ -0,0 +1,2 @@
+/target
+/pom.xml.build
diff --git a/application-preprocessor/OWNERS b/application-preprocessor/OWNERS
new file mode 100644
index 00000000000..e0a00db5f4f
--- /dev/null
+++ b/application-preprocessor/OWNERS
@@ -0,0 +1 @@
+musum
diff --git a/application-preprocessor/README b/application-preprocessor/README
new file mode 100644
index 00000000000..2439078900e
--- /dev/null
+++ b/application-preprocessor/README
@@ -0,0 +1 @@
+Contains the application preprocessor utility.
diff --git a/application-preprocessor/pom.xml b/application-preprocessor/pom.xml
new file mode 100644
index 00000000000..dc624bfed4d
--- /dev/null
+++ b/application-preprocessor/pom.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0"?>
+<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>parent</artifactId>
+ <version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+ <artifactId>application-preprocessor</artifactId>
+ <packaging>jar</packaging>
+ <version>6-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-model-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-application-package</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-model</artifactId>
+ <version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr4-runtime</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-provisioning</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespajlib</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>yolean</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespalog</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <compilerArgs>
+ <arg>-Xlint:all</arg>
+ <arg>-Xlint:-try</arg>
+ <arg>-Werror</arg>
+ </compilerArgs>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
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 "$@"