http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/metrics.json
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/metrics.json 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/metrics.json
new file mode 100644
index 0000000..c2776ab
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/metrics.json
@@ -0,0 +1,1077 @@
+{
+  "STORM_REST_API": {
+    "Component": [
+      {
+        "type": 
"org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider",
+        "properties" : {
+          "default_port": "8745",
+          "port_config_type": "storm-site",
+          "port_property_name": "storm.port",
+          "protocol": "http"
+        },
+        "metrics": {
+          "metrics/api/cluster/summary/tasks.total":
+          {
+            "metric": "/api/cluster/summary##tasks.total",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/slots.total": {
+            "metric": "/api/cluster/summary##slots.total",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/slots.free": {
+            "metric": "/api/cluster/summary##slots.free",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/supervisors": {
+            "metric": "/api/cluster/summary##supervisors",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/executors.total": {
+            "metric": "/api/cluster/summary##executors.total",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/slots.used": {
+            "metric": "/api/cluster/summary##slots.used",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/topologies": {
+            "metric": "/api/cluster/summary##topologies",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/nimbus.uptime": {
+            "metric": "/api/cluster/summary##nimbus.uptime",
+            "pointInTime": true,
+            "temporal": false
+          }
+        }
+      }
+    ],
+    "HostComponent": [
+      {
+        "type": 
"org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider",
+        "properties" : {
+          "default_port": "8745",
+          "port_config_type": "storm-site",
+          "port_property_name": "storm.port",
+          "protocol": "http"
+        },
+        "metrics": {
+          "metrics/api/cluster/summary/tasks.total":
+          {
+            "metric": "/api/cluster/summary##tasks.total",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/slots.total": {
+            "metric": "/api/cluster/summary##slots.total",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/slots.free": {
+            "metric": "/api/cluster/summary##slots.free",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/supervisors": {
+            "metric": "/api/cluster/summary##supervisors",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/executors.total": {
+            "metric": "/api/cluster/summary##executors.total",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/slots.used": {
+            "metric": "/api/cluster/summary##slots.used",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/topologies": {
+            "metric": "/api/cluster/summary##topologies",
+            "pointInTime": true,
+            "temporal": false
+          },
+          "metrics/api/cluster/summary/nimbus.uptime": {
+            "metric": "/api/cluster/summary##nimbus.uptime",
+            "pointInTime": true,
+            "temporal": false
+          }
+        }
+      }
+    ]
+  },
+  "NIMBUS": {
+    "Component": [
+      {
+        "type": "ganglia",
+        "metrics": {
+          "metrics/boottime": {
+            "metric": "boottime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_in": {
+            "metric": "bytes_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_out": {
+            "metric": "bytes_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_aidle": {
+            "metric": "cpu_aidle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_idle": {
+            "metric": "cpu_idle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_nice": {
+            "metric": "cpu_nice",
+            "pointInTime": true,
+            "temporal": true
+          },
+
+          "metrics/cpu/cpu_num": {
+            "metric": "cpu_num",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_speed": {
+            "metric": "cpu_speed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_system": {
+            "metric": "cpu_system",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_user": {
+            "metric": "cpu_user",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_wio": {
+            "metric": "cpu_wio",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_free": {
+            "metric": "disk_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_total": {
+            "metric": "disk_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_fifteen": {
+            "metric": "load_fifteen",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_five": {
+            "metric": "load_five",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_one": {
+            "metric": "load_one",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_buffers": {
+            "metric": "mem_buffers",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_cached": {
+            "metric": "mem_cached",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_free": {
+            "metric": "mem_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_shared": {
+            "metric": "mem_shared",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_total": {
+            "metric": "mem_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/part_max_used": {
+            "metric": "part_max_used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_in": {
+            "metric": "pkts_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_out": {
+            "metric": "pkts_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_run": {
+            "metric": "proc_run",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_total": {
+            "metric": "proc_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_free": {
+            "metric": "swap_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_total": {
+            "metric": "swap_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/committed": {
+            "metric": "Nimbus.JVM.Memory.Heap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/init": {
+            "metric": "Nimbus.JVM.Memory.Heap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/max": {
+            "metric": "Nimbus.JVM.Memory.Heap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/used": {
+            "metric": "Nimbus.JVM.Memory.Heap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/committed": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/init": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/max": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/used": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/os/processcputime": {
+            "metric": "Nimbus.JVM.OS.ProcessCpuTime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/threading/daemonthreadcount": {
+            "metric": "Nimbus.JVM.Threading.DaemonThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/threading/threadcount": {
+            "metric": "Nimbus.JVM.Threading.ThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+
+          "metrics/storm/nimbus/freeslots": {
+            "metric": "Free Slots",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/supervisors": {
+            "metric": "Supervisors",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/topologies": {
+            "metric": "Topologies",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/totalexecutors": {
+            "metric": "Total Executors",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/totalslots": {
+            "metric": "Total Slots",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/totaltasks": {
+            "metric": "Total Tasks",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/usedslots": {
+            "metric": "Used Slots",
+            "pointInTime": true,
+            "temporal": true
+          }
+        }
+      }
+    ],
+    "HostComponent": [
+      {
+        "type": "ganglia",
+        "metrics": {
+          "metrics/boottime": {
+            "metric": "boottime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_in": {
+            "metric": "bytes_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_out": {
+            "metric": "bytes_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_aidle": {
+            "metric": "cpu_aidle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_idle": {
+            "metric": "cpu_idle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_nice": {
+            "metric": "cpu_nice",
+            "pointInTime": true,
+            "temporal": true
+          },
+
+          "metrics/cpu/cpu_num": {
+            "metric": "cpu_num",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_speed": {
+            "metric": "cpu_speed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_system": {
+            "metric": "cpu_system",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_user": {
+            "metric": "cpu_user",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_wio": {
+            "metric": "cpu_wio",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_free": {
+            "metric": "disk_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_total": {
+            "metric": "disk_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_fifteen": {
+            "metric": "load_fifteen",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_five": {
+            "metric": "load_five",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_one": {
+            "metric": "load_one",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_buffers": {
+            "metric": "mem_buffers",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_cached": {
+            "metric": "mem_cached",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_free": {
+            "metric": "mem_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_shared": {
+            "metric": "mem_shared",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_total": {
+            "metric": "mem_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/part_max_used": {
+            "metric": "part_max_used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_in": {
+            "metric": "pkts_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_out": {
+            "metric": "pkts_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_run": {
+            "metric": "proc_run",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_total": {
+            "metric": "proc_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_free": {
+            "metric": "swap_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_total": {
+            "metric": "swap_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/committed": {
+            "metric": "Nimbus.JVM.Memory.Heap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/init": {
+            "metric": "Nimbus.JVM.Memory.Heap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/max": {
+            "metric": "Nimbus.JVM.Memory.Heap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/heap/used": {
+            "metric": "Nimbus.JVM.Memory.Heap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/committed": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/init": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/max": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/memory/nonheap/used": {
+            "metric": "Nimbus.JVM.Memory.NonHeap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/os/processcputime": {
+            "metric": "Nimbus.JVM.OS.ProcessCpuTime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/threading/daemonthreadcount": {
+            "metric": "Nimbus.JVM.Threading.DaemonThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/nimbus/jvm/threading/threadcount": {
+            "metric": "Nimbus.JVM.Threading.ThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          }
+
+        }
+      }
+    ]
+  },
+  "SUPERVISOR": {
+    "Component": [
+      {
+        "type": "ganglia",
+        "metrics": {
+          "metrics/boottime": {
+            "metric": "boottime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_in": {
+            "metric": "bytes_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_out": {
+            "metric": "bytes_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_aidle": {
+            "metric": "cpu_aidle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_idle": {
+            "metric": "cpu_idle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_nice": {
+            "metric": "cpu_nice",
+            "pointInTime": true,
+            "temporal": true
+          },
+
+          "metrics/cpu/cpu_num": {
+            "metric": "cpu_num",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_speed": {
+            "metric": "cpu_speed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_system": {
+            "metric": "cpu_system",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_user": {
+            "metric": "cpu_user",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_wio": {
+            "metric": "cpu_wio",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_free": {
+            "metric": "disk_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_total": {
+            "metric": "disk_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_fifteen": {
+            "metric": "load_fifteen",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_five": {
+            "metric": "load_five",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_one": {
+            "metric": "load_one",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_buffers": {
+            "metric": "mem_buffers",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_cached": {
+            "metric": "mem_cached",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_free": {
+            "metric": "mem_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_shared": {
+            "metric": "mem_shared",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_total": {
+            "metric": "mem_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/part_max_used": {
+            "metric": "part_max_used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_in": {
+            "metric": "pkts_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_out": {
+            "metric": "pkts_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_run": {
+            "metric": "proc_run",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_total": {
+            "metric": "proc_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_free": {
+            "metric": "swap_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_total": {
+            "metric": "swap_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/committed": {
+            "metric": "Supervisor.JVM.Memory.Heap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/init": {
+            "metric": "Supervisor.JVM.Memory.Heap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/max": {
+            "metric": "Supervisor.JVM.Memory.Heap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/used": {
+            "metric": "Supervisor.JVM.Memory.Heap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/committed": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/init": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/max": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/used": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/os/processcputime": {
+            "metric": "Supervisor.JVM.OS.ProcessCpuTime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/threading/daemonthreadcount": {
+            "metric": "Supervisor.JVM.Threading.DaemonThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/threading/threadcount": {
+            "metric": "Supervisor.JVM.Threading.ThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/committed": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/init": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/max": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/used": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/committed": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/init": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/max": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/used": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/os/processcputime": {
+            "metric": "Worker.(.+).JVM.OS.ProcessCpuTime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/threading/daemonthreadcount": {
+            "metric": "Worker.(.+).JVM.Threading.DaemonThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/threading/threadcount": {
+            "metric": "Worker.(.+).JVM.Threading.ThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          }
+
+
+        }
+      }
+    ],
+    "HostComponent": [
+      {
+        "type": "ganglia",
+        "metrics": {
+          "metrics/boottime": {
+            "metric": "boottime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_in": {
+            "metric": "bytes_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/bytes_out": {
+            "metric": "bytes_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_aidle": {
+            "metric": "cpu_aidle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_idle": {
+            "metric": "cpu_idle",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_nice": {
+            "metric": "cpu_nice",
+            "pointInTime": true,
+            "temporal": true
+          },
+
+          "metrics/cpu/cpu_num": {
+            "metric": "cpu_num",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_speed": {
+            "metric": "cpu_speed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_system": {
+            "metric": "cpu_system",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_user": {
+            "metric": "cpu_user",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/cpu/cpu_wio": {
+            "metric": "cpu_wio",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_free": {
+            "metric": "disk_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/disk_total": {
+            "metric": "disk_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_fifteen": {
+            "metric": "load_fifteen",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_five": {
+            "metric": "load_five",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/load_one": {
+            "metric": "load_one",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_buffers": {
+            "metric": "mem_buffers",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_cached": {
+            "metric": "mem_cached",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_free": {
+            "metric": "mem_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_shared": {
+            "metric": "mem_shared",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/mem_total": {
+            "metric": "mem_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/disk/part_max_used": {
+            "metric": "part_max_used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_in": {
+            "metric": "pkts_in",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/network/pkts_out": {
+            "metric": "pkts_out",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_run": {
+            "metric": "proc_run",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/process/proc_total": {
+            "metric": "proc_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_free": {
+            "metric": "swap_free",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/memory/swap_total": {
+            "metric": "swap_total",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/committed": {
+            "metric": "Supervisor.JVM.Memory.Heap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/init": {
+            "metric": "Supervisor.JVM.Memory.Heap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/max": {
+            "metric": "Supervisor.JVM.Memory.Heap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/heap/used": {
+            "metric": "Supervisor.JVM.Memory.Heap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/committed": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/init": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/max": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/memory/nonheap/used": {
+            "metric": "Supervisor.JVM.Memory.NonHeap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/os/processcputime": {
+            "metric": "Supervisor.JVM.OS.ProcessCpuTime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/threading/daemonthreadcount": {
+            "metric": "Supervisor.JVM.Threading.DaemonThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/supervisor/jvm/threading/threadcount": {
+            "metric": "Supervisor.JVM.Threading.ThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/committed": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/init": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/max": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/heap/used": {
+            "metric": "Worker.(.+).JVM.Memory.Heap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/committed": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.committed",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/init": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.init",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/max": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.max",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/memory/nonheap/used": {
+            "metric": "Worker.(.+).JVM.Memory.NonHeap.used",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/os/processcputime": {
+            "metric": "Worker.(.+).JVM.OS.ProcessCpuTime",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/threading/daemonthreadcount": {
+            "metric": "Worker.(.+).JVM.Threading.DaemonThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          },
+          "metrics/storm/worker/$1/jvm/threading/threadcount": {
+            "metric": "Worker.(.+).JVM.Threading.ThreadCount",
+            "pointInTime": true,
+            "temporal": true
+          }
+        }
+      }
+    ]
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/files/wordCount.jar
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/files/wordCount.jar
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/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.1/services/STORM/package/files/wordCount.jar
 differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/drpc_server.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/drpc_server.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/drpc_server.py
new file mode 100644
index 0000000..149b212
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/drpc_server.py
@@ -0,0 +1,58 @@
+#!/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)
+    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/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus.py
new file mode 100644
index 0000000..2dd7963
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus.py
@@ -0,0 +1,57 @@
+#!/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
+
+
+class Nimbus(Script):
+  def install(self, env):
+    self.install_packages(env)
+    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("nimbus", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    service("nimbus", action="stop")
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+    check_process_status(status_params.pid_nimbus)
+
+if __name__ == "__main__":
+  Nimbus().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus_prod.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus_prod.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus_prod.py
new file mode 100644
index 0000000..a1f8afe
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/nimbus_prod.py
@@ -0,0 +1,55 @@
+#!/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 supervisord_service import supervisord_service, supervisord_check_status
+
+
+class Nimbus(Script):
+  def install(self, env):
+    self.install_packages(env)
+    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)
+
+    supervisord_service("nimbus", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    supervisord_service("nimbus", action="stop")
+
+  def status(self, env):
+    supervisord_check_status("nimbus")
+
+if __name__ == "__main__":
+  Nimbus().execute()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/params.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/params.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/params.py
new file mode 100644
index 0000000..ec74d77
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/params.py
@@ -0,0 +1,90 @@
+#!/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.libraries.functions.version import 
format_hdp_stack_version, compare_versions
+from resource_management import *
+import status_params
+
+# server configurations
+config = Script.get_config()
+
+hdp_stack_version = str(config['hostLevelParams']['stack_version'])
+hdp_stack_version = format_hdp_stack_version(hdp_stack_version)
+stack_is_hdp22_or_further = hdp_stack_version != "" and 
compare_versions(hdp_stack_version, '2.2') >= 0
+
+#hadoop params
+if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.2') >= 0:
+  rest_lib_dir = '/usr/hdp/current/storm-client/contrib/storm-rest'
+  storm_bin_dir = "/usr/hdp/current/storm-client/bin"
+else:
+  rest_lib_dir = "/usr/lib/storm/contrib/storm-rest"
+  storm_bin_dir = "/usr/bin"
+
+storm_user = config['configurations']['storm-env']['storm_user']
+log_dir = config['configurations']['storm-env']['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']['cluster-env']['user_group']
+java64_home = config['hostLevelParams']['java_home']
+jps_binary = format("{java64_home}/bin/jps")
+nimbus_port = config['configurations']['storm-site']['nimbus.thrift.port']
+nimbus_host = config['configurations']['storm-site']['nimbus.host']
+rest_api_port = "8745"
+rest_api_admin_port = "8746"
+rest_api_conf_file = format("{conf_dir}/config.yaml")
+storm_env_sh_template = config['configurations']['storm-env']['content']
+
+if 'ganglia_server_host' in config['clusterHostInfo'] and \
+    len(config['clusterHostInfo']['ganglia_server_host'])>0:
+  ganglia_installed = True
+  ganglia_server = config['clusterHostInfo']['ganglia_server_host'][0]
+  ganglia_report_interval = 60
+else:
+  ganglia_installed = False
+
+security_enabled = config['configurations']['cluster-env']['security_enabled']
+
+if security_enabled:
+  _hostname_lowercase = config['hostname'].lower()
+  kerberos_domain = config['configurations']['cluster-env']['kerberos_domain']
+  _storm_principal_name = 
config['configurations']['storm-env']['storm_principal_name']
+  storm_jaas_principal = 
_storm_principal_name.replace('_HOST',_hostname_lowercase)
+  storm_keytab_path = config['configurations']['storm-env']['storm_keytab']
+  
+  if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.2') >= 
0:
+    storm_ui_keytab_path = 
config['configurations']['storm-env']['storm_ui_keytab']
+    _storm_ui_jaas_principal_name = 
config['configurations']['storm-env']['storm_ui_principal_name']
+    storm_ui_host = default("/clusterHostInfo/storm_ui_server_hosts", [])
+    storm_ui_jaas_principal = 
_storm_ui_jaas_principal_name.replace('_HOST',storm_ui_host[0].lower())
+    
+    storm_bare_jaas_principal = 
_storm_principal_name.replace('_HOST','').replace('@'+kerberos_domain,'')
+    
+    
+    
+    _nimbus_principal_name = 
config['configurations']['storm-env']['nimbus_principal_name']
+    nimbus_jaas_principal = 
_nimbus_principal_name.replace('_HOST',nimbus_host.lower())
+    nimbus_bare_jaas_principal = 
_nimbus_principal_name.replace('/_HOST','').replace('@'+kerberos_domain,'')
+    nimbus_keytab_path = config['configurations']['storm-env']['nimbus_keytab']
+
+ams_collector_hosts = default("/clusterHostInfo/metric_collector_hosts", [])
+has_metric_collector = not len(ams_collector_hosts) == 0
+if has_metric_collector:
+  metric_collector_host = ams_collector_hosts[0]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/rest_api.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/rest_api.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/rest_api.py
new file mode 100644
index 0000000..ec7deec
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/rest_api.py
@@ -0,0 +1,58 @@
+#!/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 StormRestApi(Script):
+  def install(self, env):
+    self.install_packages(env)
+    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("rest_api", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    service("rest_api", action="stop")
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+    check_process_status(status_params.pid_rest_api)
+
+if __name__ == "__main__":
+  StormRestApi().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service.py
new file mode 100644
index 0000000..ed6add5
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service.py
@@ -0,0 +1,84 @@
+#!/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 *
+import time
+
+
+def service(
+    name,
+    action='start'):
+  import params
+  import status_params
+
+  pid_file = status_params.pid_files[name]
+  no_op_test = format("ls {pid_file} >/dev/null 2>&1 && ps -p `cat {pid_file}` 
>/dev/null 2>&1")
+
+  if name == "logviewer" or name == "drpc":
+    tries_count = 12
+  else:
+    tries_count = 6
+
+  if name == 'ui':
+    process_grep = "backtype.storm.ui.core$"
+  elif name == "rest_api":
+    process_grep = format("{rest_lib_dir}/storm-rest-.*\.jar$")
+  else:
+    process_grep = format("storm.daemon.{name}$")
+    
+  find_proc = format("{jps_binary} -l  | grep {process_grep}")
+  write_pid = format("{find_proc} | awk {{'print $1'}} > {pid_file}")
+  crt_pid_cmd = format("{find_proc} && {write_pid}")
+
+  if action == "start":
+    if name == "rest_api":
+      process_cmd = format("{java64_home}/bin/java -jar {rest_lib_dir}/`ls 
{rest_lib_dir} | grep -wE storm-rest-[0-9.-]+\.jar` server")
+      cmd = format("{process_cmd} {rest_api_conf_file} > {log_dir}/restapi.log 
2>&1")
+    else:
+      cmd = format("env JAVA_HOME={java64_home} PATH=$PATH:{java64_home}/bin 
storm {name} > {log_dir}/{name}.out 2>&1")
+
+    Execute(cmd,
+           not_if=no_op_test,
+           user=params.storm_user,
+           wait_for_finish=False,
+           path=params.storm_bin_dir
+    )
+    Execute(crt_pid_cmd,
+            user=params.storm_user,
+            logoutput=True,
+            tries=tries_count,
+            try_sleep=10,
+            path=params.storm_bin_dir
+    )
+
+  elif action == "stop":
+    process_dont_exist = format("! ({no_op_test})")
+    pid = format("`cat {pid_file}`")
+    Execute(format("sudo kill {pid}"),
+            not_if=process_dont_exist
+    )
+    Execute(format("sudo kill -9 {pid}"),
+            not_if=format("sleep 2; {process_dont_exist} || sleep 20; 
{process_dont_exist}"),
+            ignore_failures=True
+    )
+    File(pid_file,
+         action = "delete",
+    )

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service_check.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service_check.py
new file mode 100644
index 0000000..2661e6f
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/service_check.py
@@ -0,0 +1,49 @@
+#!/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.libraries.functions import get_unique_id_and_date
+
+class ServiceCheck(Script):
+  def service_check(self, env):
+    import params
+    env.set_params(params)
+
+    unique = get_unique_id_and_date()
+
+    File("/tmp/wordCount.jar",
+         content=StaticFile("wordCount.jar")
+    )
+
+    cmd = format("env JAVA_HOME={java64_home} storm jar /tmp/wordCount.jar 
storm.starter.WordCountTopology WordCount{unique} -c nimbus.host={nimbus_host}")
+
+    Execute(cmd,
+            logoutput=True,
+            path=params.storm_bin_dir,
+            user=params.storm_user
+    )
+
+    Execute(format("env JAVA_HOME={java64_home} storm kill WordCount{unique}"),
+            path=params.storm_bin_dir,
+            user=params.storm_user
+    )
+
+if __name__ == "__main__":
+  ServiceCheck().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/status_params.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/status_params.py
new file mode 100644
index 0000000..5eaa446
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/status_params.py
@@ -0,0 +1,36 @@
+#!/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 *
+
+config = Script.get_config()
+
+pid_dir = config['configurations']['storm-env']['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_rest_api = format("{pid_dir}/restapi.pid")
+pid_files = {"logviewer":pid_logviewer,
+             "ui": pid_ui,
+             "nimbus": pid_nimbus,
+             "supervisor": pid_supervisor,
+             "drpc": pid_drpc,
+             "rest_api": pid_rest_api}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/storm.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/storm.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/storm.py
new file mode 100644
index 0000000..3b71751
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/storm.py
@@ -0,0 +1,98 @@
+#!/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_utils import escape_yaml_propetry
+import sys
+
+def storm():
+  import params
+
+  Directory(params.log_dir,
+            owner=params.storm_user,
+            group=params.user_group,
+            mode=0775,
+            recursive=True
+  )
+
+  Directory([params.pid_dir, params.local_dir, params.conf_dir],
+            owner=params.storm_user,
+            group=params.user_group,
+            recursive=True,
+            recursive_permission=True
+  )
+
+  File(format("{conf_dir}/config.yaml"),
+       content=Template("config.yaml.j2"),
+       owner=params.storm_user,
+       group=params.user_group
+  )
+
+  configurations = params.config['configurations']['storm-site']
+  
+  File(format("{conf_dir}/storm.yaml"),
+       content=Template(
+                        "storm.yaml.j2", 
+                         extra_imports=[escape_yaml_propetry], 
+                        configurations = configurations),
+       owner=params.storm_user,
+       group=params.user_group
+  )
+
+  if params.has_metric_collector:
+    File(format("{conf_dir}/storm-metrics2.properties"),
+        owner=params.storm_user,
+        group=params.user_group,
+        content=Template("storm-metrics2.properties.j2")
+    )
+
+  File(format("{conf_dir}/storm-env.sh"),
+    owner=params.storm_user,
+    content=InlineTemplate(params.storm_env_sh_template)
+  )
+
+  if params.security_enabled:
+    TemplateConfig(format("{conf_dir}/storm_jaas.conf"),
+                   owner=params.storm_user
+    )
+    if params.hdp_stack_version != "" and 
compare_versions(params.hdp_stack_version, '2.2') >= 0:
+      TemplateConfig(format("{conf_dir}/client_jaas.conf"),
+                     owner=params.storm_user
+      )
+      minRuid = configurations['_storm.min.ruid'] if 
configurations.has_key('_storm.min.ruid') else ''
+      
+      min_user_ruid = int(minRuid) if minRuid.isdigit() else 
_find_real_user_min_uid()
+      
+      File(format("{conf_dir}/worker-launcher.cfg"),
+           content=Template("worker-launcher.cfg.j2", min_user_ruid = 
min_user_ruid),
+           owner='root',
+           group=params.user_group
+      )
+    
+
+'''
+Finds minimal real user UID
+'''
+def _find_real_user_min_uid():
+  with open('/etc/login.defs') as f:
+    for line in f:
+      if line.strip().startswith('UID_MIN') and len(line.split()) == 2 and 
line.split()[1].isdigit():
+        return int(line.split()[1])
+  raise Fail("Unable to find UID_MIN in file /etc/login.defs. Expecting format 
e.g.: 'UID_MIN    500'")  

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor.py
new file mode 100644
index 0000000..1ebe187
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor.py
@@ -0,0 +1,61 @@
+#!/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
+
+
+class Supervisor(Script):
+  def install(self, env):
+    self.install_packages(env)
+    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("supervisor", action="start")
+    service("logviewer", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    service("supervisor", action="stop")
+    service("logviewer", action="stop")
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+
+    check_process_status(status_params.pid_supervisor)
+
+
+if __name__ == "__main__":
+  Supervisor().execute()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor_prod.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor_prod.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor_prod.py
new file mode 100644
index 0000000..7aecdc5
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisor_prod.py
@@ -0,0 +1,57 @@
+#!/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 supervisord_service import supervisord_service, supervisord_check_status
+
+
+class Supervisor(Script):
+  def install(self, env):
+    self.install_packages(env)
+    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)
+
+    supervisord_service("supervisor", action="start")
+    service("logviewer", action="start")
+
+  def stop(self, env):
+    import params
+    env.set_params(params)
+
+    supervisord_service("supervisor", action="stop")
+    service("logviewer", action="stop")
+
+  def status(self, env):
+    supervisord_check_status("supervisor")
+
+if __name__ == "__main__":
+  Supervisor().execute()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisord_service.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisord_service.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisord_service.py
new file mode 100644
index 0000000..6a5ea0b
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/supervisord_service.py
@@ -0,0 +1,32 @@
+#!/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 *
+
+def supervisord_service(component_name, action):
+  Execute(format("supervisorctl {action} storm-{component_name}"),
+    wait_for_finish=False
+  )
+
+def supervisord_check_status(component_name):
+  try:
+    Execute(format("supervisorctl status storm-{component_name} | grep 
RUNNING"))
+  except Fail:
+    raise ComponentIsNotRunning() 

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/ui_server.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/ui_server.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/ui_server.py
new file mode 100644
index 0000000..6a9d923
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/ui_server.py
@@ -0,0 +1,58 @@
+#!/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)
+    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()

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/yaml_utils.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/yaml_utils.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/yaml_utils.py
new file mode 100644
index 0000000..8187666
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/scripts/yaml_utils.py
@@ -0,0 +1,49 @@
+#!/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 re
+
+def escape_yaml_propetry(value):
+  unquouted = False
+  unquouted_values = 
["null","Null","NULL","true","True","TRUE","false","False","FALSE","YES","Yes","yes","NO","No","no","ON","On","on","OFF","Off","off"]
+  if value in unquouted_values:
+    unquouted = True
+
+  # if is list [a,b,c]
+  if re.match('^\w*\[.+\]\w*$', value):
+    unquouted = True
+    
+  try:
+    int(value)
+    unquouted = True
+  except ValueError:
+    pass
+  
+  try:
+    float(value)
+    unquouted = True
+  except ValueError:
+    pass
+  
+  if not unquouted:
+    value = value.replace("'","''")
+    value = "'"+value+"'"
+    
+  return value
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/client_jaas.conf.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/client_jaas.conf.j2
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/client_jaas.conf.j2
new file mode 100644
index 0000000..e8dc122
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/client_jaas.conf.j2
@@ -0,0 +1,24 @@
+{#
+# 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.
+#}
+
+StormClient {
+   com.sun.security.auth.module.Krb5LoginModule required
+   useTicketCache=true
+   renewTicket=true
+   serviceName="{{nimbus_bare_jaas_principal}}";
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/config.yaml.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/config.yaml.j2
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/config.yaml.j2
new file mode 100644
index 0000000..445df31
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/config.yaml.j2
@@ -0,0 +1,65 @@
+{#
+# 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.
+#}
+
+# 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.
+
+nimbusHost: {{nimbus_host}}
+nimbusPort: {{nimbus_port}}
+
+# HTTP-specific options.
+http:
+
+  # The port on which the HTTP server listens for service requests.
+  port: {{rest_api_port}}
+
+  # The port on which the HTTP server listens for administrative requests.
+  adminPort: {{rest_api_admin_port}}
+
+{% if ganglia_installed %}
+enableGanglia: {{ganglia_installed}}
+
+# ganglia configuration (necessary if ganglia reporting is enabled)
+ganglia:
+
+  # how often to report to ganglia metrics (in seconds)
+  reportInterval: {{ganglia_report_interval}}
+
+  # the hostname of the gmond server where storm cluster metrics will be sent
+  host: "{{ganglia_server}}"
+
+  # address mode
+  # default is MULTICAST
+  addressMode: "UNICAST"
+
+  # an <IP>:<HOSTNAME> pair to spoof
+  # this allows us to simulate storm cluster metrics coming from a specific 
host
+  #spoof: "192.168.1.1:storm"
+{% endif %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm-metrics2.properties.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm-metrics2.properties.j2
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm-metrics2.properties.j2
new file mode 100644
index 0000000..6d333d5
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm-metrics2.properties.j2
@@ -0,0 +1,21 @@
+{#
+# 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.
+#}
+
+collector={{metric_collector_host}}:8188
+maxRowCacheSize=10000
+sendInterval=59000
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm.yaml.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm.yaml.j2
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm.yaml.j2
new file mode 100644
index 0000000..e6eed41
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm.yaml.j2
@@ -0,0 +1,66 @@
+{#
+# 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.
+#}
+{% macro replace_jaas_placeholder(name) -%}
+{% if name.find('_JAAS_PLACEHOLDER') > -1 -%}
+    {%- if security_enabled -%}
+        {{ name.replace('_JAAS_PLACEHOLDER', 
'-Djava.security.auth.login.config=' +conf_dir + '/storm_jaas.conf') }}
+    {%- else -%}
+        {{ name.replace('_JAAS_PLACEHOLDER', '') }}
+    {%- endif -%}
+{%- else -%}
+    {{name}}
+{%- endif -%}
+{%- endmacro %}
+
+{% for key, value in configurations|dictsort if not key.startswith('_') %}
+{{key}} : {{ escape_yaml_propetry(replace_jaas_placeholder(value)) }}
+{% endfor %}
+
+{% if stack_is_hdp22_or_further %}
+storm.thrift.transport : "{% if security_enabled 
%}{{configurations['_storm.thrift.secure.transport']}}{% else 
%}{{configurations['_storm.thrift.nonsecure.transport']}}{% endif %}"  
+{% endif %}
+
+{% if security_enabled and stack_is_hdp22_or_further %}
+#
+# Kerberos security section. For the reference please use: 
https://github.com/hortonworks/storm/blob/champlain/SECURITY.md for details
+#
+
+storm.principal.tolocal: 
"backtype.storm.security.auth.KerberosPrincipalToLocal"
+storm.zookeeper.superACL: "sasl:{{storm_bare_jaas_principal}}"
+java.security.auth.login.config: "{{conf_dir}}/storm_jaas.conf"
+nimbus.admins:
+  - "{{storm_user}}"
+nimbus.supervisor.users:
+  - "{{storm_user}}"
+nimbus.authorizer: 
"backtype.storm.security.auth.authorizer.SimpleACLAuthorizer"
+drpc.authorizer: 
"backtype.storm.security.auth.authorizer.DRPCSimpleACLAuthorizer"
+
+ui.filter: 
"org.apache.hadoop.security.authentication.server.AuthenticationFilter"
+ui.filter.params:
+  "type": "kerberos"
+  "kerberos.principal": "{{storm_ui_jaas_principal}}"
+  "kerberos.keytab": "{{storm_ui_keytab_path}}"
+  "kerberos.name.rules": "DEFAULT"
+supervisor.enable: true
+{% endif %}
+
+{% if has_metric_collector %}
+topology.metrics.consumer.register:
+  - class: "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsSink"
+    parallelism.hint: 1
+{% endif %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm_jaas.conf.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm_jaas.conf.j2
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm_jaas.conf.j2
new file mode 100644
index 0000000..75cf178
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/storm_jaas.conf.j2
@@ -0,0 +1,45 @@
+{#
+# 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.
+#}
+{% if stack_is_hdp22_or_further %}
+StormServer {
+   com.sun.security.auth.module.Krb5LoginModule required
+   useKeyTab=true
+   keyTab="{{nimbus_keytab_path}}"
+   storeKey=true
+   useTicketCache=false
+   principal="{{nimbus_jaas_principal}}";
+};
+StormClient {
+   com.sun.security.auth.module.Krb5LoginModule required
+   useKeyTab=true
+   keyTab="{{storm_keytab_path}}"
+   storeKey=true
+   useTicketCache=false
+   serviceName="{{nimbus_bare_jaas_principal}}"
+   principal="{{storm_jaas_principal}}";
+};
+{% endif %}
+Client {
+   com.sun.security.auth.module.Krb5LoginModule required
+   useKeyTab=true
+   keyTab="{{storm_keytab_path}}"
+   storeKey=true
+   useTicketCache=false
+   serviceName="zookeeper"
+   principal="{{storm_jaas_principal}}";
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/worker-launcher.cfg.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/worker-launcher.cfg.j2
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/worker-launcher.cfg.j2
new file mode 100644
index 0000000..2228601
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/STORM/package/templates/worker-launcher.cfg.j2
@@ -0,0 +1,19 @@
+{#
+# 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.
+#}
+storm.worker-launcher.group={{user_group}}
+min.user.id={{min_user_ruid}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ed3fd0/ambari-server/src/main/resources/stacks/HDP/2.1/services/TEZ/configuration/tez-env.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.1/services/TEZ/configuration/tez-env.xml
 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/TEZ/configuration/tez-env.xml
new file mode 100644
index 0000000..a1eac56
--- /dev/null
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.1/services/TEZ/configuration/tez-env.xml
@@ -0,0 +1,46 @@
+<?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>tez_user</name>
+    <value>tez</value>
+    <property-type>USER</property-type>
+    <description></description>
+  </property>
+
+  <!-- tez-env.sh -->
+  <property>
+    <name>content</name>
+    <description>This is the jinja template for tez-env.sh file</description>
+    <value>
+# Tez specific configuration
+export TEZ_CONF_DIR={{config_dir}}
+
+# Set HADOOP_HOME to point to a specific hadoop install directory
+export HADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}
+
+# The java implementation to use.
+export JAVA_HOME={{java64_home}}
+    </value>
+  </property>
+</configuration>

Reply via email to