METRON-1326: Metron deploy with Kerberos fails on Ambari 2.5 during ES service 
stop (mmiklavc via mmiklavc) closes apache/metron#894


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

Branch: refs/heads/feature/METRON-1211-extensions-parsers-gradual
Commit: 0df6678c87b550fa2dcec81d0fef1af5a1c20a37
Parents: 7aa08ae
Author: mmiklavc <michael.miklav...@gmail.com>
Authored: Thu Jan 18 12:22:16 2018 -0700
Committer: Michael Miklavcic <michael.miklav...@gmail.com>
Committed: Thu Jan 18 12:22:16 2018 -0700

----------------------------------------------------------------------
 .../5.6.2/package/scripts/elastic_master.py     | 27 +++++++++++++++++--
 .../5.6.2/package/scripts/elastic_slave.py      | 28 +++++++++++++++++---
 .../5.6.2/package/scripts/kibana_master.py      | 24 ++++++++++++++++-
 3 files changed, 73 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metron/blob/0df6678c/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_master.py
----------------------------------------------------------------------
diff --git 
a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_master.py
 
b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_master.py
index c3f089a..3e299e7 100755
--- 
a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_master.py
+++ 
b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_master.py
@@ -17,10 +17,13 @@ limitations under the License.
 
 """
 
+from resource_management.core import shell
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.script import Script
 from resource_management.core.logger import Logger
 
+from resource_management.core.exceptions import ExecutionFailed
+from resource_management.core.exceptions import ComponentIsNotRunning
 from elastic import elastic
 
 
@@ -56,8 +59,28 @@ class Elasticsearch(Script):
         import params
         env.set_params(params)
         Logger.info('Check status of Elasticsearch master node')
-        status_cmd = "service elasticsearch status"
-        Execute(status_cmd)
+
+        # return codes defined by LSB
+        # 
http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
+        cmd = ('service', 'elasticsearch', 'status')
+       
+        rc, out = shell.call(cmd, sudo=True, quiet=False)
+
+        if rc in [1, 2, 3]:
+          # if return code = 1, 2, or 3, then 'program is not running' or 
'dead'
+          # Ambari's resource_management/libraries/script/script.py handles
+          # this specific exception as OK
+          Logger.info("Elasticsearch master is not running")
+          raise ComponentIsNotRunning()
+
+        elif rc == 0:
+          # if return code = 0, then 'program is running or service is OK'
+          Logger.info("Elasticsearch master is running")
+
+        else:
+          # else, program is dead or service state is unknown
+          err_msg = "Execution of '{0}' returned {1}".format(" ".join(cmd), rc)
+          raise ExecutionFailed(err_msg, rc, out)
 
     def restart(self, env):
         import params

http://git-wip-us.apache.org/repos/asf/metron/blob/0df6678c/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_slave.py
----------------------------------------------------------------------
diff --git 
a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_slave.py
 
b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_slave.py
index 8aaee75..d7684f0 100755
--- 
a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_slave.py
+++ 
b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/ELASTICSEARCH/5.6.2/package/scripts/elastic_slave.py
@@ -17,9 +17,12 @@ limitations under the License.
 
 """
 
+from resource_management.core import shell
+from resource_management.core.exceptions import ExecutionFailed
+from resource_management.core.exceptions import ComponentIsNotRunning
+from resource_management.core.logger import Logger
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.script import Script
-from resource_management.core.logger import Logger
 
 from slave import slave
 
@@ -56,8 +59,27 @@ class Elasticsearch(Script):
         import params
         env.set_params(params)
         Logger.info('Check status of Elasticsearch data node')
-        status_cmd = "service elasticsearch status"
-        Execute(status_cmd)
+
+        # return codes defined by LSB
+        # 
http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
+        cmd = ('service', 'elasticsearch', 'status')
+        rc, out = shell.call(cmd, sudo=True, quiet=False)
+
+        if rc in [1, 2, 3]:
+          # if return code = 1, 2, or 3, then 'program is not running' or 
'dead'
+          # Ambari's resource_management/libraries/script/script.py handles
+          # this specific exception as OK
+          Logger.info("Elasticsearch slave is not running")
+          raise ComponentIsNotRunning()
+
+        elif rc == 0:
+          # if return code = 0, then 'program is running or service is OK'
+          Logger.info("Elasticsearch slave is running")
+
+        else:
+          # else, program is dead or service state is unknown
+          err_msg = "Execution of '{0}' returned {1}".format(" ".join(cmd), rc)
+          raise ExecutionFailed(err_msg, rc, out)
 
     def restart(self, env):
         import params

http://git-wip-us.apache.org/repos/asf/metron/blob/0df6678c/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/KIBANA/5.6.2/package/scripts/kibana_master.py
----------------------------------------------------------------------
diff --git 
a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/KIBANA/5.6.2/package/scripts/kibana_master.py
 
b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/KIBANA/5.6.2/package/scripts/kibana_master.py
index 4c001ef..861e19a 100755
--- 
a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/KIBANA/5.6.2/package/scripts/kibana_master.py
+++ 
b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/KIBANA/5.6.2/package/scripts/kibana_master.py
@@ -23,6 +23,9 @@ import errno
 import os
 
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
+from resource_management.core import shell
+from resource_management.core.exceptions import ExecutionFailed
+from resource_management.core.exceptions import ComponentIsNotRunning
 from resource_management.core.logger import Logger
 from resource_management.core.resources.system import Directory
 from resource_management.core.resources.system import Execute
@@ -93,7 +96,26 @@ class Kibana(Script):
 
         Logger.info("Status of the Master")
 
-        Execute("service kibana status")
+        # return codes defined by LSB
+        # 
http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
+        cmd = ('service', 'kibana', 'status')
+        rc, out = shell.call(cmd, sudo=True, quiet=False)
+
+        if rc in [1, 2, 3]:
+          # if return code = 1, 2, or 3, then 'program is not running' or 
'dead'
+          # Ambari's resource_management/libraries/script/script.py handles
+          # this specific exception as OK
+          Logger.info("Kibana is not running")
+          raise ComponentIsNotRunning()
+
+        elif rc == 0:
+          # if return code = 0, then 'program is running or service is OK'
+          Logger.info("Kibana is running")
+
+        else:
+          # else, program is dead or service state is unknown
+          err_msg = "Execution of '{0}' returned {1}".format(" ".join(cmd), rc)
+          raise ExecutionFailed(err_msg, rc, out)
 
     @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
     def load_template(self, env):

Reply via email to