You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2014/09/30 23:40:58 UTC

[2/3] AMBARI-7570. Add Storm Kerberos Support.

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-server/src/test/python/stacks/2.1/configs/default-storm-start.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/configs/default-storm-start.json b/ambari-server/src/test/python/stacks/2.1/configs/default-storm-start.json
new file mode 100644
index 0000000..f90f7e2
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1/configs/default-storm-start.json
@@ -0,0 +1,356 @@
+{
+    "configuration_attributes": {
+        "storm-site": {}, 
+        "hdfs-site": {
+            "final": {
+                "dfs.support.append": "true", 
+                "dfs.namenode.http-address": "true"
+            }
+        }, 
+        "storm-env": {}, 
+        "core-site": {
+            "final": {
+                "fs.defaultFS": "true"
+            }
+        }, 
+        "hadoop-policy": {}, 
+        "hdfs-log4j": {}, 
+        "hadoop-env": {}, 
+        "zookeeper-env": {}, 
+        "zookeeper-log4j": {}, 
+        "cluster-env": {}
+    }, 
+    "commandParams": {
+        "command_timeout": "600", 
+        "script": "scripts/nimbus.py", 
+        "script_type": "PYTHON", 
+        "service_package_folder": "HDP/2.1/services/STORM/package", 
+        "hooks_folder": "HDP/2.0.6/hooks"
+    }, 
+    "roleCommand": "START", 
+    "clusterName": "pacan", 
+    "hostname": "c6402.ambari.apache.org", 
+    "hostLevelParams": {
+        "jdk_location": "http://c6401.ambari.apache.org:8080/resources/", 
+        "ambari_db_rca_password": "mapred", 
+        "java_home": "/usr/jdk64/jdk1.7.0_45", 
+        "ambari_db_rca_url": "jdbc:postgresql://c6401.ambari.apache.org/ambarirca", 
+        "jce_name": "UnlimitedJCEPolicyJDK7.zip", 
+        "oracle_jdbc_url": "http://c6401.ambari.apache.org:8080/resources//ojdbc6.jar", 
+        "repo_info": "[{\"baseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/updates/2.2.0.0\",\"osType\":\"redhat6\",\"repoId\":\"HDP-2.2\",\"repoName\":\"HDP\",\"defaultBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/updates/2.2.0.0\",\"latestBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/updates/2.2.0.0\"},{\"baseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6\",\"osType\":\"redhat6\",\"repoId\":\"HDP-UTILS-1.1.0.20\",\"repoName\":\"HDP-UTILS\",\"defaultBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6\",\"latestBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6\"}]", 
+        "group_list": "[\"hadoop\",\"users\"]", 
+        "package_list": "[{\"name\":\"storm_2_2_0_0_*\"}]", 
+        "stack_version": "2.2", 
+        "stack_name": "HDP", 
+        "db_name": "ambari", 
+        "ambari_db_rca_driver": "org.postgresql.Driver", 
+        "jdk_name": "jdk-7u45-linux-x64.tar.gz", 
+        "ambari_db_rca_username": "mapred", 
+        "db_driver_filename": "mysql-connector-java.jar", 
+        "user_list": "[\"ambari-qa\",\"zookeeper\",\"hdfs\",\"storm\"]", 
+        "mysql_jdbc_url": "http://c6401.ambari.apache.org:8080/resources//mysql-connector-java.jar"
+    }, 
+    "commandType": "EXECUTION_COMMAND", 
+    "roleParams": {}, 
+    "serviceName": "STORM", 
+    "role": "NIMBUS", 
+    "forceRefreshConfigTags": [], 
+    "taskId": 24, 
+    "public_hostname": "c6402.ambari.apache.org", 
+    "configurations": {
+        "storm-site": {
+            "topology.tuple.serializer": "backtype.storm.serialization.types.ListDelegateSerializer", 
+            "topology.workers": "1", 
+            "drpc.worker.threads": "64", 
+            "storm.zookeeper.servers": "['c6402.ambari.apache.org']", 
+            "supervisor.heartbeat.frequency.secs": "5", 
+            "topology.executor.send.buffer.size": "1024", 
+            "drpc.childopts": "-Xmx768m", 
+            "nimbus.thrift.port": "6627", 
+            "storm.zookeeper.retry.intervalceiling.millis": "30000", 
+            "storm.local.dir": "/hadoop/storm", 
+            "topology.receiver.buffer.size": "8", 
+            "storm.messaging.netty.client_worker_threads": "1", 
+            "transactional.zookeeper.root": "/transactional", 
+            "topology.skip.missing.kryo.registrations": "false", 
+            "worker.heartbeat.frequency.secs": "1", 
+            "zmq.hwm": "0", 
+            "storm.zookeeper.connection.timeout": "15000", 
+            "_storm.thrift.secure.transport": "SECURED_TRANSPORT_CLASS", 
+            "storm.messaging.netty.server_worker_threads": "1", 
+            "supervisor.worker.start.timeout.secs": "120", 
+            "zmq.threads": "1", 
+            "topology.acker.executors": "null", 
+            "storm.local.mode.zmq": "false", 
+            "topology.max.task.parallelism": "null", 
+            "topology.max.error.report.per.interval": "5", 
+            "storm.zookeeper.port": "2181", 
+            "drpc.queue.size": "128", 
+            "worker.childopts": "-Xmx768m _JAAS_PLACEHOLDER -javaagent:/usr/hdp/current/storm/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8650,wireformat31x=true,mode=multicast,config=/usr/hdp/current/storm/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Worker_%ID%_JVM", 
+            "nimbus.childopts": "-Xmx1024m _JAAS_PLACEHOLDER -javaagent:/usr/hdp/current/storm/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8649,wireformat31x=true,mode=multicast,config=/usr/hdp/current/storm/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Nimbus_JVM", 
+            "storm.zookeeper.retry.times": "5", 
+            "nimbus.monitor.freq.secs": "10", 
+            "storm.cluster.mode": "distributed", 
+            "dev.zookeeper.path": "/tmp/dev-storm-zookeeper", 
+            "drpc.invocations.port": "3773", 
+            "_storm.thrift.nonsecure.transport": "NON_SECURED_TRANSPORT_CLASS", 
+            "storm.zookeeper.root": "/storm", 
+            "logviewer.childopts": "-Xmx128m", 
+            "transactional.zookeeper.port": "null", 
+            "topology.worker.childopts": "null", 
+            "topology.max.spout.pending": "null", 
+            "nimbus.cleanup.inbox.freq.secs": "600", 
+            "storm.messaging.netty.min_wait_ms": "100", 
+            "nimbus.task.timeout.secs": "30", 
+            "nimbus.thrift.max_buffer_size": "1048576", 
+            "topology.sleep.spout.wait.strategy.time.ms": "1", 
+            "topology.optimize": "true", 
+            "nimbus.reassign": "true", 
+            "storm.messaging.transport": "backtype.storm.messaging.netty.Context", 
+            "logviewer.appender.name": "A1", 
+            "nimbus.host": "c6402.ambari.apache.org", 
+            "ui.port": "8744", 
+            "supervisor.slots.ports": "[6700, 6701]", 
+            "nimbus.file.copy.expiration.secs": "600", 
+            "supervisor.monitor.frequency.secs": "3", 
+            "ui.childopts": "-Xmx768m _JAAS_PLACEHOLDER", 
+            "transactional.zookeeper.servers": "null", 
+            "zmq.linger.millis": "5000", 
+            "topology.error.throttle.interval.secs": "10", 
+            "topology.worker.shared.thread.pool.size": "4", 
+            "java.library.path": "/usr/local/lib:/opt/local/lib:/usr/lib:/usr/hdp/current/storm/lib", 
+            "topology.spout.wait.strategy": "backtype.storm.spout.SleepSpoutWaitStrategy", 
+            "task.heartbeat.frequency.secs": "3", 
+            "topology.transfer.buffer.size": "1024", 
+            "storm.zookeeper.session.timeout": "20000", 
+            "topology.executor.receive.buffer.size": "1024", 
+            "topology.stats.sample.rate": "0.05", 
+            "topology.fall.back.on.java.serialization": "true", 
+            "supervisor.childopts": "-Xmx256m _JAAS_PLACEHOLDER -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=56431 -javaagent:/usr/hdp/current/storm/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8650,wireformat31x=true,mode=multicast,config=/usr/hdp/current/storm/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Supervisor_JVM", 
+            "topology.enable.message.timeouts": "true", 
+            "storm.messaging.netty.max_wait_ms": "1000", 
+            "nimbus.topology.validator": "backtype.storm.nimbus.DefaultTopologyValidator", 
+            "nimbus.supervisor.timeout.secs": "60", 
+            "topology.disruptor.wait.strategy": "com.lmax.disruptor.BlockingWaitStrategy", 
+            "nimbus.inbox.jar.expiration.secs": "3600", 
+            "drpc.port": "3772", 
+            "topology.kryo.factory": "backtype.storm.serialization.DefaultKryoFactory", 
+            "storm.zookeeper.retry.interval": "1000", 
+            "storm.messaging.netty.max_retries": "30", 
+            "topology.tick.tuple.freq.secs": "null", 
+            "drpc.request.timeout.secs": "600", 
+            "nimbus.task.launch.secs": "120", 
+            "task.refresh.poll.secs": "10", 
+            "topology.message.timeout.secs": "30", 
+            "storm.messaging.netty.buffer_size": "5242880", 
+            "topology.state.synchronization.timeout.secs": "60", 
+            "supervisor.worker.timeout.secs": "30", 
+            "topology.trident.batch.emit.interval.millis": "500", 
+            "topology.builtin.metrics.bucket.size.secs": "60", 
+            "logviewer.port": "8000", 
+            "topology.debug": "false"
+        }, 
+        "hdfs-site": {
+            "dfs.namenode.avoid.write.stale.datanode": "true", 
+            "dfs.namenode.checkpoint.txns": "1000000", 
+            "dfs.block.access.token.enable": "true", 
+            "dfs.support.append": "true", 
+            "dfs.datanode.address": "0.0.0.0:50010", 
+            "dfs.cluster.administrators": " hdfs", 
+            "dfs.datanode.balance.bandwidthPerSec": "6250000", 
+            "dfs.namenode.safemode.threshold-pct": "1.0f", 
+            "dfs.namenode.checkpoint.edits.dir": "${dfs.namenode.checkpoint.dir}", 
+            "dfs.permissions.enabled": "true", 
+            "dfs.namenode.kerberos.principal": "nn/_HOST@EXAMPLE.COM", 
+            "dfs.namenode.checkpoint.dir": "/hadoop/hdfs/namesecondary", 
+            "dfs.https.port": "50470", 
+            "dfs.namenode.https-address": "c6402.ambari.apache.org:50470", 
+            "dfs.secondary.namenode.kerberos.https.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.blockreport.initialDelay": "120", 
+            "dfs.journalnode.edits.dir": "/grid/0/hdfs/journal", 
+            "dfs.blocksize": "134217728", 
+            "dfs.client.read.shortcircuit": "true", 
+            "dfs.datanode.max.transfer.threads": "1024", 
+            "dfs.heartbeat.interval": "3", 
+            "dfs.replication": "3", 
+            "dfs.namenode.handler.count": "40", 
+            "dfs.web.authentication.kerberos.keytab": "/etc/security/keytabs/spnego.service.keytab", 
+            "fs.permissions.umask-mode": "022", 
+            "dfs.namenode.stale.datanode.interval": "30000", 
+            "dfs.datanode.ipc.address": "0.0.0.0:8010", 
+            "dfs.namenode.name.dir": "/hadoop/hdfs/namenode", 
+            "dfs.datanode.data.dir": "/hadoop/hdfs/data", 
+            "dfs.namenode.http-address": "c6402.ambari.apache.org:50070", 
+            "dfs.webhdfs.enabled": "true", 
+            "dfs.datanode.failed.volumes.tolerated": "0", 
+            "dfs.namenode.accesstime.precision": "0", 
+            "dfs.namenode.avoid.read.stale.datanode": "true", 
+            "dfs.namenode.secondary.http-address": "c6402.ambari.apache.org:50090", 
+            "dfs.datanode.kerberos.principal": "dn/_HOST@EXAMPLE.COM", 
+            "dfs.datanode.http.address": "0.0.0.0:50075", 
+            "dfs.datanode.du.reserved": "1073741824", 
+            "dfs.client.read.shortcircuit.streams.cache.size": "4096", 
+            "dfs.namenode.kerberos.https.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.secondary.namenode.keytab.file": "/etc/security/keytabs/nn.service.keytab", 
+            "dfs.web.authentication.kerberos.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.secondary.namenode.kerberos.principal": "nn/_HOST@EXAMPLE.COM", 
+            "dfs.datanode.keytab.file": "/etc/security/keytabs/dn.service.keytab", 
+            "dfs.namenode.keytab.file": "/etc/security/keytabs/nn.service.keytab", 
+            "dfs.permissions.superusergroup": "hdfs", 
+            "dfs.journalnode.http-address": "0.0.0.0:8480", 
+            "dfs.domain.socket.path": "/var/lib/hadoop-hdfs/dn_socket", 
+            "dfs.namenode.write.stale.datanode.ratio": "1.0f", 
+            "dfs.hosts.exclude": "/etc/hadoop/conf/dfs.exclude", 
+            "dfs.datanode.data.dir.perm": "750", 
+            "dfs.namenode.name.dir.restore": "true", 
+            "dfs.replication.max": "50", 
+            "dfs.namenode.checkpoint.period": "21600"
+        }, 
+        "storm-env": {
+            "content": "\n#!/bin/bash\n\n# Set Storm specific environment variables here.\n\n# The java implementation to use.\nexport JAVA_HOME={{java64_home}}\n\n# export STORM_CONF_DIR=\"\"", 
+            "storm_log_dir": "/var/log/storm", 
+            "storm_pid_dir": "/var/run/storm", 
+            "storm_user": "storm"
+        }, 
+        "core-site": {
+            "io.serializations": "org.apache.hadoop.io.serializer.WritableSerialization", 
+            "fs.trash.interval": "360", 
+            "dfs.http.policy": "HTTP_ONLY", 
+            "hadoop.security.authentication": "simple", 
+            "io.compression.codecs": "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec", 
+            "hadoop.proxyuser.falcon.hosts": "*", 
+            "mapreduce.jobtracker.webinterface.trusted": "false", 
+            "hadoop.security.authorization": "false", 
+            "fs.defaultFS": "hdfs://c6402.ambari.apache.org:8020", 
+            "ipc.server.tcpnodelay": "true", 
+            "ipc.client.connect.max.retries": "50", 
+            "ipc.client.idlethreshold": "8000", 
+            "io.file.buffer.size": "131072", 
+            "hadoop.security.auth_to_local": "\n        RULE:[2:$1@$0]([rn]m@.*)s/.*/yarn/\n        RULE:[2:$1@$0](jhs@.*)s/.*/mapred/\n        RULE:[2:$1@$0]([nd]n@.*)s/.*/hdfs/\n        RULE:[2:$1@$0](hm@.*)s/.*/hbase/\n        RULE:[2:$1@$0](rs@.*)s/.*/hbase/\n        DEFAULT", 
+            "ipc.client.connection.maxidletime": "30000", 
+            "hadoop.proxyuser.falcon.groups": "users"
+        }, 
+        "hadoop-policy": {
+            "security.job.client.protocol.acl": "*", 
+            "security.job.task.protocol.acl": "*", 
+            "security.datanode.protocol.acl": "*", 
+            "security.namenode.protocol.acl": "*", 
+            "security.client.datanode.protocol.acl": "*", 
+            "security.inter.tracker.protocol.acl": "*", 
+            "security.refresh.usertogroups.mappings.protocol.acl": "hadoop", 
+            "security.client.protocol.acl": "*", 
+            "security.refresh.policy.protocol.acl": "hadoop", 
+            "security.admin.operations.protocol.acl": "hadoop", 
+            "security.inter.datanode.protocol.acl": "*"
+        }, 
+        "hdfs-log4j": {
+            "content": "\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#  http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n\n\n# Define some default values that can be overridden by system properties\n# To change daemon root logger use hadoop_root_logger in hadoop-env\nhadoop.root.lo
 gger=INFO,console\nhadoop.log.dir=.\nhadoop.log.file=hadoop.log\n\n\n# Define the root logger to the system property \"hadoop.root.logger\".\nlog4j.rootLogger=${hadoop.root.logger}, EventCounter\n\n# Logging Threshold\nlog4j.threshhold=ALL\n\n#\n# Daily Rolling File Appender\n#\n\nlog4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}\n\n# Rollver at midnight\nlog4j.appender.DRFA.DatePattern=.yyyy-MM-dd\n\n# 30-day backup\n#log4j.appender.DRFA.MaxBackupIndex=30\nlog4j.appender.DRFA.layout=org.apache.log4j.PatternLayout\n\n# Pattern format: Date LogLevel LoggerName LogMessage\nlog4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\n# Debugging Pattern format\n#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n\n\n\n#\n# console\n# Add \"console\" to rootlogger above if you want to use this\n#\n\nlog4j.appender.console=org.apache.log4j.ConsoleAppender\nlog4j.appender
 .console.target=System.err\nlog4j.appender.console.layout=org.apache.log4j.PatternLayout\nlog4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n\n\n#\n# TaskLog Appender\n#\n\n#Default values\nhadoop.tasklog.taskid=null\nhadoop.tasklog.iscleanup=false\nhadoop.tasklog.noKeepSplits=4\nhadoop.tasklog.totalLogFileSize=100\nhadoop.tasklog.purgeLogSplits=true\nhadoop.tasklog.logsRetainHours=12\n\nlog4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender\nlog4j.appender.TLA.taskId=${hadoop.tasklog.taskid}\nlog4j.appender.TLA.isCleanup=${hadoop.tasklog.iscleanup}\nlog4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}\n\nlog4j.appender.TLA.layout=org.apache.log4j.PatternLayout\nlog4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\n\n#\n#Security audit appender\n#\nhadoop.security.logger=INFO,console\nhadoop.security.log.maxfilesize=256MB\nhadoop.security.log.maxbackupindex=20\nlog4j.category.SecurityLogger=${hadoop.security.logg
 er}\nhadoop.security.log.file=SecurityAuth.audit\nlog4j.appender.DRFAS=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}\nlog4j.appender.DRFAS.layout=org.apache.log4j.PatternLayout\nlog4j.appender.DRFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\nlog4j.appender.DRFAS.DatePattern=.yyyy-MM-dd\n\nlog4j.appender.RFAS=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}\nlog4j.appender.RFAS.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\nlog4j.appender.RFAS.MaxFileSize=${hadoop.security.log.maxfilesize}\nlog4j.appender.RFAS.MaxBackupIndex=${hadoop.security.log.maxbackupindex}\n\n#\n# hdfs audit logging\n#\nhdfs.audit.logger=INFO,console\nlog4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=${hdfs.audit.logger}\nlog4j.additivity.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=
 false\nlog4j.appender.DRFAAUDIT=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFAAUDIT.File=${hadoop.log.dir}/hdfs-audit.log\nlog4j.appender.DRFAAUDIT.layout=org.apache.log4j.PatternLayout\nlog4j.appender.DRFAAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n\nlog4j.appender.DRFAAUDIT.DatePattern=.yyyy-MM-dd\n\n#\n# mapred audit logging\n#\nmapred.audit.logger=INFO,console\nlog4j.logger.org.apache.hadoop.mapred.AuditLogger=${mapred.audit.logger}\nlog4j.additivity.org.apache.hadoop.mapred.AuditLogger=false\nlog4j.appender.MRAUDIT=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.MRAUDIT.File=${hadoop.log.dir}/mapred-audit.log\nlog4j.appender.MRAUDIT.layout=org.apache.log4j.PatternLayout\nlog4j.appender.MRAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n\nlog4j.appender.MRAUDIT.DatePattern=.yyyy-MM-dd\n\n#\n# Rolling File Appender\n#\n\nlog4j.appender.RFA=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.fi
 le}\n\n# Logfile size and and 30-day backups\nlog4j.appender.RFA.MaxFileSize=256MB\nlog4j.appender.RFA.MaxBackupIndex=10\n\nlog4j.appender.RFA.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n\nlog4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n\n\n\n# Custom Logging levels\n\nhadoop.metrics.log.level=INFO\n#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG\n#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG\n#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG\nlog4j.logger.org.apache.hadoop.metrics2=${hadoop.metrics.log.level}\n\n# Jets3t library\nlog4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR\n\n#\n# Null Appender\n# Trap security logger on the hadoop client side\n#\nlog4j.appender.NullAppender=org.apache.log4j.varia.NullAppender\n\n#\n# Event Counter Appender\n# Sends counts of logging messages at different severity levels to Hadoop Metrics.\n#\n
 log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter\n\n# Removes \"deprecated\" messages\nlog4j.logger.org.apache.hadoop.conf.Configuration.deprecation=WARN"
