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

git commit: AMBARI-4301. Add Storm for Monitoring/Management via new stack definition. (Arsen Babych via aonishuk)

Updated Branches:
  refs/heads/trunk af56baa0b -> a3b53446e


AMBARI-4301. Add Storm for Monitoring/Management via new stack definition. (Arsen Babych via aonishuk)


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

Branch: refs/heads/trunk
Commit: a3b53446ef6fab413e62a962fe086b1eeb2cbd22
Parents: af56baa
Author: aBabiichuk <ab...@cybervisiontech.com>
Authored: Wed Jan 15 17:08:06 2014 +0200
Committer: aBabiichuk <ab...@cybervisiontech.com>
Committed: Wed Jan 15 17:38:31 2014 +0200

----------------------------------------------------------------------
 .../hooks/before-INSTALL/scripts/params.py      |   3 +
 .../scripts/shared_initialization.py            |   6 ++
 .../stacks/HDP/2.0.8/role_command_order.json    |   7 +++
 .../services/STORM/configuration/global.xml     |  39 ++++++++++++
 .../services/STORM/configuration/storm-site.xml |   4 +-
 .../HDP/2.0.8/services/STORM/metainfo.xml       |  37 +++++++++--
 .../services/STORM/package/files/wordCount.jar  | Bin 0 -> 690588 bytes
 .../STORM/package/scripts/drpc_server.py        |  62 +++++++++++++++++++
 .../STORM/package/scripts/logviewer_server.py   |  62 +++++++++++++++++++
 .../services/STORM/package/scripts/nimbus.py    |  38 +++++-------
 .../services/STORM/package/scripts/params.py    |   9 +++
 .../services/STORM/package/scripts/service.py   |  62 +++++++++++++++++++
 .../STORM/package/scripts/service_check.py      |  14 ++++-
 .../STORM/package/scripts/status_params.py      |  16 +++++
 .../services/STORM/package/scripts/storm.py     |  39 ++++++++++++
 .../STORM/package/scripts/supervisor.py         |  49 +++++----------
 .../services/STORM/package/scripts/ui_server.py |  62 +++++++++++++++++++
 17 files changed, 448 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/params.py
index fa19ca3..dc6d770 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/params.py
@@ -37,6 +37,7 @@ hdfs_user = config['configurations']['global']['hdfs_user']
 zk_user = config['configurations']['global']['zk_user']
 gmetad_user = config['configurations']['global']["gmetad_user"]
 gmond_user = config['configurations']['global']["gmond_user"]
+storm_user = config['configurations']['global']['storm_user']
 
 user_group = config['configurations']['global']['user_group']
 proxyuser_group =  config['configurations']['global']['proxyuser_group']
@@ -58,6 +59,7 @@ jtnode_host = default("/clusterHostInfo/jtnode_host", [])
 namenode_host = default("/clusterHostInfo/namenode_host", [])
 zk_hosts = default("/clusterHostInfo/zookeeper_hosts", [])
 ganglia_server_hosts = default("/clusterHostInfo/ganglia_server_host", [])
+storm_server_hosts = default("/clusterHostInfo/nimbus_hosts", [])
 
 has_resourcemanager = not len(rm_host) == 0
 has_slaves = not len(slave_hosts) == 0
@@ -68,6 +70,7 @@ has_hive_server_host = not len(hive_server_host)  == 0
 has_hbase_masters = not len(hbase_master_hosts) == 0
 has_zk_host = not len(zk_hosts) == 0
 has_ganglia_server = not len(ganglia_server_hosts) == 0
+has_storm_server = not len(storm_server_hosts) == 0
 
 is_namenode_master = hostname in namenode_host
 is_jtnode_master = hostname in jtnode_host

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/shared_initialization.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/shared_initialization.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/shared_initialization.py
index 26a7592..cf6c2c5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/shared_initialization.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/hooks/before-INSTALL/scripts/shared_initialization.py
@@ -91,6 +91,12 @@ def setup_users():
     User(params.zk_user,
          gid=params.user_group)
 
