aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--node-admin/README.md10
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/LocalZoneUtils.java31
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java16
4 files changed, 47 insertions, 12 deletions
diff --git a/node-admin/README.md b/node-admin/README.md
index 26d386458b9..2302d1346e6 100644
--- a/node-admin/README.md
+++ b/node-admin/README.md
@@ -42,13 +42,17 @@ To start a local zone, simply run:
### Deploying a Local Application
-To deploy an application, check out `vespa/basic-search-for-docker` to `~`, and
-package it with ```mvn package```, then deploy it with:
+Package and deploy vespa application by running:
```
- Path pathToApp = Paths.get("/home/<username>/basic-search-for-docker/target/application.zip");
runVespaLocal.deployApplication(pathToApp);
```
+where `pathToApp` is for example [vespa/sample-apps/basic-search-for-docker](../sample-apps/basic-search-for-docker).
+If the deployment is successful, the final log entry should be something like
+```
+INFO: Endpoint http://cnode-1:4080/ is now ready
+```
+use this endpoint URL to feed or query your application as described in [basic-search-for-docker/README](../sample-apps/basic-search-for-docker/README.md).
You can delete application with
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
index de003a89cf3..8e55036e792 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
@@ -44,7 +44,7 @@ public class NodeAdminStateUpdater extends AbstractComponent {
Orchestrator orchestrator,
String dockerHostHostName) {
scheduler.scheduleWithFixedDelay(
- ()-> fetchContainersToRunFromNodeRepository(),
+ this::fetchContainersToRunFromNodeRepository,
initialSchedulerDelayMillis,
intervalSchedulerInMillis,
MILLISECONDS);
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/LocalZoneUtils.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/LocalZoneUtils.java
index da8dda707d5..70df830285c 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/LocalZoneUtils.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/LocalZoneUtils.java
@@ -13,7 +13,10 @@ import com.yahoo.vespa.hosted.node.admin.util.ConfigServerHttpRequestExecutor;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
import com.yahoo.vespa.hosted.provision.Node;
+import java.io.BufferedReader;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.UnknownHostException;
@@ -61,7 +64,6 @@ public class LocalZoneUtils {
docker.createContainerCommand(VESPA_LOCAL_IMAGE, CONFIG_SERVER_CONTAINER_NAME, CONFIG_SERVER_HOSTNAME)
.withNetworkMode(DockerImpl.DOCKER_CUSTOM_MACVLAN_NETWORK_NAME)
.withIpAddress(environment.getInetAddressForHost(CONFIG_SERVER_HOSTNAME))
- .withVolume("/etc/hosts", "/etc/hosts")
.withEnvironment("HOSTED_VESPA_ENVIRONMENT", environment.getEnvironment())
.withEnvironment("HOSTED_VESPA_REGION", environment.getRegion())
.withEnvironment("CONFIG_SERVER_HOSTNAME", CONFIG_SERVER_HOSTNAME)
@@ -176,6 +178,7 @@ public class LocalZoneUtils {
provisionNodeRequest.put("type", "tenant");
provisionNodeRequest.put("flavor", "docker");
provisionNodeRequest.put("hostname", hostname);
+ provisionNodeRequest.put("ipAddress", "172.18.2." + i);
provisionNodeRequest.put("openStackId", "fake-" + hostname);
nodesToAdd.add(provisionNodeRequest);
}
@@ -230,6 +233,32 @@ public class LocalZoneUtils {
}
}
+ public static Set<String> getContainersForApp() {
+ return getContainersForApp(TENANT_NAME, APPLICATION_NAME, "default");
+ }
+
+ public static Set<String> getContainersForApp(String tenant, String application, String instance) {
+ String app = String.join(".", tenant, application, instance);
+ Map response = requestExecutor.get("/nodes/v2/node/?recursive=true&clusterType=container&application=" + app,
+ CONFIG_SERVER_WEB_SERVICE_PORT, Map.class);
+ List<Map> nodes = (List<Map>) response.get("nodes");
+ return nodes.stream().map(nodeMap -> (String) nodeMap.get("hostname")).collect(Collectors.toSet());
+ }
+
+ public static void packageApp(Path pathToApp) {
+ try {
+ InputStream is = Runtime.getRuntime().exec("mvn package", null, pathToApp.toFile()).getInputStream();
+
+ InputStreamReader isr = new InputStreamReader(is);
+ BufferedReader buff = new BufferedReader (isr);
+
+ String line;
+ while((line = buff.readLine()) != null) System.out.println(line);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to package application", e);
+ }
+ }
+
public static void deleteApplication() {
deleteApplication(TENANT_NAME, APPLICATION_NAME);
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java
index 635bcaaf33e..805eb72a7b2 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java
@@ -124,18 +124,20 @@ public class RunVespaLocal {
}
/**
- * Deploys an app and waits for the node to come up
- * @param pathToAppToDeploy Path to .zip file of the application to deploy
+ * Packages, deploys an app and waits for the node to come up
+ * @param pathToApp Path to the directory of the application to deploy
*/
- void deployApplication(Path pathToAppToDeploy) {
+ void deployApplication(Path pathToApp) {
+ logger.info("Packaging application");
+ LocalZoneUtils.packageApp(pathToApp);
logger.info("Deploying application");
- LocalZoneUtils.deployApp(docker, pathToAppToDeploy);
+ LocalZoneUtils.deployApp(docker, pathToApp.resolve("target/application.zip"));
- // TODO: Automatically find correct node to send request to
+ Set<String> containers = LocalZoneUtils.getContainersForApp();
try {
- URL nodeUrl = new URL("http://cnode-1:" + System.getenv("VESPA_WEB_SERVICE_PORT") + "/");
+ URL nodeUrl = new URL("http://" + containers.iterator().next() + ":" + System.getenv("VESPA_WEB_SERVICE_PORT") + "/");
assertTrue(LocalZoneUtils.isReachableURL(nodeUrl, Duration.ofSeconds(120)));
- logger.info("Ready");
+ logger.info("Endpoint " + nodeUrl + " is now ready");
} catch (MalformedURLException e) {
e.printStackTrace();
}