+        }, 
+        "hadoop-env": {
+            "namenode_opt_maxnewsize": "200m", 
+            "hdfs_log_dir_prefix": "/var/log/hadoop", 
+            "hdfs_user": "hdfs", 
+            "proxyuser_group": "users", 
+            "content": "\n# Set Hadoop-specific environment variables here.\n\n# The only required environment variable is JAVA_HOME.  All others are\n# optional.  When running a distributed configuration it is best to\n# set JAVA_HOME in this file, so that it is correctly defined on\n# remote nodes.\n\n# The java implementation to use.  Required.\nexport JAVA_HOME={{java_home}}\nexport HADOOP_HOME_WARN_SUPPRESS=1\n\n# Hadoop home directory\nexport HADOOP_HOME=${HADOOP_HOME:-/usr/lib/hadoop}\n\n# Hadoop Configuration Directory\n#TODO: if env var set that can cause problems\nexport HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-{{hadoop_conf_dir}}}\n\n{# this is different for HDP1 #}\n# Path to jsvc required by secure HDP 2.0 datanode\nexport JSVC_HOME={{jsvc_path}}\n\n\n# The maximum amount of heap to use, in MB. Default is 1000.\nexport HADOOP_HEAPSIZE=\"{{hadoop_heapsize}}\"\n\nexport HADOOP_NAMENODE_INIT_HEAPSIZE=\"-Xms{{namenode_heapsize}}\"\n\n# Extra Java runtime options.  Empty by defaul
 t.\nexport HADOOP_OPTS=\"-Djava.net.preferIPv4Stack=true ${HADOOP_OPTS}\"\n\n# Command specific options appended to HADOOP_OPTS when specified\nexport HADOOP_NAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xms{{namenode_heapsize}} -Xmx{{namenode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_NAMENODE_OPTS}\"\nHADOOP_JOBTRACKER_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{jtnode_opt_newsize}} -XX:MaxNewSize={{jtnode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTime
 Stamps -XX:+PrintGCDateStamps -Xmx{{jtnode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dmapred.audit.logger=INFO,MRAUDIT -Dhadoop.mapreduce.jobsummary.logger=INFO,JSA ${HADOOP_JOBTRACKER_OPTS}\"\n\nHADOOP_TASKTRACKER_OPTS=\"-server -Xmx{{ttnode_heapsize}} -Dhadoop.security.logger=ERROR,console -Dmapred.audit.logger=ERROR,console ${HADOOP_TASKTRACKER_OPTS}\"\nHADOOP_DATANODE_OPTS=\"-Xmx{{dtnode_heapsize}} -Dhadoop.security.logger=ERROR,DRFAS ${HADOOP_DATANODE_OPTS}\"\nHADOOP_BALANCER_OPTS=\"-server -Xmx{{hadoop_heapsize}}m ${HADOOP_BALANCER_OPTS}\"\n\nexport HADOOP_SECONDARYNAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_INIT_HEAPSIZE} -Xmx{{namenode_heapsize
 }} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_SECONDARYNAMENODE_OPTS}\"\n\n# The following applies to multiple commands (fs, dfs, fsck, distcp etc)\nexport HADOOP_CLIENT_OPTS=\"-Xmx${HADOOP_HEAPSIZE}m $HADOOP_CLIENT_OPTS\"\n# On secure datanodes, user to run the datanode as after dropping privileges\nexport HADOOP_SECURE_DN_USER={{hdfs_user}}\n\n# Extra ssh options.  Empty by default.\nexport HADOOP_SSH_OPTS=\"-o ConnectTimeout=5 -o SendEnv=HADOOP_CONF_DIR\"\n\n# Where log files are stored.  $HADOOP_HOME/logs by default.\nexport HADOOP_LOG_DIR={{hdfs_log_dir_prefix}}/$USER\n\n# History server logs\nexport HADOOP_MAPRED_LOG_DIR={{mapred_log_dir_prefix}}/$USER\n\n# Where log files are stored in the secure data environment.\nexport HADOOP_SECURE_DN_LOG_DIR={{hdfs_log_dir_prefix}}/$HADOOP_SECURE_DN_USER\n\n# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.\n# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves\n\n# host:path where ha
 doop code should be rsync'd from.  Unset by default.\n# export HADOOP_MASTER=master:/home/$USER/src/hadoop\n\n# Seconds to sleep between slave commands.  Unset by default.  This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arrive faster than the master can service them.\n# export HADOOP_SLAVE_SLEEP=0.1\n\n# The directory where pid files are stored. /tmp by default.\nexport HADOOP_PID_DIR={{hadoop_pid_dir_prefix}}/$USER\nexport HADOOP_SECURE_DN_PID_DIR={{hadoop_pid_dir_prefix}}/$HADOOP_SECURE_DN_USER\n\n# History server pid\nexport HADOOP_MAPRED_PID_DIR={{mapred_pid_dir_prefix}}/$USER\n\nYARN_RESOURCEMANAGER_OPTS=\"-Dyarn.server.resourcemanager.appsummary.logger=INFO,RMSUMMARY\"\n\n# A string representing this instance of hadoop. $USER by default.\nexport HADOOP_IDENT_STRING=$USER\n\n# The scheduling priority for daemon processes.  See 'man nice'.\n\n# export HADOOP_NICENESS=10\n\n# Use libraries from standard classpath\nJAVA_JDBC_LIBS=\"\"\n#Add lib
 raries required by mysql connector\nfor jarFile in `ls /usr/share/java/*mysql* 2>/dev/null`\ndo\n  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by oracle connector\nfor jarFile in `ls /usr/share/java/*ojdbc* 2>/dev/null`\ndo\n  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by nodemanager\nMAPREDUCE_LIBS={{mapreduce_libs_path}}\nexport HADOOP_CLASSPATH=${HADOOP_CLASSPATH}${JAVA_JDBC_LIBS}:${MAPREDUCE_LIBS}\n\nif [ -d \"/usr/lib/tez\" ]; then\n  export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/lib/tez/*:/usr/lib/tez/lib/*:/etc/tez/conf\nfi\n\n# Setting path to hdfs command line\nexport HADOOP_LIBEXEC_DIR={{hadoop_libexec_dir}}\n\n#Mostly required for hadoop 2.0\nexport JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/usr/lib/hadoop/lib/native/Linux-amd64-64\n\n#Hadoop logging options\nexport HADOOP_ROOT_LOGGER={{hadoop_root_logger}}", 
+            "namenode_heapsize": "1024m", 
+            "rpm_version": "2.2.0.0", 
+            "namenode_opt_newsize": "200m", 
+            "dtnode_heapsize": "1024m", 
+            "hadoop_root_logger": "INFO,RFA", 
+            "hadoop_heapsize": "1024", 
+            "hadoop_pid_dir_prefix": "/var/run/hadoop"
+        }, 
+        "zookeeper-env": {
+            "clientPort": "2181", 
+            "zk_user": "zookeeper", 
+            "zk_log_dir": "/var/log/zookeeper", 
+            "syncLimit": "5", 
+            "content": "\nexport JAVA_HOME={{java64_home}}\nexport ZOO_LOG_DIR={{zk_log_dir}}\nexport ZOOPIDFILE={{zk_pid_file}}\nexport SERVER_JVMFLAGS={{zk_server_heapsize}}\nexport JAVA=$JAVA_HOME/bin/java\nexport CLASSPATH=$CLASSPATH:/usr/share/zookeeper/*\n\n{% if security_enabled %}\nexport SERVER_JVMFLAGS=\"$SERVER_JVMFLAGS -Djava.security.auth.login.config={{zk_server_jaas_file}}\"\nexport CLIENT_JVMFLAGS=\"$CLIENT_JVMFLAGS -Djava.security.auth.login.config={{zk_client_jaas_file}}\"\n{% endif %}", 
+            "initLimit": "10", 
+            "zk_pid_dir": "/var/run/zookeeper", 
+            "zk_data_dir": "/hadoop/zookeeper", 
+            "tickTime": "2000"
+        }, 
+        "zookeeper-log4j": {
+            "content": "\n#\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n#\n#\n\n#\n# ZooKeeper Logging Configuration\n#\n\n# DEFAULT: console appender only\nlog4j.rootLogger=INFO, CONSOLE\n\n# Example with rolling log file\n#log4
 j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE\n\n# Example with rolling log file and tracing\n#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE\n\n#\n# Log INFO level and above messages to the console\n#\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Threshold=INFO\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n\n\n#\n# Add ROLLINGFILE to rootLogger to get log file output\n#    Log DEBUG level and above messages to a log file\nlog4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender\nlog4j.appender.ROLLINGFILE.Threshold=DEBUG\nlog4j.appender.ROLLINGFILE.File=zookeeper.log\n\n# Max log file size of 10MB\nlog4j.appender.ROLLINGFILE.MaxFileSize=10MB\n# uncomment the next line to limit number of backup files\n#log4j.appender.ROLLINGFILE.MaxBackupIndex=10\n\nlog4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.ROLLIN
 GFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n\n\n\n#\n# Add TRACEFILE to rootLogger to get log file output\n#    Log DEBUG level and above messages to a log file\nlog4j.appender.TRACEFILE=org.apache.log4j.FileAppender\nlog4j.appender.TRACEFILE.Threshold=TRACE\nlog4j.appender.TRACEFILE.File=zookeeper_trace.log\n\nlog4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout\n### Notice we are including log4j's NDC here (%x)\nlog4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L][%x] - %m%n"
+        }, 
+        "cluster-env": {
+            "security_enabled": "false", 
+            "ignore_groupsusers_create": "false", 
+            "smokeuser": "ambari-qa", 
+            "kerberos_domain": "EXAMPLE.COM", 
+            "user_group": "hadoop"
+        }
+    }, 
+    "configurationTags": {
+        "storm-site": {
+            "tag": "version1"
+        }, 
+        "hdfs-site": {
+            "tag": "version1411996371868"
+        }, 
+        "storm-env": {
+            "tag": "version1"
+        }, 
+        "core-site": {
+            "tag": "version1411996371868"
+        }, 
+        "hadoop-policy": {
+            "tag": "version1411996371868"
+        }, 
+        "hdfs-log4j": {
+            "tag": "version1411996371868"
+        }, 
+        "hadoop-env": {
+            "tag": "version1411996371868"
+        }, 
+        "zookeeper-env": {
+            "tag": "version1"
+        }, 
+        "zookeeper-log4j": {
+            "tag": "version1"
+        }, 
+        "cluster-env": {
+            "tag": "version1"
+        }
+    }, 
+    "commandId": "6-1", 
+    "clusterHostInfo": {
+        "snamenode_host": [
+            "c6402.ambari.apache.org"
+        ], 
+        "drpc_server_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "nimbus_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "all_ping_ports": [
+            "8670"
+        ], 
+        "all_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "slave_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "namenode_host": [
+            "c6402.ambari.apache.org"
+        ], 
+        "storm_ui_server_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "storm_rest_api_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "ambari_server_host": [
+            "c6401.ambari.apache.org"
+        ], 
+        "zookeeper_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "supervisor_hosts": [
+            "c6402.ambari.apache.org"
+        ]
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-server/src/test/python/stacks/2.1/configs/secured-storm-start.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/configs/secured-storm-start.json b/ambari-server/src/test/python/stacks/2.1/configs/secured-storm-start.json
new file mode 100644
index 0000000..005a4df
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1/configs/secured-storm-start.json
@@ -0,0 +1,373 @@
+{
+    "configuration_attributes": {
+        "storm-site": {}, 
+        "hdfs-site": {
+            "final": {
+                "dfs.support.append": "true", 
+                "dfs.namenode.http-address": "true"
+            }
+        }, 
+        "storm-env": {}, 
+        "core-site": {
+            "final": {
+                "fs.defaultFS": "true"
+            }
+        }, 
+        "hadoop-policy": {}, 
+        "hdfs-log4j": {}, 
+        "hadoop-env": {}, 
+        "zookeeper-env": {}, 
+        "zookeeper-log4j": {}, 
+        "cluster-env": {}
+    }, 
+    "commandParams": {
+        "command_timeout": "600", 
+        "script": "scripts/nimbus.py", 
+        "script_type": "PYTHON", 
+        "service_package_folder": "HDP/2.1/services/STORM/package", 
+        "hooks_folder": "HDP/2.0.6/hooks"
+    }, 
+    "roleCommand": "START", 
+    "clusterName": "pacan", 
+    "hostname": "c6402.ambari.apache.org", 
+    "hostLevelParams": {
+        "jdk_location": "http://c6401.ambari.apache.org:8080/resources/", 
+        "ambari_db_rca_password": "mapred", 
+        "java_home": "/usr/jdk64/jdk1.7.0_45", 
+        "ambari_db_rca_url": "jdbc:postgresql://c6401.ambari.apache.org/ambarirca", 
+        "jce_name": "UnlimitedJCEPolicyJDK7.zip", 
+        "oracle_jdbc_url": "http://c6401.ambari.apache.org:8080/resources//ojdbc6.jar", 
+        "repo_info": "[{\"baseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/updates/2.2.0.0\",\"osType\":\"redhat6\",\"repoId\":\"HDP-2.2\",\"repoName\":\"HDP\",\"defaultBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/updates/2.2.0.0\",\"latestBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/updates/2.2.0.0\"},{\"baseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6\",\"osType\":\"redhat6\",\"repoId\":\"HDP-UTILS-1.1.0.20\",\"repoName\":\"HDP-UTILS\",\"defaultBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6\",\"latestBaseUrl\":\"http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6\"}]", 
+        "group_list": "[\"hadoop\",\"users\"]", 
+        "package_list": "[{\"name\":\"storm_2_2_0_0_*\"}]", 
+        "stack_version": "2.2", 
+        "stack_name": "HDP", 
+        "db_name": "ambari", 
+        "ambari_db_rca_driver": "org.postgresql.Driver", 
+        "jdk_name": "jdk-7u45-linux-x64.tar.gz", 
+        "ambari_db_rca_username": "mapred", 
+        "db_driver_filename": "mysql-connector-java.jar", 
+        "user_list": "[\"ambari-qa\",\"zookeeper\",\"hdfs\",\"storm\"]", 
+        "mysql_jdbc_url": "http://c6401.ambari.apache.org:8080/resources//mysql-connector-java.jar"
+    }, 
+    "commandType": "EXECUTION_COMMAND", 
+    "roleParams": {}, 
+    "serviceName": "STORM", 
+    "role": "NIMBUS", 
+    "forceRefreshConfigTags": [], 
+    "taskId": 54, 
+    "public_hostname": "c6402.ambari.apache.org", 
+    "configurations": {
+        "storm-site": {
+            "topology.tuple.serializer": "backtype.storm.serialization.types.ListDelegateSerializer", 
+            "topology.workers": "1", 
+            "drpc.worker.threads": "64", 
+            "storm.zookeeper.servers": "['c6402.ambari.apache.org']", 
+            "supervisor.heartbeat.frequency.secs": "5", 
+            "topology.executor.send.buffer.size": "1024", 
+            "drpc.childopts": "-Xmx768m", 
+            "nimbus.thrift.port": "6627", 
+            "storm.zookeeper.retry.intervalceiling.millis": "30000", 
+            "storm.local.dir": "/hadoop/storm", 
+            "topology.receiver.buffer.size": "8", 
+            "storm.messaging.netty.client_worker_threads": "1", 
+            "transactional.zookeeper.root": "/transactional", 
+            "topology.skip.missing.kryo.registrations": "false", 
+            "worker.heartbeat.frequency.secs": "1", 
+            "zmq.hwm": "0", 
+            "storm.zookeeper.connection.timeout": "15000", 
+            "_storm.thrift.secure.transport": "SECURED_TRANSPORT_CLASS", 
+            "storm.messaging.netty.server_worker_threads": "1", 
+            "supervisor.worker.start.timeout.secs": "120", 
+            "zmq.threads": "1", 
+            "topology.acker.executors": "null", 
+            "storm.local.mode.zmq": "false", 
+            "topology.max.task.parallelism": "null", 
+            "topology.max.error.report.per.interval": "5", 
+            "storm.zookeeper.port": "2181", 
+            "drpc.queue.size": "128", 
+            "worker.childopts": "-Xmx768m _JAAS_PLACEHOLDER -javaagent:/usr/hdp/current/storm/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8650,wireformat31x=true,mode=multicast,config=/usr/hdp/current/storm/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Worker_%ID%_JVM", 
+            "nimbus.childopts": "-Xmx1024m _JAAS_PLACEHOLDER -javaagent:/usr/hdp/current/storm/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8649,wireformat31x=true,mode=multicast,config=/usr/hdp/current/storm/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Nimbus_JVM", 
+            "storm.zookeeper.retry.times": "5", 
+            "nimbus.monitor.freq.secs": "10", 
+            "storm.cluster.mode": "distributed", 
+            "dev.zookeeper.path": "/tmp/dev-storm-zookeeper", 
+            "drpc.invocations.port": "3773", 
+            "_storm.thrift.nonsecure.transport": "NON_SECURED_TRANSPORT_CLASS", 
+            "storm.zookeeper.root": "/storm", 
+            "logviewer.childopts": "-Xmx128m", 
+            "transactional.zookeeper.port": "null", 
+            "topology.worker.childopts": "null", 
+            "topology.max.spout.pending": "null", 
+            "nimbus.cleanup.inbox.freq.secs": "600", 
+            "storm.messaging.netty.min_wait_ms": "100", 
+            "nimbus.task.timeout.secs": "30", 
+            "nimbus.thrift.max_buffer_size": "1048576", 
+            "topology.sleep.spout.wait.strategy.time.ms": "1", 
+            "topology.optimize": "true", 
+            "nimbus.reassign": "true", 
+            "storm.messaging.transport": "backtype.storm.messaging.netty.Context", 
+            "logviewer.appender.name": "A1", 
+            "nimbus.host": "c6402.ambari.apache.org", 
+            "ui.port": "8744", 
+            "supervisor.slots.ports": "[6700, 6701]", 
+            "nimbus.file.copy.expiration.secs": "600", 
+            "supervisor.monitor.frequency.secs": "3", 
+            "ui.childopts": "-Xmx768m _JAAS_PLACEHOLDER", 
+            "transactional.zookeeper.servers": "null", 
+            "zmq.linger.millis": "5000", 
+            "topology.error.throttle.interval.secs": "10", 
+            "topology.worker.shared.thread.pool.size": "4", 
+            "java.library.path": "/usr/local/lib:/opt/local/lib:/usr/lib:/usr/hdp/current/storm/lib", 
+            "topology.spout.wait.strategy": "backtype.storm.spout.SleepSpoutWaitStrategy", 
+            "task.heartbeat.frequency.secs": "3", 
+            "topology.transfer.buffer.size": "1024", 
+            "storm.zookeeper.session.timeout": "20000", 
+            "topology.executor.receive.buffer.size": "1024", 
+            "topology.stats.sample.rate": "0.05", 
+            "topology.fall.back.on.java.serialization": "true", 
+            "supervisor.childopts": "-Xmx256m _JAAS_PLACEHOLDER -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=56431 -javaagent:/usr/hdp/current/storm/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8650,wireformat31x=true,mode=multicast,config=/usr/hdp/current/storm/contrib/storm-jmxetric/conf/jmxetric-conf.xml,process=Supervisor_JVM", 
+            "topology.enable.message.timeouts": "true", 
+            "storm.messaging.netty.max_wait_ms": "1000", 
+            "nimbus.topology.validator": "backtype.storm.nimbus.DefaultTopologyValidator", 
+            "nimbus.supervisor.timeout.secs": "60", 
+            "topology.disruptor.wait.strategy": "com.lmax.disruptor.BlockingWaitStrategy", 
+            "nimbus.inbox.jar.expiration.secs": "3600", 
+            "drpc.port": "3772", 
+            "topology.kryo.factory": "backtype.storm.serialization.DefaultKryoFactory", 
+            "storm.zookeeper.retry.interval": "1000", 
+            "storm.messaging.netty.max_retries": "30", 
+            "topology.tick.tuple.freq.secs": "null", 
+            "drpc.request.timeout.secs": "600", 
+            "nimbus.task.launch.secs": "120", 
+            "task.refresh.poll.secs": "10", 
+            "topology.message.timeout.secs": "30", 
+            "storm.messaging.netty.buffer_size": "5242880", 
+            "topology.state.synchronization.timeout.secs": "60", 
+            "supervisor.worker.timeout.secs": "30", 
+            "topology.trident.batch.emit.interval.millis": "500", 
+            "topology.builtin.metrics.bucket.size.secs": "60", 
+            "logviewer.port": "8000", 
+            "topology.debug": "false"
+        }, 
+        "hdfs-site": {
+            "dfs.namenode.avoid.write.stale.datanode": "true", 
+            "dfs.namenode.kerberos.internal.spnego.principal": "${dfs.web.authentication.kerberos.principal}", 
+            "dfs.namenode.checkpoint.txns": "1000000", 
+            "dfs.block.access.token.enable": "true", 
+            "dfs.support.append": "true", 
+            "dfs.datanode.address": "0.0.0.0:1019", 
+            "dfs.cluster.administrators": " hdfs", 
+            "dfs.journalnode.kerberos.principal": "jn/_HOST@EXAMPLE.COM", 
+            "dfs.datanode.balance.bandwidthPerSec": "6250000", 
+            "dfs.namenode.safemode.threshold-pct": "1.0f", 
+            "dfs.namenode.checkpoint.edits.dir": "${dfs.namenode.checkpoint.dir}", 
+            "dfs.permissions.enabled": "true", 
+            "dfs.namenode.kerberos.principal": "nn/_HOST@EXAMPLE.COM", 
+            "dfs.namenode.checkpoint.dir": "/hadoop/hdfs/namesecondary", 
+            "dfs.https.port": "50470", 
+            "dfs.namenode.https-address": "c6402.ambari.apache.org:50470", 
+            "dfs.secondary.namenode.kerberos.https.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.blockreport.initialDelay": "120", 
+            "dfs.journalnode.edits.dir": "/grid/0/hdfs/journal", 
+            "dfs.blocksize": "134217728", 
+            "dfs.client.read.shortcircuit": "true", 
+            "dfs.datanode.max.transfer.threads": "1024", 
+            "dfs.heartbeat.interval": "3", 
+            "dfs.replication": "3", 
+            "dfs.namenode.handler.count": "40", 
+            "dfs.web.authentication.kerberos.keytab": "/etc/security/keytabs/spnego.service.keytab", 
+            "fs.permissions.umask-mode": "022", 
+            "dfs.namenode.stale.datanode.interval": "30000", 
+            "dfs.datanode.ipc.address": "0.0.0.0:8010", 
+            "dfs.namenode.name.dir": "/hadoop/hdfs/namenode", 
+            "dfs.secondary.namenode.kerberos.internal.spnego.principal": "${dfs.web.authentication.kerberos.principal}", 
+            "dfs.datanode.data.dir": "/hadoop/hdfs/data", 
+            "dfs.namenode.http-address": "c6402.ambari.apache.org:50070", 
+            "dfs.webhdfs.enabled": "true", 
+            "dfs.datanode.failed.volumes.tolerated": "0", 
+            "dfs.namenode.accesstime.precision": "0", 
+            "dfs.namenode.avoid.read.stale.datanode": "true", 
+            "dfs.namenode.secondary.http-address": "c6402.ambari.apache.org:50090", 
+            "dfs.datanode.kerberos.principal": "dn/_HOST@EXAMPLE.COM", 
+            "dfs.journalnode.keytab.file": "/etc/security/keytabs/jn.service.keytab", 
+            "dfs.datanode.http.address": "0.0.0.0:1022", 
+            "dfs.datanode.du.reserved": "1073741824", 
+            "dfs.client.read.shortcircuit.streams.cache.size": "4096", 
+            "dfs.namenode.kerberos.https.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.secondary.namenode.keytab.file": "/etc/security/keytabs/nn.service.keytab", 
+            "dfs.web.authentication.kerberos.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.secondary.namenode.kerberos.principal": "nn/_HOST@EXAMPLE.COM", 
+            "dfs.datanode.keytab.file": "/etc/security/keytabs/dn.service.keytab", 
+            "dfs.namenode.keytab.file": "/etc/security/keytabs/nn.service.keytab", 
+            "dfs.permissions.superusergroup": "hdfs", 
+            "dfs.journalnode.http-address": "0.0.0.0:8480", 
+            "dfs.journalnode.kerberos.internal.spnego.principal": "HTTP/_HOST@EXAMPLE.COM", 
+            "dfs.domain.socket.path": "/var/lib/hadoop-hdfs/dn_socket", 
+            "dfs.namenode.write.stale.datanode.ratio": "1.0f", 
+            "dfs.hosts.exclude": "/etc/hadoop/conf/dfs.exclude", 
+            "dfs.datanode.data.dir.perm": "750", 
+            "dfs.namenode.name.dir.restore": "true", 
+            "dfs.replication.max": "50", 
+            "dfs.namenode.checkpoint.period": "21600"
+        }, 
+        "storm-env": {
+            "storm_log_dir": "/var/log/storm", 
+            "storm_principal_name": "storm@EXAMPLE.COM", 
+            "storm_pid_dir": "/var/run/storm", 
+            "storm_user": "storm", 
+            "content": "\n#!/bin/bash\n\n# Set Storm specific environment variables here.\n\n# The java implementation to use.\nexport JAVA_HOME={{java64_home}}\n\n# export STORM_CONF_DIR=\"\"", 
+            "nimbus_principal_name": "nimbus/_HOST@EXAMPLE.COM", 
+            "strom_ui_keytab": "/etc/security/keytabs/http.storm.service.keytab", 
+            "nimbus_keytab": "/etc/security/keytabs/nimbus.service.keytab", 
+            "storm_keytab": "/etc/security/keytabs/storm.service.keytab", 
+            "strom_ui_principal_name": "HTTP/_HOST"
+        }, 
+        "core-site": {
+            "io.serializations": "org.apache.hadoop.io.serializer.WritableSerialization", 
+            "fs.trash.interval": "360", 
+            "dfs.http.policy": "HTTP_ONLY", 
+            "hadoop.security.authentication": "kerberos", 
+            "io.compression.codecs": "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec", 
+            "hadoop.proxyuser.falcon.hosts": "*", 
+            "mapreduce.jobtracker.webinterface.trusted": "false", 
+            "hadoop.security.authorization": "true", 
+            "fs.defaultFS": "hdfs://c6402.ambari.apache.org:8020", 
+            "ipc.server.tcpnodelay": "true", 
+            "ipc.client.connect.max.retries": "50", 
+            "ipc.client.idlethreshold": "8000", 
+            "io.file.buffer.size": "131072", 
+            "hadoop.security.auth_to_local": "RULE:[2:$1@$0](rm@.*EXAMPLE.COM)s/.*/yarn/\nRULE:[2:$1@$0](nm@.*EXAMPLE.COM)s/.*/yarn/\nRULE:[2:$1@$0](nn@.*EXAMPLE.COM)s/.*/hdfs/\nRULE:[2:$1@$0](dn@.*EXAMPLE.COM)s/.*/hdfs/\nRULE:[2:$1@$0](jn/_HOST@.*EXAMPLE.COM)s/.*/hdfs/\nRULE:[2:$1@$0](falcon@.*EXAMPLE.COM)s/.*/falcon/\nDEFAULT", 
+            "ipc.client.connection.maxidletime": "30000", 
+            "hadoop.proxyuser.falcon.groups": "users"
+        }, 
+        "hadoop-policy": {
+            "security.job.client.protocol.acl": "*", 
+            "security.job.task.protocol.acl": "*", 
+            "security.datanode.protocol.acl": "*", 
+            "security.namenode.protocol.acl": "*", 
+            "security.client.datanode.protocol.acl": "*", 
+            "security.inter.tracker.protocol.acl": "*", 
+            "security.refresh.usertogroups.mappings.protocol.acl": "hadoop", 
+            "security.client.protocol.acl": "*", 
+            "security.refresh.policy.protocol.acl": "hadoop", 
+            "security.admin.operations.protocol.acl": "hadoop", 
+            "security.inter.datanode.protocol.acl": "*"
+        }, 
+        "hdfs-log4j": {
+            "content": "\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#  http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n\n\n# Define some default values that can be overridden by system properties\n# To change daemon root logger use hadoop_root_logger in hadoop-env\nhadoop.root.lo
 gger=INFO,console\nhadoop.log.dir=.\nhadoop.log.file=hadoop.log\n\n\n# Define the root logger to the system property \"hadoop.root.logger\".\nlog4j.rootLogger=${hadoop.root.logger}, EventCounter\n\n# Logging Threshold\nlog4j.threshhold=ALL\n\n#\n# Daily Rolling File Appender\n#\n\nlog4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}\n\n# Rollver at midnight\nlog4j.appender.DRFA.DatePattern=.yyyy-MM-dd\n\n# 30-day backup\n#log4j.appender.DRFA.MaxBackupIndex=30\nlog4j.appender.DRFA.layout=org.apache.log4j.PatternLayout\n\n# Pattern format: Date LogLevel LoggerName LogMessage\nlog4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\n# Debugging Pattern format\n#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n\n\n\n#\n# console\n# Add \"console\" to rootlogger above if you want to use this\n#\n\nlog4j.appender.console=org.apache.log4j.ConsoleAppender\nlog4j.appender
 .console.target=System.err\nlog4j.appender.console.layout=org.apache.log4j.PatternLayout\nlog4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n\n\n#\n# TaskLog Appender\n#\n\n#Default values\nhadoop.tasklog.taskid=null\nhadoop.tasklog.iscleanup=false\nhadoop.tasklog.noKeepSplits=4\nhadoop.tasklog.totalLogFileSize=100\nhadoop.tasklog.purgeLogSplits=true\nhadoop.tasklog.logsRetainHours=12\n\nlog4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender\nlog4j.appender.TLA.taskId=${hadoop.tasklog.taskid}\nlog4j.appender.TLA.isCleanup=${hadoop.tasklog.iscleanup}\nlog4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}\n\nlog4j.appender.TLA.layout=org.apache.log4j.PatternLayout\nlog4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\n\n#\n#Security audit appender\n#\nhadoop.security.logger=INFO,console\nhadoop.security.log.maxfilesize=256MB\nhadoop.security.log.maxbackupindex=20\nlog4j.category.SecurityLogger=${hadoop.security.logg
 er}\nhadoop.security.log.file=SecurityAuth.audit\nlog4j.appender.DRFAS=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}\nlog4j.appender.DRFAS.layout=org.apache.log4j.PatternLayout\nlog4j.appender.DRFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\nlog4j.appender.DRFAS.DatePattern=.yyyy-MM-dd\n\nlog4j.appender.RFAS=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}\nlog4j.appender.RFAS.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\nlog4j.appender.RFAS.MaxFileSize=${hadoop.security.log.maxfilesize}\nlog4j.appender.RFAS.MaxBackupIndex=${hadoop.security.log.maxbackupindex}\n\n#\n# hdfs audit logging\n#\nhdfs.audit.logger=INFO,console\nlog4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=${hdfs.audit.logger}\nlog4j.additivity.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=
 false\nlog4j.appender.DRFAAUDIT=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.DRFAAUDIT.File=${hadoop.log.dir}/hdfs-audit.log\nlog4j.appender.DRFAAUDIT.layout=org.apache.log4j.PatternLayout\nlog4j.appender.DRFAAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n\nlog4j.appender.DRFAAUDIT.DatePattern=.yyyy-MM-dd\n\n#\n# mapred audit logging\n#\nmapred.audit.logger=INFO,console\nlog4j.logger.org.apache.hadoop.mapred.AuditLogger=${mapred.audit.logger}\nlog4j.additivity.org.apache.hadoop.mapred.AuditLogger=false\nlog4j.appender.MRAUDIT=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.MRAUDIT.File=${hadoop.log.dir}/mapred-audit.log\nlog4j.appender.MRAUDIT.layout=org.apache.log4j.PatternLayout\nlog4j.appender.MRAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n\nlog4j.appender.MRAUDIT.DatePattern=.yyyy-MM-dd\n\n#\n# Rolling File Appender\n#\n\nlog4j.appender.RFA=org.apache.log4j.RollingFileAppender\nlog4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.fi
 le}\n\n# Logfile size and and 30-day backups\nlog4j.appender.RFA.MaxFileSize=256MB\nlog4j.appender.RFA.MaxBackupIndex=10\n\nlog4j.appender.RFA.layout=org.apache.log4j.PatternLayout\nlog4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n\nlog4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n\n\n\n# Custom Logging levels\n\nhadoop.metrics.log.level=INFO\n#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG\n#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG\n#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG\nlog4j.logger.org.apache.hadoop.metrics2=${hadoop.metrics.log.level}\n\n# Jets3t library\nlog4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR\n\n#\n# Null Appender\n# Trap security logger on the hadoop client side\n#\nlog4j.appender.NullAppender=org.apache.log4j.varia.NullAppender\n\n#\n# Event Counter Appender\n# Sends counts of logging messages at different severity levels to Hadoop Metrics.\n#\n
 log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter\n\n# Removes \"deprecated\" messages\nlog4j.logger.org.apache.hadoop.conf.Configuration.deprecation=WARN"