+  if params.has_storm_server:
+    User(params.storm_user,
+         gid=params.user_group,
+         groups=[params.user_group]
+    )
+
 def set_uid(user, user_dirs):
   """
   user_dirs - comma separated directories

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/role_command_order.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/role_command_order.json b/ambari-server/src/main/resources/stacks/HDP/2.0.8/role_command_order.json
index 84610ca..416945d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/role_command_order.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/role_command_order.json
@@ -5,6 +5,11 @@
     "_comment" : "dependencies for all cases",
     "NAGIOS_SERVER-INSTALL" : ["HIVE_CLIENT-INSTALL", "HCAT-INSTALL",
         "MAPREDUCE_CLIENT-INSTALL", "OOZIE_CLIENT-INSTALL"],
+    "NIMBUS-START" : ["ZOOKEEPER_SERVER-START"],
+    "SUPERVISOR-START" : ["NIMBUS-START"],
+    "STORM_UI_SERVER-START" : ["NIMBUS-START"],
+    "DRPC_SERVER-START" : ["NIMBUS-START"],
+    "LOGVIEWER_SERVER-START" : ["NIMBUS-START"],
     "HBASE_MASTER-START": ["ZOOKEEPER_SERVER-START"],
     "HBASE_REGIONSERVER-START": ["HBASE_MASTER-START"],
     "OOZIE_SERVER-START": ["JOBTRACKER-START", "TASKTRACKER-START"],
@@ -29,8 +34,10 @@
     "SQOOP_SERVICE_CHECK-SERVICE_CHECK": ["JOBTRACKER-START", "TASKTRACKER-START"],
     "ZOOKEEPER_SERVICE_CHECK-SERVICE_CHECK": ["ZOOKEEPER_SERVER-START"],
     "ZOOKEEPER_QUORUM_SERVICE_CHECK-SERVICE_CHECK": ["ZOOKEEPER_SERVER-START"],
+    "STORM_SERVICE_CHECK-SERVICE_CHECK": ["NIMBUS-START", "SUPERVISOR-START"],
     "ZOOKEEPER_SERVER-STOP" : ["HBASE_MASTER-STOP", "HBASE_REGIONSERVER-STOP"],
     "HBASE_MASTER-STOP": ["HBASE_REGIONSERVER-STOP"],
+    "NIMBUS-STOP" : ["SUPERVISOR-STOP", "STORM_UI_SERVER-STOP", "DRPC_SERVER-STOP", "LOGVIEWER_SERVER-STOP"],
     "TASKTRACKER-UPGRADE": ["JOBTRACKER-UPGRADE"],
     "MAPREDUCE_CLIENT-UPGRADE": ["TASKTRACKER-UPGRADE", "JOBTRACKER-UPGRADE"],
     "ZOOKEEPER_SERVER-UPGRADE": ["MAPREDUCE_CLIENT-UPGRADE"],

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/global.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/global.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/global.xml
new file mode 100644
index 0000000..5cc9170
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/global.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<configuration>
+  <property>
+    <name>storm_user</name>
+    <value>storm</value>
+    <description></description>
+  </property>
+  <property>
+    <name>storm_log_dir</name>
+    <value>/var/log/storm</value>
+    <description></description>
+  </property>
+  <property>
+    <name>storm_pid_dir</name>
+    <value>/var/run/storm</value>
+    <description></description>
+  </property>
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/storm-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/storm-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/storm-site.xml
index 975b3a6..f81b3c3 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/storm-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/configuration/storm-site.xml
@@ -163,7 +163,7 @@
   </property>
   <property>
     <name>ui.port</name>
-    <value>8080</value>
+    <value>8744</value>
     <description></description>
   </property>
   <property>
@@ -238,7 +238,7 @@
   </property>
   <property>
     <name>supervisor.slots.ports</name>
-    <value>[6700, 6701, 6702, 6703]</value>
+    <value>[6700, 6701]</value>
     <description></description>
   </property>
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/metainfo.xml
index 01a2d90..95dd954 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/metainfo.xml
@@ -44,7 +44,39 @@
             <timeout>600</timeout>
           </commandScript>
         </component>
+
+        <component>
+          <name>STORM_UI_SERVER</name>
+          <category>MASTER</category>
+          <commandScript>
+            <script>scripts/ui_server.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>DRPC_SERVER</name>
+          <category>MASTER</category>
+          <commandScript>
+            <script>scripts/drpc_server.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+
+        <component>
+          <name>LOGVIEWER_SERVER</name>
+          <category>MASTER</category>
+          <commandScript>
+            <script>scripts/logviewer_server.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
       </components>
+
+
       <!--
       <osSpecifics>
         <osSpecific>
@@ -54,10 +86,6 @@
               <type>rpm</type>
               <name>storm</name>
             </package>
-            <package>
-              <type>rpm</type>
-              <name>supervisor</name>
-            </package>
         </osSpecific>
       </osSpecifics> -->
 
@@ -69,6 +97,7 @@
 
       <configuration-dependencies>
         <config-type>storm-site</config-type>
+        <config-type>global</config-type>
       </configuration-dependencies>
     </service>
   </services>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/files/wordCount.jar
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/files/wordCount.jar b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/files/wordCount.jar
new file mode 100644
index 0000000..aed64be
Binary files /dev/null and b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/files/wordCount.jar differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/drpc_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/drpc_server.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/drpc_server.py
new file mode 100644
index 0000000..325f86a
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/drpc_server.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+"""
+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.
+
+"""
+
+import sys
+from resource_management import *
+from storm import storm
+from service import service
+from service_check import ServiceCheck
+
+
+class DrpcServer(Script):
+  def install(self, env):
+    self.install_packages(env)
+    # TODO remove
+    Execute("yum install http://s3.amazonaws.com/dev.hortonworks.com/storm/storm-0.9.1.2.0.6.1-1.el6.noarch.rpm -y",
+            ignore_failures = True)
+
+    self.configure(env)
+
+  def configure(self, env):
+    import params
+    env.set_params(params)
+
+    storm()
+
+  def start(self, env):
+    import params
+    env.set_params(params)
+    self.configure(env)
+
+    service("drpc", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    service("drpc", action="stop")
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+    check_process_status(status_params.pid_drpc)
+
+if __name__ == "__main__":
+  DrpcServer().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/logviewer_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/logviewer_server.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/logviewer_server.py
new file mode 100644
index 0000000..c209036
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/logviewer_server.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+"""
+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.
+
+"""
+
+import sys
+from resource_management import *
+from storm import storm
+from service import service
+from service_check import ServiceCheck
+
+
+class LogviewerServer(Script):
+  def install(self, env):
+    self.install_packages(env)
+    # TODO remove
+    Execute("yum install http://s3.amazonaws.com/dev.hortonworks.com/storm/storm-0.9.1.2.0.6.1-1.el6.noarch.rpm -y",
+            ignore_failures = True)
+
+    self.configure(env)
+
+  def configure(self, env):
+    import params
+    env.set_params(params)
+
+    storm()
+
+  def start(self, env):
+    import params
+    env.set_params(params)
+    self.configure(env)
+
+    service("logviewer", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    service("logviewer", action="stop")
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+    check_process_status(status_params.pid_logviewer)
+
+if __name__ == "__main__":
+  LogviewerServer().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/nimbus.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/nimbus.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/nimbus.py
index 6ed1e39..7210314 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/nimbus.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/nimbus.py
@@ -20,49 +20,43 @@ limitations under the License.
 
 import sys
 from resource_management import *
+from storm import storm
+from service import service
+from service_check import ServiceCheck
+
 
-         
 class Nimbus(Script):
   def install(self, env):
     self.install_packages(env)
+    # TODO remove
+    Execute("yum install http://s3.amazonaws.com/dev.hortonworks.com/storm/storm-0.9.1.2.0.6.1-1.el6.noarch.rpm -y",
+            ignore_failures = True)
+
     self.configure(env)
-    
+
   def configure(self, env):
     import params
     env.set_params(params)
-    
-    print "Configure."
-    
+
+    storm()
+
   def start(self, env):
     import params
     env.set_params(params)
     self.configure(env)
 
-    print "Start."
-    
+    service("nimbus", action="start")
+
   def stop(self, env):
     import params
     env.set_params(params)
 
-    print "Stop."
+    service("nimbus", action="stop")
 
   def status(self, env):
     import status_params
     env.set_params(status_params)
-    
-    #pid_file = format("{pid_dir}/?.pid")
-    #check_process_status(pid_file)
+    check_process_status(status_params.pid_nimbus)
 
-# for testing
-def main():
-  command_type = "install"
-  command_data_file = '/root/storm.json'
-  basedir = '/root/ambari/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package'
-  stroutputf = '/1.txt'
-  sys.argv = ["", command_type, command_data_file, basedir, stroutputf]
-  
-  Nimbus().execute()
-  
 if __name__ == "__main__":
   Nimbus().execute()
-  #main()

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/params.py
index b722187..57ff774 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/params.py
@@ -23,3 +23,12 @@ import status_params
 
 # server configurations
 config = Script.get_config()
+
+storm_user = config['configurations']['global']['storm_user']
+log_dir = config['configurations']['global']['storm_log_dir']
+pid_dir = status_params.pid_dir
+conf_dir = "/etc/storm/conf"
+local_dir = config['configurations']['storm-site']['storm.local.dir']
+user_group = config['configurations']['global']['user_group']
+java64_home = config['hostLevelParams']['java_home']
+nimbus_host = config['configurations']['storm-site']['nimbus.host']

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service.py
new file mode 100644
index 0000000..721acf1
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+"""
+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.
+
+"""
+
+
+from resource_management import *
+from resource_management.core.shell import call
+import subprocess
+
+
+def service(
+    name,
+    action='start'):
+  import params
+  import status_params
+
+  pid_file = status_params.pid_files[name]
+
+  if action == "start":
+    cmd = ["/usr/bin/storm", name]
+    if name == "ui":
+      crt_pid_cmd = format("pgrep -f \"^java.+backtype.storm.ui.core$\" > {pid_file}")
+    else :
+      crt_pid_cmd = format("pgrep -f \"^java.+backtype.storm.daemon.{name}$\" > {pid_file}")
+
+    no_op_test = format("ls {pid_file} >/dev/null 2>&1 && ps `cat {pid_file}` >/dev/null 2>&1")
+
+    #Execute(cmd,
+    #        not_if=no_op_test,
+    #        user=params.storm_user
+    #)
+
+    #TODO run from storm user
+
+    if call(no_op_test)[0]:
+      subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env={"PATH":format("{java64_home}/bin:/bin")})
+
+    Execute(crt_pid_cmd,
+            logoutput=True,
+            tries=6,
+            try_sleep=10
+    )
+
+  elif action == "stop":
+    cmd = format("kill `cat {pid_file}` >/dev/null 2>&1 && rm -f {pid_file}")
+    Execute(cmd)

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service_check.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service_check.py
index 582ea55..1cfbc48 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service_check.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/service_check.py
@@ -25,7 +25,19 @@ class ServiceCheck(Script):
     import params
     env.set_params(params)
 
-    print "Service check."
+    unique = get_unique_id_and_date()
+
+    File("/tmp/wordCount.jar",
+         content=StaticFile("wordCount.jar")
+    )
+
+    cmd = format("env PATH=$PATH:{java64_home}/bin storm jar /tmp/wordCount.jar storm.starter.WordCountTopology WordCount{unique} -c nimbus.host={nimbus_host}")
+
+    Execute(cmd,
+            logoutput=True
+    )
+
+    Execute(format("env PATH=$PATH:{java64_home}/bin storm kill WordCount{unique}"))
 
 if __name__ == "__main__":
   ServiceCheck().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/status_params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/status_params.py
index 5561e10..70b034a 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/status_params.py
@@ -17,3 +17,19 @@ See the License for the specific language governing permissions and
 limitations under the License.
 
 """
