You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sp...@apache.org on 2015/05/15 02:38:33 UTC
ambari git commit: AMBARI-11141: Sample view for auto-cluster create
that uses Ambari REST API
Repository: ambari
Updated Branches:
refs/heads/trunk 9b1938fd6 -> 00bd07866
AMBARI-11141: Sample view for auto-cluster create that uses Ambari REST API
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/00bd0786
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/00bd0786
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/00bd0786
Branch: refs/heads/trunk
Commit: 00bd07866e558b97befda8296c40c7ac7c4d6a9a
Parents: 9b1938f
Author: sposetti <co...@yahoo.com>
Authored: Thu May 14 20:36:13 2015 -0400
Committer: sposetti <co...@yahoo.com>
Committed: Thu May 14 20:36:13 2015 -0400
----------------------------------------------------------------------
ambari-views/examples/README.md | 4 +-
.../examples/auto-cluster-view/docs/index.md | 56 +++++++++
ambari-views/examples/auto-cluster-view/pom.xml | 96 +++++++++++++++
.../view/examples/AutoClusterService.java | 116 +++++++++++++++++++
.../src/main/resources/ui/index.html | 63 ++++++++++
.../src/main/resources/view.xml | 62 ++++++++++
6 files changed, 396 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/00bd0786/ambari-views/examples/README.md
----------------------------------------------------------------------
diff --git a/ambari-views/examples/README.md b/ambari-views/examples/README.md
index ec1226e..650f650 100644
--- a/ambari-views/examples/README.md
+++ b/ambari-views/examples/README.md
@@ -23,12 +23,14 @@ See the documentation pages for the view examples.
* [Hello World View](helloworld-view/docs/index.md) : Demonstrates the very basics of how to write and deploy a view in Ambari.
* [Hello Servlet View](hello-servlet-view/docs/index.md) : Includes instance parameters and a servlet for a dynamic UI.
+* [Hello Spring View](hello-spring-view/docs/index.md) : A very simple view example that uses Spring MVC.
* [Favorite view](favorite-view/docs/index.md) : Exposes a simple resource to work with instance parameters and data.
* [Calculator View](calculator-view/docs/index.md) : Includes a simple resource.
* [Phone List View](phone-list-view/docs/index.md) : Demonstrates simple view persistence.
* [Property View](property-view/docs/index.md) : Demonstrates view configuration property options.
* [Property Validator View](property-validator-view/docs/index.md) : Demonstrates configuration property validator.
-* [Weather view](weather-view/docs/index.md)
+* [Weather view](weather-view/docs/index.md) : Demonstrates the the use of instance parameters, a servlet for a dynamic UI and a managed resource.
+* [Auto Cluster view](auto-cluster-view/docs/index.md) : Example view that can be auto-created and configured to leverage the Ambari REST APIs to access a cluster being managed by Ambari.
Please also visit the [Apache Ambari Project](http://ambari.apache.org/) page for more information.
http://git-wip-us.apache.org/repos/asf/ambari/blob/00bd0786/ambari-views/examples/auto-cluster-view/docs/index.md
----------------------------------------------------------------------
diff --git a/ambari-views/examples/auto-cluster-view/docs/index.md b/ambari-views/examples/auto-cluster-view/docs/index.md
new file mode 100644
index 0000000..111962c
--- /dev/null
+++ b/ambari-views/examples/auto-cluster-view/docs/index.md
@@ -0,0 +1,56 @@
+<!---
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+Auto Cluster View Example
+======
+
+Description
+-----
+The Auto Cluster View is an example of a view that can be auto-created and configured to leverage
+the Ambari REST APIs to access a cluster being managed by Ambari.
+
+Build
+-----
+
+The view can be built as a maven project.
+
+ cd ambari-views/examples/auto-cluster-view
+ mvn clean package
+
+The build will produce the view archive.
+
+ ambari-views/examples/auto-cluster-view/target/auto-cluster-view-???.jar
+
+Deploy
+------
+
+Place the view archive on the Ambari Server and start to deploy.
+
+ cp auto-cluster-view-???.jar /var/lib/ambari-server/resources/views/
+ ambari-server start
+
+
+Cluster Association
+-----
+
+To associate a view instance with a cluster, you need to have an Ambari managed cluster.
+Use the Ambari install wizard to create a cluster that includes the YARN service.
+
+When the YARN service is added to the cluster a new instance of the AUTO-CLUSTER view named AUTO_CLUSTER_INSTANCE should be automatically added.
+
+Access the view instance end point:
+
+ api/v1/views/AUTO-CLUSTER/versions/0.1.0/instances/AUTO_CLUSTER_INSTANCE
+
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/00bd0786/ambari-views/examples/auto-cluster-view/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-views/examples/auto-cluster-view/pom.xml b/ambari-views/examples/auto-cluster-view/pom.xml
new file mode 100644
index 0000000..867fa09
--- /dev/null
+++ b/ambari-views/examples/auto-cluster-view/pom.xml
@@ -0,0 +1,96 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<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">
+ <parent>
+ <groupId>org.apache.ambari</groupId>
+ <artifactId>ambari-view-examples</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>auto-cluster-view</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <name>Ambari Auto Cluster View</name>
+ <url>http://maven.apache.org</url>
+ <properties>
+ <ambari.dir>${project.parent.parent.parent.basedir}</ambari.dir>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.ambari</groupId>
+ <artifactId>ambari-views</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-server</artifactId>
+ <version>1.8</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.12</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>rpm-maven-plugin</artifactId>
+ <version>2.0.1</version>
+ <executions>
+ <execution>
+ <phase>none</phase>
+ <goals>
+ <goal>rpm</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <resources>
+ <resource>
+ <directory>src/main/resources/ui/</directory>
+ <filtering>false</filtering>
+ </resource>
+ <resource>
+ <directory>src/main/resources/</directory>
+ <filtering>false</filtering>
+ <includes>
+ <include>view.xml</include>
+ </includes>
+ </resource>
+ <resource>
+ <targetPath>WEB-INF/lib</targetPath>
+ <filtering>false</filtering>
+ <directory>target/lib</directory>
+ </resource>
+ </resources>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/ambari/blob/00bd0786/ambari-views/examples/auto-cluster-view/src/main/java/org/apache/ambari/view/examples/AutoClusterService.java
----------------------------------------------------------------------
diff --git a/ambari-views/examples/auto-cluster-view/src/main/java/org/apache/ambari/view/examples/AutoClusterService.java b/ambari-views/examples/auto-cluster-view/src/main/java/org/apache/ambari/view/examples/AutoClusterService.java
new file mode 100644
index 0000000..f260858
--- /dev/null
+++ b/ambari-views/examples/auto-cluster-view/src/main/java/org/apache/ambari/view/examples/AutoClusterService.java
@@ -0,0 +1,116 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.view.examples;
+
+import org.apache.ambari.view.ViewContext;
+import org.apache.ambari.view.AmbariStreamProvider;
+import org.apache.ambari.view.URLStreamProvider;
+import org.apache.ambari.view.cluster.Cluster;
+import org.apache.commons.codec.binary.Base64;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.util.Iterator;
+
+/**
+ * The AutoClusterService service.
+ */
+public class AutoClusterService {
+
+ /**
+ * The view context.
+ */
+ @Inject
+ ViewContext context;
+
+ /**
+ * Handles: GET /.
+ *
+ * @param headers http headers
+ * @param ui uri info
+ *
+ * @return value JSON representation
+ */
+ @GET
+ @Path("/")
+ @Produces({"text/plain", "application/json"})
+ public Response getValue(@Context HttpHeaders headers, @Context UriInfo ui) {
+
+ StringBuilder sb = new StringBuilder();
+ try {
+ InputStream in = null;
+
+ //
+ // do I have a cluster associated with this view instance?
+ //
+ Cluster c = context.getCluster();
+ if (c != null) {
+ AmbariStreamProvider stream = context.getAmbariStreamProvider();
+
+ // use the cluster name and AmbariStreamProvider to access Ambari REST API
+ String clusterName = c.getName();
+ in = stream.readFrom("/api/v1/clusters/"+clusterName, "GET", null, null, true);
+ } else {
+ URLStreamProvider stream = context.getURLStreamProvider();
+
+ // use the view instance configuration to access Ambari REST API
+ String baseUrl = context.getProperties().get("ambari.server.url");
+ String username = context.getProperties().get("ambari.server.username");
+ String password = context.getProperties().get("ambari.server.password");
+
+ HashMap<String, String> hds = new HashMap<String, String>();
+ hds.put("X-Requested-By", "auto-cluster-view");
+
+ String authString = username + ":" + password;
+ byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
+ String authStringEnc = new String(authEncBytes);
+
+ hds.put("Authorization", "Basic " + authStringEnc);
+
+ in = stream.readFrom(baseUrl, "GET", null, hds);
+ }
+
+ BufferedReader r = new BufferedReader(new InputStreamReader(in));
+ String str = null;
+ while ((str = r.readLine()) != null) {
+ sb.append(str);
+ }
+
+ } catch (java.io.IOException ioe) {
+ ioe.printStackTrace(); //!!!
+ }
+
+ return Response.ok(sb.toString()).build();
+ }
+
+} // end AutoClusterService
http://git-wip-us.apache.org/repos/asf/ambari/blob/00bd0786/ambari-views/examples/auto-cluster-view/src/main/resources/ui/index.html
----------------------------------------------------------------------
diff --git a/ambari-views/examples/auto-cluster-view/src/main/resources/ui/index.html b/ambari-views/examples/auto-cluster-view/src/main/resources/ui/index.html
new file mode 100644
index 0000000..d5c3a8e
--- /dev/null
+++ b/ambari-views/examples/auto-cluster-view/src/main/resources/ui/index.html
@@ -0,0 +1,63 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html>
+<head>
+ <style>
+ body{
+ text-align: center;
+ font-family: arial;
+ }
+ .button{
+ margin:20px;
+ font-size:16px;
+ font-weight: bold;
+ padding:5px 10px;
+ }
+ </style>
+</head>
+<body>
+ <h1>Property Service</h1>
+ <br />
+ <input type="button" value="Get Value" class="button" />
+ <br />
+ <span id="results"></span>
+
+ <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
+
+ <script>
+ function _getPropertyResourceUri() {
+ var parts = window.location.pathname.match(/\/[^\/]*/g);
+ var view = parts[1];
+ var version = '/versions' + parts[2];
+ var instance = parts[3];
+ return '/api/v1/views' + view + version + '/instances' + instance+'/resources/properties';
+ }
+ $(document).ready(function() {
+ $('.button').click(function(){
+ $.ajax({
+ url: _getPropertyResourceUri(),
+ dataType: "text",
+ success: function(data) {
+ $('#results').html(data);
+ }
+ });
+ });
+ });
+ </script>
+
+</body>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/00bd0786/ambari-views/examples/auto-cluster-view/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/ambari-views/examples/auto-cluster-view/src/main/resources/view.xml b/ambari-views/examples/auto-cluster-view/src/main/resources/view.xml
new file mode 100644
index 0000000..b7096ab
--- /dev/null
+++ b/ambari-views/examples/auto-cluster-view/src/main/resources/view.xml
@@ -0,0 +1,62 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<view>
+ <name>AUTO-CLUSTER</name>
+ <label>AutoCluster</label>
+ <version>0.1.0</version>
+
+ <min-ambari-version>2.0.*</min-ambari-version>
+
+ <parameter>
+ <name>ambari.server.url</name>
+ <description>Enter Ambari Server Cluster URL</description>
+ <placeholder>http://ambari.server:8080/api/v1/clusters/c1</placeholder>
+ <cluster-config>fake</cluster-config>
+ <default-value>test</default-value>
+ <required>true</required>
+ </parameter>
+ <parameter>
+ <name>ambari.server.username</name>
+ <description>Enter Ambari Server username</description>
+ <cluster-config>fake</cluster-config>
+ <default-value>test</default-value>
+ <required>true</required>
+ </parameter>
+ <parameter>
+ <name>ambari.server.password</name>
+ <description>Enter Ambari Server password</description>
+ <cluster-config>fake</cluster-config>
+ <default-value>test</default-value>
+ <masked>true</masked>
+ <required>true</required>
+ </parameter>
+
+ <resource>
+ <name>properties</name>
+ <service-class>org.apache.ambari.view.examples.AutoClusterService</service-class>
+ </resource>
+
+ <auto-instance>
+ <name>AUTO_CLUSTER_INSTANCE</name>
+ <label>Auto Cluster Instance View</label>
+ <description>This view instance is auto created when the YARN service is added to a cluster.</description>
+ <stack-id>HDP-2.*</stack-id>
+ <services>
+ <service>YARN</service>
+ </services>
+ </auto-instance>
+</view>
\ No newline at end of file