You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by js...@apache.org on 2014/01/16 23:59:12 UTC

[2/2] git commit: AMBARI-4325. Update stacks definitions/endpoint with component dependencies.

AMBARI-4325. Update stacks definitions/endpoint with component dependencies.


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2e29777a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2e29777a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2e29777a

Branch: refs/heads/trunk
Commit: 2e29777a59795aededda156b36088db7fa6f1ea2
Parents: 44f4f91
Author: John Speidel <js...@hortonworks.com>
Authored: Thu Jan 16 16:38:56 2014 -0500
Committer: John Speidel <js...@hortonworks.com>
Committed: Thu Jan 16 17:58:39 2014 -0500

----------------------------------------------------------------------
 .../ambari/server/state/AutoDeployInfo.java     |  75 ++++
 .../ambari/server/state/ComponentInfo.java      |  38 +-
 .../ambari/server/state/DependencyInfo.java     | 103 +++++
 .../HDP/1.3.4/services/FLUME/metainfo.xml       |   1 +
 .../HDP/1.3.4/services/GANGLIA/metainfo.xml     |   5 +
 .../HDP/1.3.4/services/HBASE/metainfo.xml       |  20 +
 .../stacks/HDP/1.3.4/services/HDFS/metainfo.xml |   4 +
 .../stacks/HDP/1.3.4/services/HIVE/metainfo.xml |  24 ++
 .../stacks/HDP/1.3.4/services/HUE/metainfo.xml  |   1 +
 .../HDP/1.3.4/services/MAPREDUCE/metainfo.xml   |  23 +-
 .../HDP/1.3.4/services/NAGIOS/metainfo.xml      |   1 +
 .../HDP/1.3.4/services/OOZIE/metainfo.xml       |  34 ++
 .../stacks/HDP/1.3.4/services/PIG/metainfo.xml  |   1 +
 .../HDP/1.3.4/services/SQOOP/metainfo.xml       |  17 +
 .../HDP/1.3.4/services/WEBHCAT/metainfo.xml     |  34 +-
 .../HDP/1.3.4/services/ZOOKEEPER/metainfo.xml   |   2 +
 .../server/api/services/AmbariMetaInfoTest.java | 419 ++++++++++++++++++-
 .../AmbariManagementControllerTest.java         |  11 +-
 .../resources/stacks/HDP/1.3.4/metainfo.xml     |  22 +
 .../HDP/1.3.4/services/FLUME/metainfo.xml       |  31 ++
 .../HDP/1.3.4/services/GANGLIA/metainfo.xml     | 106 +++++
 .../HDP/1.3.4/services/HBASE/metainfo.xml       | 123 ++++++
 .../stacks/HDP/1.3.4/services/HDFS/metainfo.xml | 146 +++++++
 .../stacks/HDP/1.3.4/services/HIVE/metainfo.xml | 186 ++++++++
 .../stacks/HDP/1.3.4/services/HUE/metainfo.xml  |  32 ++
 .../HDP/1.3.4/services/MAPREDUCE/metainfo.xml   | 102 +++++
 .../HDP/1.3.4/services/NAGIOS/metainfo.xml      | 106 +++++
 .../HDP/1.3.4/services/OOZIE/metainfo.xml       | 113 +++++
 .../stacks/HDP/1.3.4/services/PIG/metainfo.xml  |  61 +++
 .../HDP/1.3.4/services/SQOOP/metainfo.xml       |  77 ++++
 .../HDP/1.3.4/services/WEBHCAT/metainfo.xml     |  97 +++++
 .../HDP/1.3.4/services/ZOOKEEPER/metainfo.xml   |  72 ++++
 32 files changed, 2067 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/java/org/apache/ambari/server/state/AutoDeployInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/AutoDeployInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/AutoDeployInfo.java