+from resource_management import *
+
+config = Script.get_config()
+
+pid_dir = config['configurations']['global']['storm_pid_dir']
+pid_nimbus = format("{pid_dir}/nimbus.pid")
+pid_supervisor = format("{pid_dir}/supervisor.pid")
+pid_drpc = format("{pid_dir}/drpc.pid")
+pid_ui = format("{pid_dir}/ui.pid")
+pid_logviewer = format("{pid_dir}/logviewer.pid")
+
+pid_files = {"logviewer":pid_logviewer,
+             "ui": pid_ui,
+             "nimbus": pid_nimbus,
+             "supervisor": pid_supervisor,
+             "drpc": pid_drpc}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/storm.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/storm.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/storm.py
new file mode 100644
index 0000000..d38909c
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/storm.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+"""
+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.
+
+"""
+
+from resource_management import *
+from yaml_config import yaml_config
+import sys
+
+def storm():
+  import params
+
+  Directory([params.log_dir, params.pid_dir, params.local_dir],
+            owner=params.storm_user,
+            group=params.user_group,
+            recursive=True
+  )
+
+  yaml_config( "storm.yaml",
+               conf_dir = params.conf_dir,
+               configurations = params.config['configurations']['storm-site'],
+               owner = params.storm_user,
+               group = params.user_group
+  )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/supervisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/supervisor.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/supervisor.py
index b4ce483..eafb48f 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/supervisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/supervisor.py
@@ -21,58 +21,43 @@ limitations under the License.
 import sys
 from resource_management import *
 from yaml_config import yaml_config
