You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sm...@apache.org on 2014/01/28 01:34:44 UTC

git commit: AMBARI-4441. Add support for hbase decommisison

Updated Branches:
  refs/heads/trunk a89f85948 -> 5be57caff


AMBARI-4441. Add support for hbase decommisison


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

Branch: refs/heads/trunk
Commit: 5be57caff0a33ded07ba409dcc0f9f521f7a142c
Parents: a89f859
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Mon Jan 27 16:34:22 2014 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Mon Jan 27 16:34:30 2014 -0800

----------------------------------------------------------------------
 .../AmbariCustomCommandExecutionHelper.java     | 30 +++++++++--
 .../HBASE/package/scripts/hbase_decommission.py | 53 ++++++++++++++++++++
 .../HBASE/package/scripts/hbase_master.py       |  7 +++
 .../services/HBASE/package/scripts/params.py    |  5 ++
 .../HBASE/package/scripts/hbase_decommission.py | 53 ++++++++++++++++++++
 .../HBASE/package/scripts/hbase_master.py       |  7 +++
 .../services/HBASE/package/scripts/params.py    |  5 ++
 .../stacks/1.3.3/HBASE/test_hbase_master.py     | 32 +++++++++++-
 .../python/stacks/1.3.3/configs/default.json    |  3 +-
 .../python/stacks/1.3.3/configs/secured.json    |  3 +-
 .../stacks/2.1.1/HBASE/test_hbase_master.py     | 32 +++++++++++-
 .../python/stacks/2.1.1/configs/default.json    |  5 +-
 .../python/stacks/2.1.1/configs/secured.json    |  3 +-
 13 files changed, 227 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index 5baa72e..2ae77c8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -47,6 +47,7 @@ import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
 import org.apache.ambari.server.utils.StageUtils;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -101,6 +102,7 @@ public class AmbariCustomCommandExecutionHelper {
   private static String DECOM_INCLUDED_HOSTS = "included_hosts";
   private static String DECOM_EXCLUDED_HOSTS = "excluded_hosts";
   private static String DECOM_SLAVE_COMPONENT = "slave_type";
+  private static String HBASE_MARK_DRAINING_ONLY = "mark_draining_only";
   @Inject
   private ActionMetadata actionMetadata;
   @Inject
@@ -192,14 +194,15 @@ public class AmbariCustomCommandExecutionHelper {
     } else if (actionRequest.getCommandName().equals("DECOMMISSION")) {
       addDecommissionAction(actionRequest, stage, hostLevelParams);
     } else if (isValidCustomCommand(actionRequest)) {
-      addCustomCommandAction(actionRequest, stage, hostLevelParams);
+      addCustomCommandAction(actionRequest, stage, hostLevelParams, null);
     } else {
       throw new AmbariException("Unsupported action " + actionRequest.getCommandName());
     }
   }
 
   private void addCustomCommandAction(ExecuteActionRequest actionRequest,
-                                      Stage stage, Map<String, String> hostLevelParams)
+                                      Stage stage, Map<String, String> hostLevelParams,
+                                      Map<String, String> additionalCommandParams)
       throws AmbariException {
 
     if (actionRequest.getHosts().isEmpty()) {
@@ -246,6 +249,11 @@ public class AmbariCustomCommandExecutionHelper {
 
       Map<String, String> commandParams = new TreeMap<String, String>();
       commandParams.put(SCHEMA_VERSION, serviceInfo.getSchemaVersion());
+      if (additionalCommandParams != null) {
+        for (String key : additionalCommandParams.keySet()) {
+          commandParams.put(key, additionalCommandParams.get(key));
+        }
+      }
 
       String commandTimeout = configs.getDefaultAgentTaskTimeout();
 
@@ -268,7 +276,7 @@ public class AmbariCustomCommandExecutionHelper {
                   "this service", componentName);
           throw new AmbariException(message);
         }
-        // We don't need package/repo infomation to perform service check
+        // We don't need package/repo information to perform service check
       }
       commandParams.put(COMMAND_TIMEOUT, commandTimeout);
 
@@ -495,9 +503,11 @@ public class AmbariCustomCommandExecutionHelper {
     }
 
     // Set/reset decommissioned flag on all components
+    List<String> listOfExcludedHosts = new ArrayList<String>();
     for (ServiceComponentHost sch : svcComponents.get(slaveCompType).getServiceComponentHosts().values()) {
       if (excludedHosts.contains(sch.getHostName())) {
         sch.setComponentAdminState(HostComponentAdminState.DECOMMISSIONED);
+        listOfExcludedHosts.add(sch.getHostName());
         LOG.info("Adding " + slaveCompType + " host to decommissioned list : " + sch.getHostName());
       }
       if (includedHosts.contains(sch.getHostName())) {
@@ -517,7 +527,19 @@ public class AmbariCustomCommandExecutionHelper {
     // Reset cluster host info as it has changed
     stage.setClusterHostInfo(clusterHostInfoJson);
 
-    addCustomCommandAction(commandRequest, stage, hostLevelParams);
+    Map<String, String> commandParams = null;
+    if (serviceName.equals(Service.Type.HBASE.name()) && listOfExcludedHosts.size() > 0) {
+      commandParams = new HashMap<String, String>();
+      commandParams.put(DECOM_EXCLUDED_HOSTS, StringUtils.join(listOfExcludedHosts, ','));
+      String isDrainOnlyRequest = request.getParameters().get(HBASE_MARK_DRAINING_ONLY);
+      if (isDrainOnlyRequest != null) {
+        if (isDrainOnlyRequest.equals("true") || isDrainOnlyRequest.equals("false")) {
+          commandParams.put(HBASE_MARK_DRAINING_ONLY, isDrainOnlyRequest);
+        }
+      }
+    }
+
+    addCustomCommandAction(commandRequest, stage, hostLevelParams, commandParams);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_decommission.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_decommission.py b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_decommission.py
new file mode 100644
index 0000000..dba89fa
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_decommission.py
@@ -0,0 +1,53 @@
+#!/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 hbase_decommission(env):
+  import params
+
+  env.set_params(params)
+
+  if params.hbase_drain_only == True:
+    print "TBD: Remove host from draining"
+    pass
+
+  else:
+
+    kinit_cmd = format("{kinit_path_local} -kt {hbase_user_keytab} {hbase_user};") if params.security_enabled else ""
+
+    hosts = params.hbase_excluded_hosts.split(",")
+    for host in hosts:
+      if host:
+        print "TBD: Add host to draining"
+        regionmover_cmd = format(
+          "{kinit_cmd} {hbase_cmd} --config {conf_dir} org.jruby.Main {region_mover} unload {host}")
+
+        Execute(regionmover_cmd,
+                user=params.hbase_user,
+                logoutput=True
+        )
+      pass
+    pass
+  pass
+
+
+pass
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_master.py b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_master.py
index d94b4b4..9c78e5c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_master.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/hbase_master.py
@@ -23,6 +23,7 @@ from resource_management import *
 
 from hbase import hbase
 from hbase_service import hbase_service
+from hbase_decommission import hbase_decommission
 
          
 class HbaseMaster(Script):
@@ -59,6 +60,12 @@ class HbaseMaster(Script):
     pid_file = format("{pid_dir}/hbase-hbase-master.pid")
     check_process_status(pid_file)
 
+  def decommission(self, env):
+    import params
+    env.set_params(params)
+
+    hbase_decommission(env)
+
 def main():
   command_type = sys.argv[1] if len(sys.argv)>1 else "install"
   print "Running "+command_type

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/params.py
index b830412..01a8b2c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/HBASE/package/scripts/params.py
@@ -28,6 +28,11 @@ config = Script.get_config()
 
 conf_dir = "/etc/hbase/conf"
 daemon_script = "/usr/lib/hbase/bin/hbase-daemon.sh"
+region_mover = "/usr/lib/hbase/bin/region_mover.rb"
+region_drainer = "/usr/lib/hbase/bin/region_drainer.rb"
+hbase_cmd = "/usr/lib/hbase/bin/hbase"
+hbase_excluded_hosts = default("/commandParams/excluded_hosts", "")
+hbase_drain_only = default("/commandParams/mark_draining_only", "")
 
 hbase_user = config['configurations']['global']['hbase_user']
 smokeuser = config['configurations']['global']['smokeuser']

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_decommission.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_decommission.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_decommission.py
new file mode 100644
index 0000000..dba89fa
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_decommission.py
@@ -0,0 +1,53 @@
+#!/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 hbase_decommission(env):
+  import params
+
+  env.set_params(params)
+
+  if params.hbase_drain_only == True:
+    print "TBD: Remove host from draining"
+    pass
+
+  else:
+
+    kinit_cmd = format("{kinit_path_local} -kt {hbase_user_keytab} {hbase_user};") if params.security_enabled else ""
+
+    hosts = params.hbase_excluded_hosts.split(",")
+    for host in hosts:
+      if host:
+        print "TBD: Add host to draining"
+        regionmover_cmd = format(
+          "{kinit_cmd} {hbase_cmd} --config {conf_dir} org.jruby.Main {region_mover} unload {host}")
+
+        Execute(regionmover_cmd,
+                user=params.hbase_user,
+                logoutput=True
+        )
+      pass
+    pass
+  pass
+
+
+pass
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_master.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_master.py
index d94b4b4..9c78e5c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_master.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/hbase_master.py
@@ -23,6 +23,7 @@ from resource_management import *
 
 from hbase import hbase
 from hbase_service import hbase_service
+from hbase_decommission import hbase_decommission
 
          
 class HbaseMaster(Script):
@@ -59,6 +60,12 @@ class HbaseMaster(Script):
     pid_file = format("{pid_dir}/hbase-hbase-master.pid")
     check_process_status(pid_file)
 
+  def decommission(self, env):
+    import params
+    env.set_params(params)
+
+    hbase_decommission(env)
+
 def main():
   command_type = sys.argv[1] if len(sys.argv)>1 else "install"
   print "Running "+command_type

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/params.py
index 8205971..7db6306 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/HBASE/package/scripts/params.py
@@ -27,6 +27,11 @@ config = Script.get_config()
 
 conf_dir = "/etc/hbase/conf"
 daemon_script = "/usr/lib/hbase/bin/hbase-daemon.sh"
+region_mover = "/usr/lib/hbase/bin/region_mover.rb"
+region_drainer = "/usr/lib/hbase/bin/region_drainer.rb"
+hbase_cmd = "/usr/lib/hbase/bin/hbase"
+hbase_excluded_hosts = default("/commandParams/excluded_hosts", "")
+hbase_drain_only = default("/commandParams/mark_draining_only", "")
 
 hbase_user = config['configurations']['global']['hbase_user']
 smokeuser = config['configurations']['global']['smokeuser']

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/test/python/stacks/1.3.3/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/1.3.3/HBASE/test_hbase_master.py
index 6566415..7e6d67b 100644
--- a/ambari-server/src/test/python/stacks/1.3.3/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/1.3.3/HBASE/test_hbase_master.py
@@ -57,7 +57,24 @@ class TestHBaseMaster(RMFTestCase):
       user = 'hbase',
     )
     self.assertNoMoreResources()
-    
+
+  def test_decom_default(self):
+    self.executeScript("2.1.1/services/HBASE/package/scripts/hbase_master.py",
+                       classname = "HbaseMaster",
+                       command = "decommission",
+                       config_file="default.json"
+    )
+
+    self.assertResourceCalled('Execute', ' /usr/lib/hbase/bin/hbase --config /etc/hbase/conf org.jruby.Main /usr/lib/hbase/bin/region_mover.rb unload host1',
+                              logoutput = True,
+                              user = 'hbase',
+                              )
+    self.assertResourceCalled('Execute', ' /usr/lib/hbase/bin/hbase --config /etc/hbase/conf org.jruby.Main /usr/lib/hbase/bin/region_mover.rb unload host2',
+                              logoutput = True,
+                              user = 'hbase',
+                              )
+    self.assertNoMoreResources()
+
   def test_configure_secured(self):
     self.executeScript("1.3.3/services/HBASE/package/scripts/hbase_master.py",
                    classname = "HbaseMaster",
@@ -95,6 +112,19 @@ class TestHBaseMaster(RMFTestCase):
     )
     self.assertNoMoreResources()
 
+  def test_decom_secure(self):
+    self.executeScript("2.1.1/services/HBASE/package/scripts/hbase_master.py",
+                       classname = "HbaseMaster",
+                       command = "decommission",
+                       config_file="secured.json"
+    )
+
+    self.assertResourceCalled('Execute', '/usr/bin/kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase; /usr/lib/hbase/bin/hbase --config /etc/hbase/conf org.jruby.Main /usr/lib/hbase/bin/region_mover.rb unload host1',
+                              logoutput = True,
+                              user = 'hbase',
+                              )
+    self.assertNoMoreResources()
+
   def assert_configure_default(self):
     self.assertResourceCalled('Directory', '/etc/hbase/conf',
       owner = 'hbase',

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/configs/default.json b/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
index 556853a..70b93f5 100644
--- a/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
+++ b/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
@@ -28,7 +28,8 @@
         "service_metadata_folder": "HDFS", 
         "script_type": "PYTHON", 
         "schema_version": "2.0", 
-        "script": "scripts/datanode.py"
+        "script": "scripts/datanode.py",
+        "excluded_hosts": "host1,host2"
     }, 
     "taskId": 18, 
     "public_hostname": "c6402.ambari.apache.org", 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json b/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
index fac4974..ac357cc 100644
--- a/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
+++ b/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
@@ -28,7 +28,8 @@
         "service_metadata_folder": "HIVE", 
         "script_type": "PYTHON", 
         "schema_version": "2.0", 
-        "script": "scripts/mysql_server.py"
+        "script": "scripts/mysql_server.py",
+        "excluded_hosts": "host1"
     }, 
     "taskId": 117, 
     "public_hostname": "c6402.ambari.apache.org", 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/test/python/stacks/2.1.1/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.1.1/HBASE/test_hbase_master.py
index 12fb388..c052388 100644
--- a/ambari-server/src/test/python/stacks/2.1.1/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/2.1.1/HBASE/test_hbase_master.py
@@ -57,7 +57,24 @@ class TestHBaseMaster(RMFTestCase):
       user = 'hbase',
     )
     self.assertNoMoreResources()
-    
+
+  def test_decom_default(self):
+    self.executeScript("2.1.1/services/HBASE/package/scripts/hbase_master.py",
+                       classname = "HbaseMaster",
+                       command = "decommission",
+                       config_file="default.json"
+    )
+
+    self.assertResourceCalled('Execute', ' /usr/lib/hbase/bin/hbase --config /etc/hbase/conf org.jruby.Main /usr/lib/hbase/bin/region_mover.rb unload host1',
+                              logoutput = True,
+                              user = 'hbase',
+                              )
+    self.assertResourceCalled('Execute', ' /usr/lib/hbase/bin/hbase --config /etc/hbase/conf org.jruby.Main /usr/lib/hbase/bin/region_mover.rb unload host2',
+                              logoutput = True,
+                              user = 'hbase',
+                              )
+    self.assertNoMoreResources()
+
   def test_configure_secured(self):
     self.executeScript("2.1.1/services/HBASE/package/scripts/hbase_master.py",
                    classname = "HbaseMaster",
@@ -95,6 +112,19 @@ class TestHBaseMaster(RMFTestCase):
     )
     self.assertNoMoreResources()
 
+  def test_decom_secure(self):
+    self.executeScript("2.1.1/services/HBASE/package/scripts/hbase_master.py",
+                       classname = "HbaseMaster",
+                       command = "decommission",
+                       config_file="secured.json"
+    )
+
+    self.assertResourceCalled('Execute', '/usr/bin/kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase; /usr/lib/hbase/bin/hbase --config /etc/hbase/conf org.jruby.Main /usr/lib/hbase/bin/region_mover.rb unload host1',
+                              logoutput = True,
+                              user = 'hbase',
+                              )
+    self.assertNoMoreResources()
+
   def assert_configure_default(self):
     self.assertResourceCalled('Directory', '/etc/hbase/conf',
       owner = 'hbase',

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/configs/default.json b/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
index 7d4e9a6..5b40256 100644
--- a/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
+++ b/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
@@ -24,8 +24,9 @@
         "service_metadata_folder": "OOZIE", 
         "script_type": "PYTHON", 
         "schema_version": "2.0", 
-        "script": "scripts/service_check.py"
-    }, 
+        "script": "scripts/service_check.py",
+        "excluded_hosts": "host1,host2"
+    },
     "taskId": 152, 
     "public_hostname": "c6401.ambari.apache.org", 
     "configurations": {

http://git-wip-us.apache.org/repos/asf/ambari/blob/5be57caf/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json b/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
index 6ad9e32..b000c56 100644
--- a/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
+++ b/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
@@ -29,7 +29,8 @@
         "service_metadata_folder": "YARN", 
         "script_type": "PYTHON", 
         "schema_version": "2.0", 
-        "script": "scripts/yarn_client.py"
+        "script": "scripts/yarn_client.py",
+        "excluded_hosts": "host1"
     }, 
     "taskId": 186, 
     "public_hostname": "c6401.ambari.apache.org",