Sfoglia il codice sorgente

AMBARI-15576: Stack Featurize Accumulo Service (jluniya)

Jayush Luniya 9 anni fa
parent
commit
e630228cd7

+ 1 - 0
ambari-common/src/main/python/resource_management/libraries/functions/constants.py

@@ -60,3 +60,4 @@ class StackFeature:
   KAFKA_KERBEROS = "kafka_kerberos"
   PIG_ON_TEZ = "pig_on_tez"
   RANGER_USERSYNC_NON_ROOT = "ranger_usersync_non_root"
+  ACCUMULO_KERBEROS_USER_AUTH = "accumulo_kerberos_user_auth"

+ 5 - 0
ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py

@@ -133,6 +133,11 @@ _DEFAULT_STACK_FEATURES = {
       "name": "ranger_usersync_non_root",
       "description": "Ranger Usersync as non-root user (AMBARI-10416)",
       "min_version": "2.3.0.0"
+    },
+    {
+      "name": "accumulo_kerberos_user_auth",
+      "description": "Accumulo Kerberos User Auth (AMBARI-10163)",
+      "min_version": "2.3.0.0"
     }
   ]
 }

+ 6 - 3
ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_client.py

@@ -23,13 +23,16 @@ from resource_management.core.exceptions import ClientComponentHasNoStatus
 from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import stack_select
 from resource_management.libraries.script.script import Script
+from resource_management.libraries.functions.stack_features import check_stack_feature
+from resource_management.libraries.functions import StackFeature
 
 from accumulo_configuration import setup_conf_dir
 
 
 class AccumuloClient(Script):
   def get_stack_to_component(self):
-    return {"HDP": "accumulo-client"}
+    import params
+    return {params.stack_name: "accumulo-client"}
 
 
   def install(self, env):
@@ -53,8 +56,8 @@ class AccumuloClient(Script):
     env.set_params(params)
 
     # this function should not execute if the version can't be determined or
-    # is not at least HDP 2.2.0.0
-    if Script.is_stack_less_than("2.2"):
+    # the stack does not support rolling upgrade
+    if not (params.stack_version_formatted and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.stack_version_formatted)):
       return
 
     Logger.info("Executing Accumulo Client Upgrade pre-restart")

+ 7 - 4
ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/accumulo_script.py

@@ -29,6 +29,8 @@ from resource_management.libraries.functions.security_commons import get_params_
 from resource_management.libraries.functions.security_commons import validate_security_config_properties
 from resource_management.libraries.functions.security_commons import FILE_TYPE_XML
 from resource_management.libraries.script.script import Script
+from resource_management.libraries.functions.stack_features import check_stack_feature
+from resource_management.libraries.functions import StackFeature
 
 from accumulo_configuration import setup_conf_dir
 from accumulo_service import accumulo_service
@@ -52,14 +54,15 @@ class AccumuloScript(Script):
   def get_stack_to_component(self):
     """
     Gets the <stack-selector-tool> component name given the script component
-    :return:  the name of the component on the HDP stack which is used by
+    :return:  the name of the component on the stack which is used by
               <stack-selector-tool>
     """
+    import params
     if self.component not in self.COMPONENT_TO_STACK_SELECT_MAPPING:
       return None
 
     stack_component = self.COMPONENT_TO_STACK_SELECT_MAPPING[self.component]
-    return {"HDP": stack_component}
+    return {params.stack_name: stack_component}
 
 
   def install(self, env):
@@ -101,8 +104,8 @@ class AccumuloScript(Script):
     env.set_params(params)
 
     # this function should not execute if the version can't be determined or
-    # is not at least HDP 2.2.0.0
-    if Script.is_stack_less_than("2.2"):
+    # the stack does not support rolling upgrade
+    if not (params.stack_version_formatted and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.stack_version_formatted)):
       return
 
     if self.component not in self.COMPONENT_TO_STACK_SELECT_MAPPING:

+ 9 - 4
ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/params.py

@@ -26,24 +26,29 @@ from resource_management.libraries.functions.version import format_stack_version
 from resource_management.libraries.functions.default import default
 from resource_management.libraries.functions.get_bare_principal import get_bare_principal
 from resource_management.libraries.script.script import Script
+from resource_management.libraries.functions.stack_features import check_stack_feature
+from resource_management.libraries.functions import StackFeature
 
 import status_params
 
 # server configurations
 config = Script.get_config()
+stack_root = status_params.stack_root
 exec_tmp_dir = status_params.tmp_dir
 
 # security enabled
 security_enabled = status_params.security_enabled
 
-# hdp version
+# stack name
 stack_name = default("/hostLevelParams/stack_name", None)
+# stack version
 version = default("/commandParams/version", None)
 stack_version_unformatted = config['hostLevelParams']['stack_version']
 stack_version_formatted = format_stack_version(stack_version_unformatted)
 
 has_secure_user_auth = False
-if Script.is_stack_greater_or_equal("2.3"):
+if stack_version_formatted and \
+    check_stack_feature(StackFeature.ACCUMULO_KERBEROS_USER_AUTH, stack_version_formatted):
   has_secure_user_auth = True
 
 # configuration directories
@@ -53,7 +58,7 @@ server_conf_dir = status_params.server_conf_dir
 # service locations
 hadoop_prefix = stack_select.get_hadoop_dir("home")
 hadoop_bin_dir = stack_select.get_hadoop_dir("bin")
-zookeeper_home = "/usr/hdp/current/zookeeper-client"
+zookeeper_home = format("{stack_root}/current/zookeeper-client")
 
 # the configuration direction for HDFS/YARN/MapR is the hadoop config
 # directory, which is symlinked by hadoop-client only
@@ -61,7 +66,7 @@ hadoop_conf_dir = conf_select.get_hadoop_conf_dir()
 
 # accumulo local directory structure
 log_dir = config['configurations']['accumulo-env']['accumulo_log_dir']
-client_script = "/usr/hdp/current/accumulo-client/bin/accumulo"
+client_script = format("{stack_root}/current/accumulo-client/bin/accumulo")
 daemon_script = format("ACCUMULO_CONF_DIR={server_conf_dir} {client_script}")
 
 # user and status

+ 2 - 1
ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/package/scripts/status_params.py

@@ -36,8 +36,9 @@ SERVER_ROLE_DIRECTORY_MAP = {
 component_directory = Script.get_component_from_role(SERVER_ROLE_DIRECTORY_MAP, "ACCUMULO_CLIENT")
 
 config = Script.get_config()
+stack_root = Script.get_stack_root()
 
-conf_dir = format('/usr/hdp/current/{component_directory}/conf')
+conf_dir = format('{stack_root}/current/{component_directory}/conf')
 server_conf_dir = format('{conf_dir}/server')
 pid_dir = config['configurations']['accumulo-env']['accumulo_pid_dir']
 accumulo_user = config['configurations']['accumulo-env']['accumulo_user']

+ 5 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json

@@ -107,6 +107,11 @@
       "name": "ranger_usersync_non_root",
       "description": "Ranger Usersync as non-root user (AMBARI-10416)",
       "min_version": "2.3.0.0"
+    },
+    {
+      "name": "accumulo_kerberos_user_auth",
+      "description": "Accumulo Kerberos User Auth (AMBARI-10163)",
+      "min_version": "2.3.0.0"
     }
   ]
 }