+from storm import storm
+from service import service
+
 
-         
 class Supervisor(Script):
   def install(self, env):
     self.install_packages(env)
+    # TODO remove
+    Execute("yum install http://s3.amazonaws.com/dev.hortonworks.com/storm/storm-0.9.1.2.0.6.1-1.el6.noarch.rpm -y",
+            ignore_failures = True)
     self.configure(env)
-    
+
   def configure(self, env):
     import params
     env.set_params(params)
-    
-    # example
-    #yaml_config( "storm.yaml",
-    #        #conf_dir = params.conf_dir,
-    #        conf_dir = "/etc/storm/conf",
-    #        configurations = params.config['configurations']['storm-site'],
-    #        #owner = params.storm_user,
-    #        #group = params.user_group
-    #)
-    
-    print "Configure."
-    
+    storm()
+
   def start(self, env):
     import params
     env.set_params(params)
     self.configure(env)
 
-    print "Start."
-    
+    service("supervisor", action="start")
+
   def stop(self, env):
     import params
     env.set_params(params)
 
-    print "Stop."
+    service("supervisor", action="stop")
 
   def status(self, env):
     import status_params
     env.set_params(status_params)
-    
-    #pid_file = format("{pid_dir}/?.pid")
-    #check_process_status(pid_file)
-
-# for testing
-def main():
-  command_type = "install"
-  command_data_file = '/root/storm.json'
-  basedir = '/root/ambari/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package'
-  stroutputf = '/1.txt'
-  sys.argv = ["", command_type, command_data_file, basedir, stroutputf]
-  
-  Supervisor().execute()
-  
+
+    check_process_status(status_params.pid_supervisor)
+
+
 if __name__ == "__main__":
   Supervisor().execute()
-  #main()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/a3b53446/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/ui_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/ui_server.py b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/ui_server.py
new file mode 100644
index 0000000..58deec6
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.8/services/STORM/package/scripts/ui_server.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+"""
+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.
+
+"""
+
+import sys
+from resource_management import *
+from storm import storm
+from service import service
+from service_check import ServiceCheck
+
+
+class UiServer(Script):
+  def install(self, env):
+    self.install_packages(env)
+    # TODO remove
+    Execute("yum install http://s3.amazonaws.com/dev.hortonworks.com/storm/storm-0.9.1.2.0.6.1-1.el6.noarch.rpm -y",
+            ignore_failures = True)
+
+    self.configure(env)
+
+  def configure(self, env):
+    import params
+    env.set_params(params)
+
+    storm()
+
+  def start(self, env):
+    import params
+    env.set_params(params)
+    self.configure(env)
+
+    service("ui", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    service("ui", action="stop")
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+    check_process_status(status_params.pid_ui)
+
+if __name__ == "__main__":
+  UiServer().execute()