+        }, 
+        "hadoop-env": {
+            "namenode_opt_maxnewsize": "200m", 
+            "hdfs_log_dir_prefix": "/var/log/hadoop", 
+            "namenode_heapsize": "1024m", 
+            "proxyuser_group": "users", 
+            "hdfs_user_keytab": "/etc/security/keytabs/hdfs.headless.keytab", 
+            "content": "\n# Set Hadoop-specific environment variables here.\n\n# The only required environment variable is JAVA_HOME.  All others are\n# optional.  When running a distributed configuration it is best to\n# set JAVA_HOME in this file, so that it is correctly defined on\n# remote nodes.\n\n# The java implementation to use.  Required.\nexport JAVA_HOME={{java_home}}\nexport HADOOP_HOME_WARN_SUPPRESS=1\n\n# Hadoop home directory\nexport HADOOP_HOME=${HADOOP_HOME:-/usr/lib/hadoop}\n\n# Hadoop Configuration Directory\n#TODO: if env var set that can cause problems\nexport HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-{{hadoop_conf_dir}}}\n\n{# this is different for HDP1 #}\n# Path to jsvc required by secure HDP 2.0 datanode\nexport JSVC_HOME={{jsvc_path}}\n\n\n# The maximum amount of heap to use, in MB. Default is 1000.\nexport HADOOP_HEAPSIZE=\"{{hadoop_heapsize}}\"\n\nexport HADOOP_NAMENODE_INIT_HEAPSIZE=\"-Xms{{namenode_heapsize}}\"\n\n# Extra Java runtime options.  Empty by defaul
 t.\nexport HADOOP_OPTS=\"-Djava.net.preferIPv4Stack=true ${HADOOP_OPTS}\"\n\n# Command specific options appended to HADOOP_OPTS when specified\nexport HADOOP_NAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xms{{namenode_heapsize}} -Xmx{{namenode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_NAMENODE_OPTS}\"\nHADOOP_JOBTRACKER_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{jtnode_opt_newsize}} -XX:MaxNewSize={{jtnode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTime
 Stamps -XX:+PrintGCDateStamps -Xmx{{jtnode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dmapred.audit.logger=INFO,MRAUDIT -Dhadoop.mapreduce.jobsummary.logger=INFO,JSA ${HADOOP_JOBTRACKER_OPTS}\"\n\nHADOOP_TASKTRACKER_OPTS=\"-server -Xmx{{ttnode_heapsize}} -Dhadoop.security.logger=ERROR,console -Dmapred.audit.logger=ERROR,console ${HADOOP_TASKTRACKER_OPTS}\"\nHADOOP_DATANODE_OPTS=\"-Xmx{{dtnode_heapsize}} -Dhadoop.security.logger=ERROR,DRFAS ${HADOOP_DATANODE_OPTS}\"\nHADOOP_BALANCER_OPTS=\"-server -Xmx{{hadoop_heapsize}}m ${HADOOP_BALANCER_OPTS}\"\n\nexport HADOOP_SECONDARYNAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_INIT_HEAPSIZE} -Xmx{{namenode_heapsize
 }} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_SECONDARYNAMENODE_OPTS}\"\n\n# The following applies to multiple commands (fs, dfs, fsck, distcp etc)\nexport HADOOP_CLIENT_OPTS=\"-Xmx${HADOOP_HEAPSIZE}m $HADOOP_CLIENT_OPTS\"\n# On secure datanodes, user to run the datanode as after dropping privileges\nexport HADOOP_SECURE_DN_USER={{hdfs_user}}\n\n# Extra ssh options.  Empty by default.\nexport HADOOP_SSH_OPTS=\"-o ConnectTimeout=5 -o SendEnv=HADOOP_CONF_DIR\"\n\n# Where log files are stored.  $HADOOP_HOME/logs by default.\nexport HADOOP_LOG_DIR={{hdfs_log_dir_prefix}}/$USER\n\n# History server logs\nexport HADOOP_MAPRED_LOG_DIR={{mapred_log_dir_prefix}}/$USER\n\n# Where log files are stored in the secure data environment.\nexport HADOOP_SECURE_DN_LOG_DIR={{hdfs_log_dir_prefix}}/$HADOOP_SECURE_DN_USER\n\n# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.\n# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves\n\n# host:path where ha
 doop code should be rsync'd from.  Unset by default.\n# export HADOOP_MASTER=master:/home/$USER/src/hadoop\n\n# Seconds to sleep between slave commands.  Unset by default.  This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arrive faster than the master can service them.\n# export HADOOP_SLAVE_SLEEP=0.1\n\n# The directory where pid files are stored. /tmp by default.\nexport HADOOP_PID_DIR={{hadoop_pid_dir_prefix}}/$USER\nexport HADOOP_SECURE_DN_PID_DIR={{hadoop_pid_dir_prefix}}/$HADOOP_SECURE_DN_USER\n\n# History server pid\nexport HADOOP_MAPRED_PID_DIR={{mapred_pid_dir_prefix}}/$USER\n\nYARN_RESOURCEMANAGER_OPTS=\"-Dyarn.server.resourcemanager.appsummary.logger=INFO,RMSUMMARY\"\n\n# A string representing this instance of hadoop. $USER by default.\nexport HADOOP_IDENT_STRING=$USER\n\n# The scheduling priority for daemon processes.  See 'man nice'.\n\n# export HADOOP_NICENESS=10\n\n# Use libraries from standard classpath\nJAVA_JDBC_LIBS=\"\"\n#Add lib
 raries required by mysql connector\nfor jarFile in `ls /usr/share/java/*mysql* 2>/dev/null`\ndo\n  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by oracle connector\nfor jarFile in `ls /usr/share/java/*ojdbc* 2>/dev/null`\ndo\n  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by nodemanager\nMAPREDUCE_LIBS={{mapreduce_libs_path}}\nexport HADOOP_CLASSPATH=${HADOOP_CLASSPATH}${JAVA_JDBC_LIBS}:${MAPREDUCE_LIBS}\n\nif [ -d \"/usr/lib/tez\" ]; then\n  export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/lib/tez/*:/usr/lib/tez/lib/*:/etc/tez/conf\nfi\n\n# Setting path to hdfs command line\nexport HADOOP_LIBEXEC_DIR={{hadoop_libexec_dir}}\n\n#Mostly required for hadoop 2.0\nexport JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/usr/lib/hadoop/lib/native/Linux-amd64-64\n\n#Hadoop logging options\nexport HADOOP_ROOT_LOGGER={{hadoop_root_logger}}", 
+            "hdfs_user": "hdfs", 
+            "rpm_version": "2.2.0.0", 
+            "namenode_opt_newsize": "200m", 
+            "dtnode_heapsize": "1024m", 
+            "hadoop_root_logger": "INFO,RFA", 
+            "hadoop_heapsize": "1024", 
+            "hadoop_pid_dir_prefix": "/var/run/hadoop", 
+            "hdfs_principal_name": "hdfs"
+        }, 
+        "zookeeper-env": {
+            "clientPort": "2181", 
+            "zookeeper_keytab_path": "/etc/security/keytabs/zk.service.keytab", 
+            "zk_user": "zookeeper", 
+            "zk_log_dir": "/var/log/zookeeper", 
+            "syncLimit": "5", 
+            "content": "\nexport JAVA_HOME={{java64_home}}\nexport ZOO_LOG_DIR={{zk_log_dir}}\nexport ZOOPIDFILE={{zk_pid_file}}\nexport SERVER_JVMFLAGS={{zk_server_heapsize}}\nexport JAVA=$JAVA_HOME/bin/java\nexport CLASSPATH=$CLASSPATH:/usr/share/zookeeper/*\n\n{% if security_enabled %}\nexport SERVER_JVMFLAGS=\"$SERVER_JVMFLAGS -Djava.security.auth.login.config={{zk_server_jaas_file}}\"\nexport CLIENT_JVMFLAGS=\"$CLIENT_JVMFLAGS -Djava.security.auth.login.config={{zk_client_jaas_file}}\"\n{% endif %}", 
+            "initLimit": "10", 
+            "zk_pid_dir": "/var/run/zookeeper", 
+            "zk_data_dir": "/hadoop/zookeeper", 
+            "zookeeper_principal_name": "zookeeper/_HOST@EXAMPLE.COM", 
+            "tickTime": "2000"
+        }, 
+        "zookeeper-log4j": {
+            "content": "\n#\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n#\n#\n\n#\n# ZooKeeper Logging Configuration\n#\n\n# DEFAULT: console appender only\nlog4j.rootLogger=INFO, CONSOLE\n\n# Example with rolling log file\n#log4
 j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE\n\n# Example with rolling log file and tracing\n#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE\n\n#\n# Log INFO level and above messages to the console\n#\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Threshold=INFO\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n\n\n#\n# Add ROLLINGFILE to rootLogger to get log file output\n#    Log DEBUG level and above messages to a log file\nlog4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender\nlog4j.appender.ROLLINGFILE.Threshold=DEBUG\nlog4j.appender.ROLLINGFILE.File=zookeeper.log\n\n# Max log file size of 10MB\nlog4j.appender.ROLLINGFILE.MaxFileSize=10MB\n# uncomment the next line to limit number of backup files\n#log4j.appender.ROLLINGFILE.MaxBackupIndex=10\n\nlog4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.ROLLIN
 GFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n\n\n\n#\n# Add TRACEFILE to rootLogger to get log file output\n#    Log DEBUG level and above messages to a log file\nlog4j.appender.TRACEFILE=org.apache.log4j.FileAppender\nlog4j.appender.TRACEFILE.Threshold=TRACE\nlog4j.appender.TRACEFILE.File=zookeeper_trace.log\n\nlog4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout\n### Notice we are including log4j's NDC here (%x)\nlog4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L][%x] - %m%n"
+        }, 
+        "cluster-env": {
+            "security_enabled": "true", 
+            "ignore_groupsusers_create": "false", 
+            "smokeuser_keytab": "/etc/security/keytabs/smokeuser.headless.keytab", 
+            "kerberos_domain": "EXAMPLE.COM", 
+            "kinit_path_local": "/usr/bin", 
+            "user_group": "hadoop", 
+            "smokeuser": "ambari-qa"
+        }
+    }, 
+    "configurationTags": {
+        "storm-site": {
+            "tag": "version1412001710682"
+        }, 
+        "hdfs-site": {
+            "tag": "version1412001710682"
+        }, 
+        "storm-env": {
+            "tag": "version1412001710682"
+        }, 
+        "core-site": {
+            "tag": "version1412001710682"
+        }, 
+        "hadoop-policy": {
+            "tag": "version1411996371868"
+        }, 
+        "hdfs-log4j": {
+            "tag": "version1411996371868"
+        }, 
+        "hadoop-env": {
+            "tag": "version1412001710682"
+        }, 
+        "zookeeper-env": {
+            "tag": "version1412001710682"
+        }, 
+        "zookeeper-log4j": {
+            "tag": "version1"
+        }, 
+        "cluster-env": {
+            "tag": "version1412001710681"
+        }
+    }, 
+    "commandId": "12-1", 
+    "clusterHostInfo": {
+        "snamenode_host": [
+            "c6402.ambari.apache.org"
+        ], 
+        "drpc_server_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "nimbus_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "all_ping_ports": [
+            "8670"
+        ], 
+        "all_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "slave_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "namenode_host": [
+            "c6402.ambari.apache.org"
+        ], 
+        "storm_ui_server_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "storm_rest_api_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "ambari_server_host": [
+            "c6401.ambari.apache.org"
+        ], 
+        "zookeeper_hosts": [
+            "c6402.ambari.apache.org"
+        ], 
+        "supervisor_hosts": [
+            "c6402.ambari.apache.org"
+        ]
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-web/app/app.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index c513bfa..e057814 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -80,8 +80,11 @@ module.exports = Em.Application.create({
   }.property('currentStackVersion', 'currentStackName'),
 
   isHadoop2Stack: function () {
-    return (stringUtils.compareVersions(this.get('currentStackVersionNumber'), "2.0") === 1 ||
-      stringUtils.compareVersions(this.get('currentStackVersionNumber'), "2.0") === 0)
+    return (stringUtils.compareVersions(this.get('currentStackVersionNumber'), "2.0") > -1);
+  }.property('currentStackVersionNumber'),
+
+  isHadoop22Stack: function () {
+    return (stringUtils.compareVersions(this.get('currentStackVersionNumber'), "2.2") > -1);
   }.property('currentStackVersionNumber'),
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-web/app/controllers/main/admin/security/add/step2.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/security/add/step2.js b/ambari-web/app/controllers/main/admin/security/add/step2.js
index df500c7..e97c63a 100644
--- a/ambari-web/app/controllers/main/admin/security/add/step2.js
+++ b/ambari-web/app/controllers/main/admin/security/add/step2.js
@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var stringUtils = require('utils/string_utils');
 
 App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
 
@@ -139,6 +140,11 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
       serviceName: 'STORM',
       configName: 'storm_host',
       components: ['STORM_UI_SERVER', 'NIMBUS', 'SUPERVISOR']
+    },
+    {
+      serviceName: 'STORM',
+      configName: 'nimbus_host',
+      components: ['NIMBUS']
     }
   ],
 
