diff options
author | freva <valerijf@yahoo-inc.com> | 2016-12-21 11:45:54 +0100 |
---|---|---|
committer | freva <valerijf@yahoo-inc.com> | 2016-12-21 11:45:54 +0100 |
commit | 7f80e9910e1df82caa770c3284ab8dba62818ea3 (patch) | |
tree | 90a70c092fc0fbb1fe6e924c95b0b10cf03371dd | |
parent | e4204a1dfcc24583f799b42df05f63b9c1762729 (diff) |
Updated RunVespaLocal to use sample-apps/basic-search-for-docker
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(); } |