new file mode 100644
index 0000000..9e97d5f
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/AutoDeployInfo.java
@@ -0,0 +1,75 @@
+/**
+ * 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.server.state;
+
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Represents auto-deployment stack information.
+ * This element may be a child of the component and dependency elements.
+ */
+public class AutoDeployInfo {
+  /**
+   * Whether auto-deploy is enabled
+   */
+  private boolean m_enabled = true;
+
+  /**
+   * Optional component name to co-locate with.
+   * Specified in the form serviceName/componentName.
+   */
+  @XmlElement(name="co-locate")
+  private String m_coLocate;
+
+  /**
+   * Setter for enabled property.
+   *
+   * @param enabled true if enabled, false otherwise
+   */
+  public void setEnabled(boolean enabled) {
+    m_enabled = enabled;
+  }
+
+  /**
+   * Getter for the enabled property.
+   *
+   * @return true if enabled, false otherwise
+   */
+  public boolean isEnabled() {
+    return m_enabled;
+  }
+
+  /**
+   * Setter for the co-locate property.
+   *
+   * @param coLocate a component name in the form serviceName/componentName
+   */
+  public void setCoLocate(String coLocate) {
+    m_coLocate = coLocate;
+  }
+
+  /**
+   * Getter for the co-located property.
+   *
+   * @return a component name in the form serviceName/componentName
+   */
+  public String getCoLocate() {
+    return m_coLocate;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
index 7be8fc3..8798ef1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
@@ -18,7 +18,11 @@
 
 package org.apache.ambari.server.state;
 
-import javax.xml.bind.annotation.*;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlElements;
 
 import org.apache.ambari.server.controller.StackServiceComponentResponse;
 
@@ -30,6 +34,7 @@ public class ComponentInfo {
   private String name;
   private String category;
   private boolean deleted;
+  private String cardinality;
 
   /**
   * Added at schema ver 2
@@ -43,6 +48,21 @@ public class ComponentInfo {
   @XmlElements(@XmlElement(name="customCommand"))
   private List<CustomCommandDefinition> customCommands;
 
+  /**
+   * Component dependencies to other components.
+   */
+  @XmlElementWrapper(name="dependencies")
+  @XmlElements(@XmlElement(name="dependency"))
+  private List<DependencyInfo> dependencies = new ArrayList<DependencyInfo>();
+
+  /**
+   * Auto-deployment information.
+   * If auto-deployment is enabled and the component doesn't meet the cardinality requirement,
+   * the component is auto-deployed to the cluster topology.
+   */
+  @XmlElement(name="auto-deploy")
+  private AutoDeployInfo m_autoDeploy;
+
   public String getName() {
     return name;
   }
@@ -100,4 +120,20 @@ public class ComponentInfo {
     }
     return false;
   }
+
+  public List<DependencyInfo> getDependencies() {
+    return dependencies;
+  }
+
+  public AutoDeployInfo getAutoDeploy() {
+    return m_autoDeploy;
+  }
+
+  public void setCardinality(String cardinality) {
+    this.cardinality = cardinality;
+  }
+
+  public String getCardinality() {
+    return this.cardinality;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/java/org/apache/ambari/server/state/DependencyInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/DependencyInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/DependencyInfo.java
new file mode 100644
index 0000000..305b98d
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/DependencyInfo.java
@@ -0,0 +1,103 @@
+/**
+ * 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.server.state;
+
+
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Represents stack component dependency information.
+ */
+public class DependencyInfo {
+  /**
+   * The name of the component which is the dependency.
+   * Specified in the form serviceName/componentName.
+   */
+  private String m_name;
+
+  /**
+   * The scope of the dependency.  Either "cluster" or "host".
+   */
+  private String m_scope;
+
+  /**
+   * Auto-deployment information for the dependency.
+   * If auto-deployment is enabled for the dependency, the dependency is
+   * automatically deployed if it is not specified in the provided topology.
+   */
+  @XmlElement(name="auto-deploy")
+  private AutoDeployInfo m_autoDeploy;
+
+
+  /**
+   * Setter for name property.
+   *
+   * @param name the name of the component which is the dependency
+   *             in the form serviceName/componentName
+   */
+  public void setName(String name) {
+    m_name = name;
+  }
+
+  /**
+   * Getter for name property.
+   *
+   * @return the name of the component which is the dependency
+   *         in the form serviceName/componentName
+   */
+  public String getName() {
+    return m_name;
+  }
+
+  /**
+   * Setter for scope property.
+   *
+   * @param scope the scope of the dependency.  Either "cluster" or "host".
+   */
+  public void setScope(String scope) {
+    m_scope = scope;
+  }
+
+  /**
+   * Getter for scope property.
+   *
+   * @return either "cluster" or "host".
+   */
+  public String getScope() {
+    return m_scope;
+  }
+
+  /**
+   * Setter for auto-deploy property.
+   *
+   * @param autoDeploy auto-deploy information
+   */
+  public void setAutoDeploy(AutoDeployInfo autoDeploy) {
+    m_autoDeploy = autoDeploy;
+  }
+
+  /**
+   * Getter for the auto-deploy property.
+   *
+   * @return auto-deploy information
+   */
+  public AutoDeployInfo getAutoDeploy() {
+    return m_autoDeploy;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
index 13eba83..bebb54e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
@@ -24,6 +24,7 @@
         <component>
             <name>FLUME_SERVER</name>
             <category>MASTER</category>
+            <cardinality>1</cardinality>
         </component>
     </components>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
index 1406f45..09d78a6 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
@@ -26,6 +26,7 @@
         <component>
           <name>GANGLIA_SERVER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
           <commandScript>
             <script>scripts/ganglia_server.py</script>
             <scriptType>PYTHON</scriptType>
@@ -36,6 +37,10 @@
         <component>
           <name>GANGLIA_MONITOR</name>
           <category>SLAVE</category>
+          <cardinality>ALL</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+          </auto-deploy>
           <commandScript>
             <script>scripts/ganglia_monitor.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
index 129d0ae..4c610db 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
@@ -28,6 +28,24 @@
         <component>
           <name>HBASE_MASTER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <dependencies>
+            <dependency>
+              <name>HDFS/HDFS_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_SERVER</name>
+              <scope>cluster</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+                <co-locate>HBASE/HBASE_MASTER</co-locate>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
           <commandScript>
             <script>scripts/hbase_master.py</script>
             <scriptType>PYTHON</scriptType>
@@ -48,6 +66,7 @@
         <component>
           <name>HBASE_REGIONSERVER</name>
           <category>SLAVE</category>
+          <cardinality>1+</cardinality>
           <commandScript>
             <script>scripts/hbase_regionserver.py</script>
             <scriptType>PYTHON</scriptType>
@@ -67,6 +86,7 @@
         <component>
           <name>HBASE_CLIENT</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
           <commandScript>
             <script>scripts/hbase_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
index 5f587d3..009acae 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
@@ -27,6 +27,7 @@
         <component>
           <name>NAMENODE</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
           <commandScript>
             <script>scripts/namenode.py</script>
             <scriptType>PYTHON</scriptType>
@@ -47,6 +48,7 @@
         <component>
           <name>DATANODE</name>
           <category>SLAVE</category>
+          <cardinality>1+</cardinality>
           <commandScript>
             <script>scripts/datanode.py</script>
             <scriptType>PYTHON</scriptType>
@@ -57,6 +59,7 @@
         <component>
           <name>SECONDARY_NAMENODE</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
           <commandScript>
             <script>scripts/snamenode.py</script>
             <scriptType>PYTHON</scriptType>
@@ -67,6 +70,7 @@
         <component>
           <name>HDFS_CLIENT</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
           <commandScript>
             <script>scripts/hdfs_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
index dc43ab6..0a0f8fa 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
@@ -27,6 +27,12 @@
         <component>
           <name>HIVE_METASTORE</name>
           <category>MASTER</category>
+          <!-- may be 0 if specifying external metastore, how to specify this? -->
+          <cardinality>1</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+            <co-locate>HIVE/HIVE_SERVER</co-locate>
+          </auto-deploy>
           <commandScript>
             <script>scripts/hive_metastore.py</script>
             <scriptType>PYTHON</scriptType>
@@ -37,6 +43,17 @@
         <component>
           <name>HIVE_SERVER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <dependencies>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_SERVER</name>
+              <scope>cluster</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+                <co-locate>HIVE/HIVE_SERVER</co-locate>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
           <commandScript>
             <script>scripts/hive_server.py</script>
             <scriptType>PYTHON</scriptType>
@@ -46,6 +63,12 @@
         <component>
           <name>MYSQL_SERVER</name>
           <category>MASTER</category>
+          <!-- may be 0 if specifying external db, how to specify this? -->
+          <cardinality>1</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+            <co-locate>HIVE/HIVE_SERVER</co-locate>
+          </auto-deploy>
           <commandScript>
             <script>scripts/mysql_server.py</script>
             <scriptType>PYTHON</scriptType>
@@ -55,6 +78,7 @@
         <component>
           <name>HIVE_CLIENT</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
           <commandScript>
             <script>scripts/hive_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
index ba580ca..0a6b59e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
@@ -25,6 +25,7 @@
         <component>
             <name>HUE_SERVER</name>
             <category>MASTER</category>
+            <cardinality>1</cardinality>
         </component>
     </components>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
index 2a91403..71783d7 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
@@ -24,10 +24,10 @@
       <comment>Apache Hadoop Distributed Processing Framework</comment>
       <version>1.2.0.1.3.3.0</version>
       <components>
-
         <component>
           <name>JOBTRACKER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
           <commandScript>
             <script>scripts/jobtracker.py</script>
             <scriptType>PYTHON</scriptType>
@@ -48,6 +48,7 @@
         <component>
           <name>TASKTRACKER</name>
           <category>SLAVE</category>
+          <cardinality>1+</cardinality>
           <commandScript>
             <script>scripts/tasktracker.py</script>
             <scriptType>PYTHON</scriptType>
@@ -58,26 +59,30 @@
         <component>
           <name>MAPREDUCE_CLIENT</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality> 
           <commandScript>
             <script>scripts/client.py</script>
             <scriptType>PYTHON</scriptType>
             <timeout>600</timeout>
           </commandScript>
         </component>
-        
               
-	    <component>
-	      <name>HISTORYSERVER</name>
-	      <category>MASTER</category>
-	      <commandScript>
+        <component>
+          <name>HISTORYSERVER</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+            <co-locate>MAPREDUCE/JOBTRACKER</co-locate>
+          </auto-deploy>
+          <commandScript>
             <script>scripts/historyserver.py</script>
             <scriptType>PYTHON</scriptType>
             <timeout>600</timeout>
           </commandScript>
-	    </component>
+        </component>
       </components>
 
-
       <commandScript>
         <script>scripts/service_check.py</script>
         <scriptType>PYTHON</scriptType>
@@ -94,4 +99,4 @@
     </service>
 
   </services>
-</metainfo>
\ No newline at end of file
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
index 9af461e..a4c500d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
@@ -26,6 +26,7 @@
         <component>
             <name>NAGIOS_SERVER</name>
             <category>MASTER</category>
+            <cardinality>1</cardinality>
             <commandScript>
               <script>scripts/nagios_server.py</script>
               <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/OOZIE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/OOZIE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/OOZIE/metainfo.xml
index 1492cd4..487104d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/OOZIE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/OOZIE/metainfo.xml
@@ -27,6 +27,23 @@
         <component>
           <name>OOZIE_SERVER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <dependencies>
+            <dependency>
+              <name>HDFS/HDFS_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>MAPREDUCE/MAPREDUCE_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
           <commandScript>
             <script>scripts/oozie_server.py</script>
             <scriptType>PYTHON</scriptType>
@@ -37,6 +54,23 @@
         <component>
           <name>OOZIE_CLIENT</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
+          <dependencies>
+            <dependency>
+              <name>HDFS/HDFS_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>MAPREDUCE/MAPREDUCE_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
           <commandScript>
             <script>scripts/oozie_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/PIG/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/PIG/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/PIG/metainfo.xml
index 3f3cff1..9fb2c06 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/PIG/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/PIG/metainfo.xml
@@ -26,6 +26,7 @@
         <component>
           <name>PIG</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
           <commandScript>
             <script>scripts/pig_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/SQOOP/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/SQOOP/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/SQOOP/metainfo.xml
index 40a04b7..426bb25 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/SQOOP/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/SQOOP/metainfo.xml
@@ -29,6 +29,23 @@
         <component>
           <name>SQOOP</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
+          <dependencies>
+            <dependency>
+              <name>HDFS/HDFS_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>MAPREDUCE/MAPREDUCE_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
           <commandScript>
             <script>scripts/sqoop_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/WEBHCAT/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/WEBHCAT/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/WEBHCAT/metainfo.xml
index 35a090e..d6c2a1f 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/WEBHCAT/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/WEBHCAT/metainfo.xml
@@ -26,6 +26,38 @@
         <component>
           <name>WEBHCAT_SERVER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <dependencies>
+            <dependency>
+              <name>HDFS/HDFS_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>MAPREDUCE/MAPREDUCE_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_SERVER</name>
+              <scope>cluster</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+                <co-locate>WEBHCAT/WEBHCAT_SERVER</co-locate>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
           <commandScript>
             <script>scripts/webhcat_server.py</script>
             <scriptType>PYTHON</scriptType>
@@ -62,4 +94,4 @@
       </configuration-dependencies>
     </service>
   </services>
-</metainfo>
\ No newline at end of file
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/ZOOKEEPER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/ZOOKEEPER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/ZOOKEEPER/metainfo.xml
index b92a270..22c3eb8 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/ZOOKEEPER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.4/services/ZOOKEEPER/metainfo.xml
@@ -27,6 +27,7 @@
         <component>
           <name>ZOOKEEPER_SERVER</name>
           <category>MASTER</category>
+          <cardinality>1</cardinality>
           <commandScript>
             <script>scripts/zookeeper_server.py</script>
             <scriptType>PYTHON</scriptType>
@@ -37,6 +38,7 @@
         <component>
           <name>ZOOKEEPER_CLIENT</name>
           <category>CLIENT</category>
+          <cardinality>0+</cardinality>
           <commandScript>
             <script>scripts/zookeeper_client.py</script>
             <scriptType>PYTHON</scriptType>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
index 547764e..3a348e7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
@@ -42,13 +42,7 @@ import junit.framework.Assert;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.StackAccessException;
 import org.apache.ambari.server.api.util.StackExtensionHelper;
-import org.apache.ambari.server.state.ComponentInfo;
-import org.apache.ambari.server.state.OperatingSystemInfo;
-import org.apache.ambari.server.state.PropertyInfo;
-import org.apache.ambari.server.state.RepositoryInfo;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.Stack;
-import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.*;
 import org.apache.ambari.server.state.stack.MetricDefinition;
 import org.apache.commons.io.FileUtils;
 import org.junit.Before;
@@ -653,4 +647,415 @@ public class AmbariMetaInfoTest {
     list = metaInfo.getMetrics(STACK_NAME_HDP, "2.0.6", "HDFS", "DATANODE", "Component");
     Assert.assertNull(list);
   }
+
+  @Test
+  public void testFlume134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "FLUME");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(1, componentList.size());
+    ComponentInfo component = componentList.get(0);
+    Assert.assertEquals("FLUME_SERVER", component.getName());
+    // dependencies
+    List<DependencyInfo> dependencyList = component.getDependencies();
+    Assert.assertEquals(0, dependencyList.size());
+    // component auto deploy
+    Assert.assertNull(component.getAutoDeploy());
+    // cardinality
+    Assert.assertEquals("1", component.getCardinality());
+  }
+
+  @Test
+  public void testGanglia134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "GANGLIA");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(2, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("GANGLIA_SERVER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("GANGLIA_MONITOR")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertTrue(component.getAutoDeploy().isEnabled());
+        // cardinality
+        Assert.assertEquals("ALL", component.getCardinality());
+      }
+    }
+  }
+
+  @Test
+  public void testHBase134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "HBASE");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(3, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("HBASE_MASTER")) {
+        // dependencies
+        List<DependencyInfo> dependencyList = component.getDependencies();
+        Assert.assertEquals(2, dependencyList.size());
+        for (DependencyInfo dependency : dependencyList) {
+          if (dependency.getName().equals("HDFS/HDFS_CLIENT")) {
+            Assert.assertEquals("host", dependency.getScope());
+            Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+          } else if (dependency.getName().equals("ZOOKEEPER/ZOOKEEPER_SERVER")) {
+            Assert.assertEquals("cluster", dependency.getScope());
+            AutoDeployInfo autoDeploy = dependency.getAutoDeploy();
+            Assert.assertEquals(true, autoDeploy.isEnabled());
+            Assert.assertEquals("HBASE/HBASE_MASTER", autoDeploy.getCoLocate());
+          } else {
+            Assert.fail("Unexpected dependency");
+          }
+        }
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("HBASE_REGIONSERVER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1+", component.getCardinality());
+      }
+      if (name.equals("HBASE_CLIENT")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("0+", component.getCardinality());
+      }
+    }
+  }
+
+  @Test
+  public void testHDFS134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "HDFS");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(4, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("NAMENODE")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("DATANODE")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1+", component.getCardinality());
+      }
+      if (name.equals("SECONDARY_NAMENODE")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("HDFS_CLIENT")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("0+", component.getCardinality());
+      }
+    }
+  }
+
+  @Test
+  public void testHive134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "HIVE");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(4, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("HIVE_METASTORE")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        AutoDeployInfo autoDeploy = component.getAutoDeploy();
+        Assert.assertTrue(autoDeploy.isEnabled());
+        Assert.assertEquals("HIVE/HIVE_SERVER", autoDeploy.getCoLocate());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("HIVE_SERVER")) {
+        // dependencies
+        List<DependencyInfo> dependencyList = component.getDependencies();
+        Assert.assertEquals(1, dependencyList.size());
+        DependencyInfo dependency = dependencyList.get(0);
+        Assert.assertEquals("ZOOKEEPER/ZOOKEEPER_SERVER", dependency.getName());
+        Assert.assertEquals("cluster", dependency.getScope());
+        AutoDeployInfo autoDeploy = dependency.getAutoDeploy();
+        Assert.assertTrue(autoDeploy.isEnabled());
+        Assert.assertEquals("HIVE/HIVE_SERVER", autoDeploy.getCoLocate());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("MYSQL_SERVER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        AutoDeployInfo autoDeploy = component.getAutoDeploy();
+        Assert.assertTrue(autoDeploy.isEnabled());
+        Assert.assertEquals("HIVE/HIVE_SERVER", autoDeploy.getCoLocate());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("HIVE_CLIENT")) {
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("0+", component.getCardinality());
+      }
+    }
+  }
+
+  @Test
+  public void testHue134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "HUE");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(1, componentList.size());
+    ComponentInfo component = componentList.get(0);
+    Assert.assertEquals("HUE_SERVER", component.getName());
+    // dependencies
+    Assert.assertEquals(0, component.getDependencies().size());
+    // component auto deploy
+    Assert.assertNull(component.getAutoDeploy());
+    // cardinality
+    Assert.assertEquals("1", component.getCardinality());
+  }
+
+  @Test
+  public void testMapReduce134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "MAPREDUCE");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(4, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("JOBTRACKER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("TASKTRACKER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1+", component.getCardinality());
+      }
+      if (name.equals("HISTORYSERVER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        AutoDeployInfo autoDeploy = component.getAutoDeploy();
+        Assert.assertTrue(autoDeploy.isEnabled());
+        Assert.assertEquals("MAPREDUCE/JOBTRACKER", autoDeploy.getCoLocate());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("MAPREDUCE_CLIENT")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("0+", component.getCardinality());
+      }
+    }
+  }
+
+  @Test
+  public void testNagios134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "NAGIOS");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(1, componentList.size());
+    ComponentInfo component = componentList.get(0);
+    Assert.assertEquals("NAGIOS_SERVER", component.getName());
+    // dependencies
+    Assert.assertEquals(0, component.getDependencies().size());
+    // component auto deploy
+    Assert.assertNull(component.getAutoDeploy());
+    // cardinality
+    Assert.assertEquals("1", component.getCardinality());
+  }
+
+  @Test
+  public void testOozie134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "OOZIE");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(2, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("OOZIE_SERVER")) {
+        // dependencies
+        List<DependencyInfo> dependencyList = component.getDependencies();
+        Assert.assertEquals(2, dependencyList.size());
+        for (DependencyInfo dependency : dependencyList) {
+          if (dependency.getName().equals("HDFS/HDFS_CLIENT")) {
+            Assert.assertEquals("host", dependency.getScope());
+            Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+          } else if (dependency.getName().equals("MAPREDUCE/MAPREDUCE_CLIENT")) {
+            Assert.assertEquals("host", dependency.getScope());
+            Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+          } else {
+            Assert.fail("Unexpected dependency");
+          }
+        }
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("OOZIE_CLIENT")) {
+        // dependencies
+        List<DependencyInfo> dependencyList = component.getDependencies();
+        Assert.assertEquals(2, dependencyList.size());
+        for (DependencyInfo dependency : dependencyList) {
+          if (dependency.getName().equals("HDFS/HDFS_CLIENT")) {
+            Assert.assertEquals("host", dependency.getScope());
+            Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+          } else if (dependency.getName().equals("MAPREDUCE/MAPREDUCE_CLIENT")) {
+            Assert.assertEquals("host", dependency.getScope());
+            Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+          } else {
+            Assert.fail("Unexpected dependency");
+          }
+        }
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("0+", component.getCardinality());
+      }
+    }
+  }
+
+  @Test
+  public void testPig134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "PIG");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(1, componentList.size());
+    ComponentInfo component = componentList.get(0);
+    Assert.assertEquals("PIG", component.getName());
+    // dependencies
+    Assert.assertEquals(0, component.getDependencies().size());
+    // component auto deploy
+    Assert.assertNull(component.getAutoDeploy());
+    // cardinality
+    Assert.assertEquals("0+", component.getCardinality());
+  }
+
+  @Test
+  public void testSqoop134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "SQOOP");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(1, componentList.size());
+    ComponentInfo component = componentList.get(0);
+    Assert.assertEquals("SQOOP", component.getName());
+    // dependencies
+    List<DependencyInfo> dependencyList = component.getDependencies();
+    Assert.assertEquals(2, dependencyList.size());
+    for (DependencyInfo dependency : dependencyList) {
+      if (dependency.getName().equals("HDFS/HDFS_CLIENT")) {
+        Assert.assertEquals("host", dependency.getScope());
+        Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+      } else if (dependency.getName().equals("MAPREDUCE/MAPREDUCE_CLIENT")) {
+        Assert.assertEquals("host", dependency.getScope());
+        Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+      } else {
+        Assert.fail("Unexpected dependency");
+      }
+    }
+    // component auto deploy
+    Assert.assertNull(component.getAutoDeploy());
+    // cardinality
+    Assert.assertEquals("0+", component.getCardinality());
+  }
+
+  @Test
+  public void testWebHCat134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "WEBHCAT");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(1, componentList.size());
+    ComponentInfo component = componentList.get(0);
+    Assert.assertEquals("WEBHCAT_SERVER", component.getName());
+    // dependencies
+    List<DependencyInfo> dependencyList = component.getDependencies();
+    Assert.assertEquals(4, dependencyList.size());
+    for (DependencyInfo dependency : dependencyList) {
+      if (dependency.getName().equals("HDFS/HDFS_CLIENT")) {
+        Assert.assertEquals("host", dependency.getScope());
+        Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+      } else if (dependency.getName().equals("MAPREDUCE/MAPREDUCE_CLIENT")) {
+        Assert.assertEquals("host", dependency.getScope());
+        Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+      } else if (dependency.getName().equals("ZOOKEEPER/ZOOKEEPER_SERVER")) {
+        Assert.assertEquals("cluster", dependency.getScope());
+        AutoDeployInfo autoDeploy = dependency.getAutoDeploy();
+        Assert.assertEquals(true, autoDeploy.isEnabled());
+        Assert.assertEquals("WEBHCAT/WEBHCAT_SERVER", autoDeploy.getCoLocate());
+      }else if (dependency.getName().equals("ZOOKEEPER/ZOOKEEPER_CLIENT")) {
+        Assert.assertEquals("host", dependency.getScope());
+        Assert.assertEquals(true, dependency.getAutoDeploy().isEnabled());
+      }else {
+        Assert.fail("Unexpected dependency");
+      }
+    }
+    // component auto deploy
+    Assert.assertNull(component.getAutoDeploy());
+    // cardinality
+    Assert.assertEquals("1", component.getCardinality());
+  }
+
+  @Test
+  public void testZooKeeper134Dependencies() throws Exception {
+    ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "1.3.4", "ZOOKEEPER");
+    List<ComponentInfo> componentList = service.getComponents();
+    Assert.assertEquals(2, componentList.size());
+    for (ComponentInfo component : componentList) {
+      String name = component.getName();
+      if (name.equals("ZOOKEEPER_SERVER")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("1", component.getCardinality());
+      }
+      if (name.equals("ZOOKEEPER_CLIENT")) {
+        // dependencies
+        Assert.assertEquals(0, component.getDependencies().size());
+        // component auto deploy
+        Assert.assertNull(component.getAutoDeploy());
+        // cardinality
+        Assert.assertEquals("0+", component.getCardinality());
+      }
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 8f92c09..1ecb9ca 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -36,7 +36,14 @@ import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.StackAccessException;
-import org.apache.ambari.server.actionmanager.*;
+import org.apache.ambari.server.actionmanager.ActionDBAccessor;
+import org.apache.ambari.server.actionmanager.ActionType;
+import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
+import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.actionmanager.Request;
+import org.apache.ambari.server.actionmanager.Stage;
+import org.apache.ambari.server.actionmanager.TargetHostType;
 import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
@@ -135,7 +142,7 @@ public class AmbariManagementControllerTest {
   private static final String REPO_ID = "HDP-1.1.1.16";
   private static final String PROPERTY_NAME = "hbase.regionserver.msginterval";
   private static final String SERVICE_NAME = "HDFS";
-  private static final int STACK_VERSIONS_CNT = 9;
+  private static final int STACK_VERSIONS_CNT = 10;
   private static final int REPOS_CNT = 3;
   private static final int STACKS_CNT = 1;
   private static final int STACK_SERVICES_CNT = 5 ;

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/metainfo.xml
new file mode 100644
index 0000000..ca45822
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/metainfo.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+    <versions>
+	  <active>true</active>
+    </versions>
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
new file mode 100644
index 0000000..bebb54e
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/FLUME/metainfo.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+    <user>root</user>
+    <comment>Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.</comment>
+    <version>1.3.1.1.3.3.0</version>
+
+    <components>
+        <component>
+            <name>FLUME_SERVER</name>
+            <category>MASTER</category>
+            <cardinality>1</cardinality>
+        </component>
+    </components>
+
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
new file mode 100644
index 0000000..09d78a6
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/GANGLIA/metainfo.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>GANGLIA</name>
+      <comment>Ganglia Metrics Collection system</comment>
+      <version>3.5.0</version>
+      <components>
+        <component>
+          <name>GANGLIA_SERVER</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <commandScript>
+            <script>scripts/ganglia_server.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>GANGLIA_MONITOR</name>
+          <category>SLAVE</category>
+          <cardinality>ALL</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+          </auto-deploy>
+          <commandScript>
+            <script>scripts/ganglia_monitor.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+      </components>
+      <osSpecifics>
+        <osSpecific>
+          <osType>any</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>libganglia-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>ganglia-devel-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>ganglia-gmetad-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>ganglia-web-3.5.7-99.noarch</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>python-rrdtool.x86_64</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>ganglia-gmond-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>ganglia-gmond-modules-python-3.5.0-99</name>
+            </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osType>suse</osType>
+          <package>
+            <type>rpm</type>
+            <name>apache2</name>
+          </package>
+          <package>
+            <type>rpm</type>
+            <name>apache2-mod_php5</name>
+          </package>
+        </osSpecific>
+        <osSpecific>
+          <osType>centos6</osType>
+          <package>
+            <type>rpm</type>
+            <name>httpd</name>
+          </package>
+        </osSpecific>
+      </osSpecifics>
+    </service>
+  </services>
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
new file mode 100644
index 0000000..4c610db
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HBASE/metainfo.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>HBASE</name>
+      <comment>Non-relational distributed database and centralized service for configuration management &amp;
+        synchronization
+      </comment>
+      <version>0.94.6.1.3.3.0</version>
+      <components>
+        <component>
+          <name>HBASE_MASTER</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <dependencies>
+            <dependency>
+              <name>HDFS/HDFS_CLIENT</name>
+              <scope>host</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_SERVER</name>
+              <scope>cluster</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+                <co-locate>HBASE/HBASE_MASTER</co-locate>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
+          <commandScript>
+            <script>scripts/hbase_master.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+          <customCommands>
+            <customCommand>
+              <name>DECOMMISSION</name>
+              <commandScript>
+                <script>scripts/hbase_master.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>600</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
+        </component>
+
+        <component>
+          <name>HBASE_REGIONSERVER</name>
+          <category>SLAVE</category>
+          <cardinality>1+</cardinality>
+          <commandScript>
+            <script>scripts/hbase_regionserver.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+          <customCommands>
+            <customCommand>
+              <name>DECOMMISSION</name>
+              <commandScript>
+                <script>scripts/hbase_regionserver.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>600</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
+        </component>
+
+        <component>
+          <name>HBASE_CLIENT</name>
+          <category>CLIENT</category>
+          <cardinality>0+</cardinality>
+          <commandScript>
+            <script>scripts/hbase_client.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+        </component>
+      </components>
+
+      <osSpecifics>
+        <osSpecific>
+          <osType>centos6</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>hbase</name>
+            </package>
+          </packages>
+        </osSpecific>
+      </osSpecifics>
+
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>global</config-type>
+        <config-type>hbase-policy</config-type>
+        <config-type>hbase-site</config-type>
+      </configuration-dependencies>
+
+    </service>
+  </services>
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
new file mode 100644
index 0000000..009acae
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HDFS/metainfo.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>HDFS</name>
+      <comment>Apache Hadoop Distributed File System</comment>
+      <version>1.2.0.1.3.3.0</version>
+
+      <components>
+        <component>
+          <name>NAMENODE</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <commandScript>
+            <script>scripts/namenode.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+          <customCommands>
+            <customCommand>
+              <name>DECOMMISSION</name>
+              <commandScript>
+                <script>scripts/namenode.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>600</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
+        </component>
+
+        <component>
+          <name>DATANODE</name>
+          <category>SLAVE</category>
+          <cardinality>1+</cardinality>
+          <commandScript>
+            <script>scripts/datanode.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>SECONDARY_NAMENODE</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <commandScript>
+            <script>scripts/snamenode.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>HDFS_CLIENT</name>
+          <category>CLIENT</category>
+          <cardinality>0+</cardinality>
+          <commandScript>
+            <script>scripts/hdfs_client.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+      </components>
+      <osSpecifics>
+        <osSpecific>
+          <osType>any</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>lzo</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop-libhdfs</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop-native</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop-pipes</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop-sbin</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop-lzo</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hadoop-lzo-native</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>snappy</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>snappy-devel</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>ambari-log4j</name>
+            </package>
+          </packages>
+        </osSpecific>
+      </osSpecifics>
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>core-site</config-type>
+        <config-type>global</config-type>
+        <config-type>hdfs-site</config-type>
+        <config-type>hadoop-policy</config-type>
+      </configuration-dependencies>
+    </service>
+  </services>
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
new file mode 100644
index 0000000..0a0f8fa
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HIVE/metainfo.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>HIVE</name>
+      <comment>Data warehouse system for ad-hoc queries &amp; analysis of large datasets and table &amp; storage management service</comment>
+      <version>0.11.0.1.3.3.0</version>
+      <components>
+
+        <component>
+          <name>HIVE_METASTORE</name>
+          <category>MASTER</category>
+          <!-- may be 0 if specifying external metastore, how to specify this? -->
+          <cardinality>1</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+            <co-locate>HIVE/HIVE_SERVER</co-locate>
+          </auto-deploy>
+          <commandScript>
+            <script>scripts/hive_metastore.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>HIVE_SERVER</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <dependencies>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_SERVER</name>
+              <scope>cluster</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+                <co-locate>HIVE/HIVE_SERVER</co-locate>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
+          <commandScript>
+            <script>scripts/hive_server.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>MYSQL_SERVER</name>
+          <category>MASTER</category>
+          <!-- may be 0 if specifying external db, how to specify this? -->
+          <cardinality>1</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+            <co-locate>HIVE/HIVE_SERVER</co-locate>
+          </auto-deploy>
+          <commandScript>
+            <script>scripts/mysql_server.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>HIVE_CLIENT</name>
+          <category>CLIENT</category>
+          <cardinality>0+</cardinality>
+          <commandScript>
+            <script>scripts/hive_client.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+        </component>
+      </components>
+
+      <osSpecifics>
+        <osSpecific>
+          <osType>any</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>hive</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>mysql-connector-java</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>mysql</name>
+            </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osType>centos6</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>mysql-server</name>
+            </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osType>centos5</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>mysql-server</name>
+            </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osType>suse</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>mysql-client</name>
+            </package>
+          </packages>
+        </osSpecific>
+      </osSpecifics>
+
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>hive-site</config-type>
+        <config-type>global</config-type>
+      </configuration-dependencies>
+    </service>
+
+    <service>
+      <name>HCATALOG</name>
+      <comment>This is comment for HCATALOG service</comment>
+      <version>0.11.0.1.3.3.0</version>
+      <components>
+        <component>
+          <name>HCAT</name>
+          <category>CLIENT</category>
+          <commandScript>
+            <script>scripts/hcat_client.py</script>
+            <scriptType>PYTHON</scriptType>
+          </commandScript>
+        </component>
+      </components>
+      <osSpecifics>
+        <osSpecific>
+          <osType>any</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>hcatalog</name>
+            </package>
+          </packages>
+        </osSpecific>
+      </osSpecifics>
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>global</config-type>
+      </configuration-dependencies>
+
+    </service>
+
+  </services>
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
new file mode 100644
index 0000000..0a6b59e
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/HUE/metainfo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+    <user>root</user>
+    <comment>Hue is a graphical user interface to operate and develop
+      applications for Apache Hadoop.</comment>
+    <version>2.2.0.1.3.3.0</version>
+
+    <components>
+        <component>
+            <name>HUE_SERVER</name>
+            <category>MASTER</category>
+            <cardinality>1</cardinality>
+        </component>
+    </components>
+
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
new file mode 100644
index 0000000..cb0fa87
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/MAPREDUCE/metainfo.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>MAPREDUCE</name>
+      <comment>Apache Hadoop NextGen MapReduce (YARN)</comment>
+      <version>1.2.0.1.3.3.0</version>
+      <components>
+        <component>
+          <name>JOBTRACKER</name>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <commandScript>
+            <script>scripts/jobtracker.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+          <customCommands>
+            <customCommand>
+              <name>DECOMMISSION</name>
+              <commandScript>
+                <script>scripts/jobtracker.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>600</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
+        </component>
+
+        <component>
+          <name>TASKTRACKER</name>
+          <category>SLAVE</category>
+          <cardinality>1+</cardinality>
+          <commandScript>
+            <script>scripts/tasktracker.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>MAPREDUCE_CLIENT</name>
+          <category>CLIENT</category>
+          <cardinality>0+</cardinality> 
+          <commandScript>
+            <script>scripts/client.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+              
+        <component>
+	  <name>HISTORYSERVER</name>
+	  <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+            <co-locate>MAPREDUCE/JOBTRACKER</co-locate>
+          </auto-deploy>
+	  <commandScript>
+            <script>scripts/historyserver.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+      </components>
+
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>capacity-scheduler</config-type>
+        <config-type>core-site</config-type>
+        <config-type>global</config-type>
+        <config-type>mapred-site</config-type>
+        <config-type>mapred-queue-acls</config-type>
+      </configuration-dependencies>
+    </service>
+
+  </services>
+</metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e29777a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
new file mode 100644
index 0000000..a4c500d
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/1.3.4/services/NAGIOS/metainfo.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+<!--
+   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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>NAGIOS</name>
+      <comment>Nagios Monitoring and Alerting system</comment>
+      <version>3.5.0</version>
+      <components>
+        <component>
+            <name>NAGIOS_SERVER</name>
+            <category>MASTER</category>
+            <cardinality>1</cardinality>
+            <commandScript>
+              <script>scripts/nagios_server.py</script>
+              <scriptType>PYTHON</scriptType>
+              <timeout>600</timeout>
+            </commandScript>
+        </component>
+      </components>
+      <osSpecifics>
+        <osSpecific>
+          <osType>any</osType>
+          <packages>
+            <package>
+              <type>rpm</type>
+              <name>perl</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>perl-Net-SNMP</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>nagios-plugins-1.4.9</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>nagios-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>nagios-www-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>nagios-devel-3.5.0-99</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>fping</name>
+            </package>
+            <package>
+              <type>rpm</type>
+              <name>hdp_mon_nagios_addons</name>
+            </package>
+          </packages>
+        </osSpecific>
+        <osSpecific>
+          <osType>suse</osType>
+          <package>
+            <type>rpm</type>
+            <name>php5-json</name>
+          </package>
+        </osSpecific>
+        <osSpecific>
+          <osType>centos5</osType>
+          <package>
+            <type>rpm</type>
+            <name>php-pecl-json.x86_64</name>
+          </package>
+        </osSpecific>
+        <osSpecific>
+          <osType>redhat5</osType>
+          <package>
+            <type>rpm</type>
+            <name>php-pecl-json.x86_64</name>
+          </package>
+        </osSpecific>
+        <osSpecific>
+          <osType>oraclelinux5</osType>
+          <package>
+            <type>rpm</type>
+            <name>php-pecl-json.x86_64</name>
+          </package>
+        </osSpecific>
+      </osSpecifics>
+    </service>
+  </services>
+</metainfo>