@@ -198,6 +204,23 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
    */
   loadStep: function () {
     console.log("TRACE: Loading addSecurity step2: Configure Services");
+    var versionNumber = App.get('currentStackVersionNumber');
+    if( stringUtils.compareVersions(versionNumber, "2.2") >= 0){
+      // Add Nimbus config options
+      var masterComponentMap = this.get('masterComponentMap');
+      masterComponentMap.filterProperty('configName', 'storm_host').components = ["SUPERVISOR", "STORM_UI_SERVER", "DRPC_SERVER", "STORM_REST_API"];
+      masterComponentMap.pushObject({
+        serviceName: 'STORM',
+        configName: 'nimbus_host',
+        components: ['NIMBUS']
+      });
+      this.get('hostToPrincipalMap').pushObject({
+        serviceName: 'STORM',
+        configName: 'nimbus_host',
+        principalName: 'storm_principal_name',
+        primaryName: 'storm'
+      });
+    }
     this.clearStep();
     this.loadUsers();
     this.addUserPrincipals(this.get('content.services'), this.get('securityUsers'));
@@ -305,13 +328,15 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
     if (service) {
       var host = service.configs.findProperty('name', hostConfigName);
       var principal = service.configs.findProperty('name', principalConfigName);
-      if (host && principal) {
-        if (Array.isArray(host.defaultValue)) {
-          host.defaultValue = host.defaultValue[0];
-        }
-        principal.defaultValue = defaultPrimaryName + host.defaultValue.toLowerCase();
+      var versionNumber = App.get('currentStackVersionNumber');
+      if( principalConfigName == 'storm_principal_name' && stringUtils.compareVersions(versionNumber, "2.2") >= 0){
+        principal.defaultValue = defaultPrimaryName;
         return true;
-      }
+      } else if (host && principal) {
+        var host_defaultValue = Array.isArray(host.defaultValue) ? host.defaultValue[0] : host.defaultValue;
+        principal.defaultValue = defaultPrimaryName + host_defaultValue;
+        return true;
+       }
       return false;
     }
     return false;

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-web/app/controllers/main/admin/security/add/step3.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/security/add/step3.js b/ambari-web/app/controllers/main/admin/security/add/step3.js
index 43d5158..0e69371 100644
--- a/ambari-web/app/controllers/main/admin/security/add/step3.js
+++ b/ambari-web/app/controllers/main/admin/security/add/step3.js
@@ -47,79 +47,91 @@ App.MainAdminSecurityAddStep3Controller = Em.Controller.extend({
     'FALCON_SERVER': 'falcon_user'
   },
   // The componentName, principal, and keytab have to coincide with the values in secure_properties.js
-  componentToConfigMap: [
-    {
-      componentName: 'NAMENODE',
-      principal: 'hadoop_http_principal_name',
-      keytab: 'hadoop_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser')
-    },
-    {
-      componentName: 'SECONDARY_NAMENODE',
-      principal: 'hadoop_http_principal_name',
-      keytab: 'hadoop_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser')
-    },
-    {
-      componentName: 'JOURNALNODE',
-      principal: 'hadoop_http_principal_name',
-      keytab: 'hadoop_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser')
-    },
-    {
-      componentName: 'WEBHCAT_SERVER',
-      principal: 'webHCat_http_principal_name',
-      keytab: 'webhcat_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.webhcat.user.httpUser')
-    },
-    {
-      componentName: 'OOZIE_SERVER',
-      principal: 'oozie_http_principal_name',
-      keytab: 'oozie_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.oozie.user.httpUser')
-    },
-    {
-      componentName: 'FALCON_SERVER',
-      principal: 'falcon_http_principal_name',
-      keytab: 'falcon_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.falcon.user.httpUser')
-    },
-    {
-      componentName: 'HISTORYSERVER',
-      principal: 'jobhistory_http_principal_name',
-      keytab: 'jobhistory_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.historyServer.user.httpUser'),
-      isHadoop2Stack: true
-    },
-    {
-      componentName: 'RESOURCEMANAGER',
-      principal: 'resourcemanager_http_principal_name',
-      keytab: 'resourcemanager_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.rm.user.httpUser'),
-      isHadoop2Stack: true
-    },
-    {
-      componentName: 'NODEMANAGER',
-      principal: 'nodemanager_http_principal_name',
-      keytab: 'nodemanager_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.nm.user.httpUser'),
-      isHadoop2Stack: true
-    },
-    {
-      componentName: 'APP_TIMELINE_SERVER',
-      principal: 'apptimelineserver_principal_name',
-      keytab: 'apptimelineserver_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.user.yarn.atsUser'),
-      isHadoop2Stack: true
-    },
-    {
-      componentName: 'APP_TIMELINE_SERVER',
-      principal: 'apptimelineserver_http_principal_name',
-      keytab: 'apptimelineserver_http_keytab',
-      displayName: Em.I18n.t('admin.addSecurity.user.yarn.atsHTTPUser'),
-      isHadoop2Stack: true
+  componentToConfigMap: function () {
+    var hdp2map = [
+      {
+        componentName: 'NAMENODE',
+        principal: 'hadoop_http_principal_name',
+        keytab: 'hadoop_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser')
+      },
+      {
+        componentName: 'SECONDARY_NAMENODE',
+        principal: 'hadoop_http_principal_name',
+        keytab: 'hadoop_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser')
+      },
+      {
+        componentName: 'JOURNALNODE',
+        principal: 'hadoop_http_principal_name',
+        keytab: 'hadoop_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser')
+      },
+      {
+        componentName: 'WEBHCAT_SERVER',
+        principal: 'webHCat_http_principal_name',
+        keytab: 'webhcat_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.webhcat.user.httpUser')
+      },
+      {
+        componentName: 'OOZIE_SERVER',
+        principal: 'oozie_http_principal_name',
+        keytab: 'oozie_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.oozie.user.httpUser')
+      },
+      {
+        componentName: 'FALCON_SERVER',
+        principal: 'falcon_http_principal_name',
+        keytab: 'falcon_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.falcon.user.httpUser')
+      },
+      {
+        componentName: 'HISTORYSERVER',
+        principal: 'jobhistory_http_principal_name',
+        keytab: 'jobhistory_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.historyServer.user.httpUser'),
+        isHadoop2Stack: true
+      },
+      {
+        componentName: 'RESOURCEMANAGER',
+        principal: 'resourcemanager_http_principal_name',
+        keytab: 'resourcemanager_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.rm.user.httpUser'),
+        isHadoop2Stack: true
+      },
+      {
+        componentName: 'NODEMANAGER',
+        principal: 'nodemanager_http_principal_name',
+        keytab: 'nodemanager_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.nm.user.httpUser'),
+        isHadoop2Stack: true
+      },
+      {
+        componentName: 'APP_TIMELINE_SERVER',
+        principal: 'apptimelineserver_principal_name',
+        keytab: 'apptimelineserver_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.user.yarn.atsUser'),
+        isHadoop2Stack: true
+      },
+      {
+        componentName: 'APP_TIMELINE_SERVER',
+        principal: 'apptimelineserver_http_principal_name',
+        keytab: 'apptimelineserver_http_keytab',
+        displayName: Em.I18n.t('admin.addSecurity.user.yarn.atsHTTPUser'),
+        isHadoop2Stack: true
+      }
+    ];
+    if (App.get('isHadoop22Stack')) {
+      hdp2map.push({
+        componentName: 'DRPC_SERVER',
+        principal: 'nimbus_principal_name',
+        keytab: 'nimbus_keytab',
+        displayName: 'DRPC_SERVER',
+        isHadoop2Stack: true
+      });
     }
-  ],
+    return hdp2map;
+  }.property('App.isHadoop22Stack'),
 
   mandatoryConfigs: [
     {

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-web/app/data/HDP2.2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.2/site_properties.js b/ambari-web/app/data/HDP2.2/site_properties.js
new file mode 100644
index 0000000..a70f080
--- /dev/null
+++ b/ambari-web/app/data/HDP2.2/site_properties.js
@@ -0,0 +1,29 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+var hdp2properties = require('data/HDP2/site_properties').configProperties;
+var hdp22properties = hdp2properties.filter(function (item){
+  //In HDP2.2 storm.thrift.transport property is computed on server
+  return item.name !== 'storm.thrift.transport';
+});
+
+module.exports =
+{
+  "configProperties": hdp22properties
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-web/app/data/HDP2/secure_configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/secure_configs.js b/ambari-web/app/data/HDP2/secure_configs.js
index 833697d..421ba54 100644
--- a/ambari-web/app/data/HDP2/secure_configs.js
+++ b/ambari-web/app/data/HDP2/secure_configs.js
@@ -36,7 +36,7 @@ if (isATSInstalled && doesATSSupportKerberos) {
   yarnConfigProperties.push(App.ServiceConfigCategory.create({ name: 'AppTimelineServer', displayName : 'ApplicationTimelineService'}));
 }
 
-module.exports = [
+var configs = [
   {
     serviceName: 'GENERAL',
     displayName: 'General',
@@ -135,7 +135,7 @@ module.exports = [
     displayName: 'Storm',
     filename: 'storm-site',
     configCategories: [
-      App.ServiceConfigCategory.create({ name: 'Storm Topology', displayName:  'Storm Topology'})
+      App.ServiceConfigCategory.create({ name: 'Storm Topology', displayName:  'Storm Client'})
     ],
     sites: ['storm-env','storm-site'],
     configs: configProperties.filterProperty('serviceName', 'STORM')
@@ -152,4 +152,16 @@ module.exports = [
   }
 ];
 
+if(App.get('isHadoop22Stack')){
+  for(var i = 0; i < configs.length; i++){
+    var config = configs[i];
+    if( config.serviceName === 'STORM' ){
+      config.configCategories.unshift(App.ServiceConfigCategory.create({ name: 'Nimbus', displayName:  'Nimbus'}));
+    }
+  }
+}
+
+
+module.exports = configs;
+
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/73c169e3/ambari-web/app/data/HDP2/secure_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/secure_properties.js b/ambari-web/app/data/HDP2/secure_properties.js
index f3d8d92..6733f12 100644
--- a/ambari-web/app/data/HDP2/secure_properties.js
+++ b/ambari-web/app/data/HDP2/secure_properties.js
@@ -27,8 +27,7 @@
  * component: Ambari component name
  */
 
-module.exports =
-{
+var props = {
   "configProperties": [
     {
       "id": "puppet var",
@@ -990,51 +989,6 @@ module.exports =
       "category": "Nagios Server",
       "component": "NAGIOS_SERVER"
     },
-  /**********************************************STORM***************************************/
-    {
-      "id": "puppet var",
-      "name": "storm_host",
-      "displayName": "Storm component hosts",
-      "value": "",
-      "defaultValue": "",
-      "description": "Storm component hosts",
-      "displayType": "slaveHosts",
-      "isVisible": true,
-      "isOverridable": false,
-      "serviceName": "STORM",
-      "category": "Storm Topology"
-    },
-    {
-      "id": "puppet var",
-      "name": "storm_principal_name",
-      "displayName": " Storm principal name",
-      "value": "",
-      "defaultValue": "storm/_HOST",
-      "description": "Principal name for Supervisor. _HOST will get automatically replaced with actual hostname at an instance of every storm component.",
-      "displayType": "principal",
-      "isVisible": true,
-      "isOverridable": false,
-      "serviceName": "STORM",
-      "filename": "storm-env.xml",
-      "category": "Storm Topology",
-      "components": ["SUPERVISOR", "NIMBUS", "STORM_UI_SERVER"]
-    },
-    {
-      "id": "puppet var",
-      "name": "storm_keytab",
-      "displayName": "Path to Storm keytab file",
-      "value": "",
-      "defaultValue": "/etc/security/keytabs/storm.service.keytab",
-      "description": "Path to the storm keytab file",
-      "displayType": "directory",
-      "isVisible": true,
-      "isOverridable": false,
-      "serviceName": "STORM",
-      "filename": "storm-env.xml",
-      "category": "Storm Topology",
-      "components": ["SUPERVISOR", "NIMBUS"]
-    },
-
   /**********************************************Falcon***************************************/
     {
       "id": "puppet var",
@@ -1118,3 +1072,162 @@ module.exports =
     }
   ]
 };
+
+var stormProperties = [
+  {
+    "id": "puppet var",
+    "name": "storm_host",
+    "displayName": "Storm component hosts",
+    "value": "",
+    "defaultValue": "",
+    "description": "Storm component hosts",
+    "displayType": "slaveHosts",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "category": "Storm Topology"
+  },
+  {
+    "id": "puppet var",
+    "name": "storm_principal_name",
+    "displayName": " Storm principal name",
+    "value": "",
+    "defaultValue": "storm/_HOST",
+    "description": "Principal name for Supervisor. _HOST will get automatically replaced with actual hostname at an instance of every storm component.",
+    "displayType": "principal",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Storm Topology",
+    "components": ["SUPERVISOR", "NIMBUS", "STORM_UI_SERVER"]
+  },
+  {
+    "id": "puppet var",
+    "name": "storm_keytab",
+    "displayName": "Path to Storm keytab file",
+    "value": "",
+    "defaultValue": "/etc/security/keytabs/storm.service.keytab",
+    "description": "Path to the storm keytab file",
+    "displayType": "directory",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Storm Topology",
+    "components": ["SUPERVISOR", "NIMBUS"]
+  }
+];
+var storm22Properties = [
+  {
+    "id": "puppet var",
+    "name": "storm_principal_name",
+    "displayName": " Storm principal name",
+    "value": "",
+    "defaultValue": "storm/_HOST",
+    "description": "Principal name for Storm components. _HOST will get automatically replaced with actual hostname at an instance of every storm component.",
+    "displayType": "principal",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Storm Topology",
+    "components": ["SUPERVISOR", "STORM_UI_SERVER", "DRPC_SERVER", "STORM_REST_API"]
+  },
+  {
+    "id": "puppet var",
+    "name": "storm_keytab",
+    "displayName": "Path to Storm keytab file",
+    "value": "",
+    "defaultValue": "/etc/security/keytabs/storm.service.keytab",
+    "description": "Path to the storm keytab file",
+    "displayType": "directory",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Storm Topology",
+    "components": ["SUPERVISOR", "STORM_UI_SERVER", "DRPC_SERVER", "STORM_REST_API"]
+  },
+  {
+    "id": "puppet var",
+    "name": "nimbus_host",
+    "displayName": "Nimbus hosts",
+    "value": "",
+    "defaultValue": "",
+    "description": "Nimbus component hosts",
+    "displayType": "slaveHosts",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "category": "Nimbus"
+  },
+  {
+    "id": "puppet var",
+    "name": "nimbus_principal_name",
+    "displayName": " Nimbus principal name",
+    "value": "",
+    "defaultValue": "nimbus/_HOST",
+    "description": "Nimbus Principal name",
+    "displayType": "principal",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Nimbus",
+    "components": ["NIMBUS","DRPC_SERVER"]
+  },
+  {
+    "id": "puppet var",
+    "name": "nimbus_keytab",
+    "displayName": "Path to Nimbus keytab file",
+    "value": "",
+    "defaultValue": "/etc/security/keytabs/nimbus.service.keytab",
+    "description": "Path to the nimbus keytab file",
+    "displayType": "directory",
+    "isVisible": true,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Nimbus",
+    "components": ["NIMBUS","DRPC_SERVER"]
+  },
+  {
+    "id": "puppet var",
+    "name": "strom_ui_principal_name",
+    "displayName": "Storm UI principal name",
+    "value": "",
+    "defaultValue": "HTTP/_HOST",
+    "description": "Principal name for Storm UI",
+    "displayType": "principal",
+    "isVisible": false,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Nimbus",
+    "components": ["STORM_UI_SERVER"]
+  },
+  {
+    "id": "puppet var",
+    "name": "strom_ui_keytab",
+    "displayName": "Path to Nimbus UI keytab file",
+    "value": "",
+    "defaultValue": "/etc/security/keytabs/http.storm.service.keytab",
+    "description": "Path to the Storm UI keytab file",
+    "displayType": "directory",
+    "isVisible": false,
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-env.xml",
+    "category": "Nimbus",
+    "components": ["STORM_UI_SERVER"]
+  }
+];
+
+if(App.get('isHadoop22Stack')) {
+  props.configProperties.pushObjects(storm22Properties);
+} else {
+  props.configProperties.pushObjects(stormProperties);
+}
+
+module.exports = props;