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 2016/12/16 02:28:25 UTC

ambari git commit: AMBARI-19166. Handle Druid requirement for mysql in standard fashion as it is handled in services (Nishant Bangarwa via smohanty)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 dedfb547a -> c63d69276


AMBARI-19166. Handle Druid requirement for mysql in standard fashion as it is handled in services (Nishant Bangarwa via smohanty)


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

Branch: refs/heads/branch-2.5
Commit: c63d6927665aa38980c801c2693a8eb45d7d29ae
Parents: dedfb54
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Thu Dec 15 18:28:11 2016 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Thu Dec 15 18:28:11 2016 -0800

----------------------------------------------------------------------
 .../DRUID/0.9.2/configuration/druid-common.xml  | 12 ++---
 .../common-services/DRUID/0.9.2/metainfo.xml    | 40 ---------------
 .../DRUID/0.9.2/package/scripts/druid.py        | 44 +++++++++++++++--
 .../DRUID/0.9.2/package/scripts/druid_node.py   | 24 +++++++++
 .../DRUID/0.9.2/package/scripts/params.py       | 13 +++++
 .../stacks/HDP/2.6/services/stack_advisor.py    |  5 --
 .../test/python/stacks/2.6/DRUID/test_druid.py  | 51 +++++++++++++++++++-
 .../stacks/2.6/common/test_stack_advisor.py     | 16 +++---
 .../test/python/stacks/2.6/configs/default.json |  9 +++-
 9 files changed, 146 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-common.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-common.xml b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-common.xml
index 8712c7d..39ede45 100644
--- a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-common.xml
+++ b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-common.xml
@@ -24,12 +24,12 @@
     <name>druid.extensions.pullList</name>
     <value>[]</value>
     <description>A comma-separated list of one or more druid extensions to download from maven.</description>
-    <depends-on>
-      <property>
-        <type>druid-common</type>
-        <name>druid.metadata.storage.type</name>
-      </property>
-    </depends-on>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
+    <name>druid.extensions.repositoryList</name>
+    <value>[]</value>
+    <description>A comma-separated list of maven repositories to download extensions.</description>
     <on-ambari-upgrade add="false"/>
   </property>
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/main/resources/common-services/DRUID/0.9.2/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/metainfo.xml b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/metainfo.xml
index abe6e8c..7ae2b9c 100644
--- a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/metainfo.xml
@@ -170,46 +170,6 @@
             </package>
           </packages>
         </osSpecific>
-        <osSpecific>
-          <osFamily>amazon2015,redhat6,suse11,suse12</osFamily>
-          <packages>
-            <package>
-              <name>mysql</name>
-              <skipUpgrade>true</skipUpgrade>
-            </package>
-          </packages>
-        </osSpecific>
-        <osSpecific>
-          <osFamily>amazon2015,redhat6,debian7,ubuntu12,ubuntu14,ubuntu16</osFamily>
-          <packages>
-            <package>
-              <name>mysql-server</name>
-              <skipUpgrade>true</skipUpgrade>
-            </package>
-          </packages>
-        </osSpecific>
-        <osSpecific>
-          <osFamily>redhat7</osFamily>
-          <packages>
-            <package>
-              <name>mysql-community-release</name>
-              <skipUpgrade>true</skipUpgrade>
-            </package>
-            <package>
-              <name>mysql-community-server</name>
-              <skipUpgrade>true</skipUpgrade>
-            </package>
-          </packages>
-        </osSpecific>
-        <osSpecific>
-          <osFamily>suse11,suse12</osFamily>
-          <packages>
-            <package>
-              <name>mysql-client</name>
-              <skipUpgrade>true</skipUpgrade>
-            </package>
-          </packages>
-        </osSpecific>
       </osSpecifics>
       <commandScript>
         <script>scripts/service_check.py</script>

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid.py b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid.py
index 0478d17..6ace5e3 100644
--- a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid.py
+++ b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid.py
@@ -16,8 +16,10 @@ See the License for the specific language governing permissions and
 limitations under the License.
 
 """
+import os
 from resource_management.libraries.resources.properties_file import PropertiesFile
 from resource_management.core.resources.system import Directory, Execute, File
+from resource_management.core.source import DownloadSource
 from resource_management.core.source import InlineTemplate
 from resource_management.libraries.functions import format
 from resource_management.libraries.resources import XmlConfig
@@ -146,6 +148,7 @@ def druid(upgrade_type=None, nodeType=None):
 
   # All druid nodes have dependency on hdfs_client
   ensure_hadoop_directories()
+  download_database_connector_if_needed()
   # Pull all required dependencies
   pulldeps()
 
@@ -235,6 +238,8 @@ def pulldeps():
   import params
   extensions_list = eval(params.druid_extensions)
   extensions_string = '{0}'.format("-c ".join(extensions_list))
+  repository_list = eval(params.druid_repo_list)
+  repository_string = '{0}'.format("-r ".join(repository_list))
   if len(extensions_list) > 0:
     try:
       # Make sure druid user has permissions to write dependencies
@@ -247,13 +252,44 @@ def pulldeps():
         create_parents=True,
         recursive_ownership=True,
       )
-      Execute(format(
+      pull_deps_command = format(
         "source {params.druid_conf_dir}/druid-env.sh ; java -classpath '{params.druid_home}/lib/*' -Ddruid.extensions.loadList=[] "
         "-Ddruid.extensions.directory={params.druid_extensions_dir} -Ddruid.extensions.hadoopDependenciesDir={params.druid_hadoop_dependencies_dir} "
-        "io.druid.cli.Main tools pull-deps -c {extensions_string} --no-default-hadoop"),
-        user=params.druid_user
-      )
+        "io.druid.cli.Main tools pull-deps -c {extensions_string} --no-default-hadoop")
+
+      if len(repository_list) > 0:
+        pull_deps_command = format("{pull_deps_command} -r {repository_string}")
+
+      Execute(pull_deps_command,
+              user=params.druid_user
+              )
       Logger.info(format("Pull Dependencies Complete"))
     except:
       show_logs(params.druid_log_dir, params.druid_user)
       raise
+
+
+def download_database_connector_if_needed():
+  """
+  Downloads the database connector to use when connecting to the metadata storage
+  """
+  import params
+  if params.metadata_storage_type != 'mysql' or not params.jdbc_driver_jar:
+    return
+
+  File(params.check_db_connection_jar,
+       content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}"))
+       )
+
+  target_jar_with_directory = params.connector_download_dir + os.path.sep + params.jdbc_driver_jar
+
+  if not os.path.exists(target_jar_with_directory):
+    File(params.downloaded_custom_connector,
+         content=DownloadSource(params.connector_curl_source))
+
+    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, target_jar_with_directory),
+            path=["/bin", "/usr/bin/"],
+            sudo=True)
+
+    File(target_jar_with_directory, owner=params.druid_user,
+         group=params.user_group)

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid_node.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid_node.py b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid_node.py
index 3b7f695..bdb6007 100644
--- a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid_node.py
+++ b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/druid_node.py
@@ -16,7 +16,10 @@ See the License for the specific language governing permissions and
 limitations under the License.
 
 """
+import os
+from resource_management.core import sudo
 from resource_management import Script
+from resource_management.core.logger import Logger
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.check_process_status import check_process_status
@@ -49,6 +52,27 @@ class DruidBase(Script):
     env.set_params(params)
     self.configure(env, upgrade_type=upgrade_type)
     daemon_cmd = get_daemon_cmd(params, self.nodeType, "start")
+    # Verify Database connection on Druid start
+    if params.metadata_storage_type == 'mysql':
+      if not params.jdbc_driver_jar or not os.path.isfile(params.connector_download_dir + os.path.sep + params.jdbc_driver_jar):
+        path_to_jdbc =  params.druid_extensions_dir + os.path.sep + "*"
+        error_message = "Error! Sorry, but we can't find jdbc driver for mysql.So, db connection check can fail." + \
+                        "Please run 'ambari-server setup --jdbc-db=mysql --jdbc-driver={path_to_jdbc} on server host.'"
+        Logger.error(error_message)
+      else:
+        path_to_jdbc = params.connector_download_dir + os.path.sep + params.jdbc_driver_jar
+      db_connection_check_command = format("{params.java8_home}/bin/java -cp {params.check_db_connection_jar}:{path_to_jdbc} org.apache.ambari.server.DBConnectionVerification '{params.metadata_storage_url}' {params.metadata_storage_user} {params.metadata_storage_password!p} com.mysql.jdbc.Driver")
+    else:
+      db_connection_check_command = None
+
+    if db_connection_check_command:
+      sudo.chmod(params.check_db_connection_jar, 0755)
+      Execute( db_connection_check_command,
+               tries=5,
+               try_sleep=10,
+               user=params.druid_user
+               )
+
     try:
       Execute(daemon_cmd,
               user=params.druid_user

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/params.py b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/params.py
index 00add3f..8292634 100644
--- a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/package/scripts/params.py
@@ -71,6 +71,7 @@ druid_user = config['configurations']['druid-env']['druid_user']
 druid_log_dir = config['configurations']['druid-env']['druid_log_dir']
 druid_classpath = config['configurations']['druid-env']['druid_classpath']
 druid_extensions = config['configurations']['druid-common']['druid.extensions.pullList']
+druid_repo_list = config['configurations']['druid-common']['druid.extensions.repositoryList']
 
 # status params
 druid_pid_dir = status_params.druid_pid_dir
@@ -89,6 +90,18 @@ logrotate_props = config['configurations']['druid-logrotate']['content']
 metadata_storage_user = config['configurations']['druid-common']['druid.metadata.storage.connector.user']
 metadata_storage_password = config['configurations']['druid-common']['druid.metadata.storage.connector.password']
 metadata_storage_db_name = config['configurations']['druid-common']['database_name']
+metadata_storage_db_name = config['configurations']['druid-common']['database_name']
+metadata_storage_type = config['configurations']['druid-common']['druid.metadata.storage.type']
+metadata_storage_url = config['configurations']['druid-common']['druid.metadata.storage.connector.connectURI']
+jdk_location = config['hostLevelParams']['jdk_location']
+if 'mysql' == metadata_storage_type:
+  jdbc_driver_jar = default("/hostLevelParams/custom_mysql_jdbc_name", None)
+  connector_curl_source = format("{jdk_location}/{jdbc_driver_jar}")
+  connector_download_dir=format("{druid_extensions_dir}/mysql-metadata-storage")
+  downloaded_custom_connector = format("{tmp_dir}/{jdbc_driver_jar}")
+
+check_db_connection_jar_name = "DBConnectionVerification.jar"
+check_db_connection_jar = format("/usr/lib/ambari-agent/{check_db_connection_jar_name}")
 
 # HDFS
 security_enabled = config['configurations']['cluster-env']['security_enabled']

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
index 9072dd0..ee56899 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
@@ -72,20 +72,16 @@ class HDP26StackAdvisor(HDP25StackAdvisor):
       metastore_hostname = services['configurations']["druid-common"]["properties"]["metastore_hostname"]
       database_type = services['configurations']["druid-common"]["properties"]["druid.metadata.storage.type"]
       metadata_storage_port = "1527"
-      mysql_extension_name = "io.druid.extensions:mysql-metadata-storage"
       mysql_module_name = "mysql-metadata-storage"
       postgres_module_name = "postgresql-metadata-storage"
       extensions_load_list = services['configurations']['druid-common']['properties']['druid.extensions.loadList']
-      extensions_pull_list = services['configurations']['druid-common']['properties']['druid.extensions.pullList']
       putDruidCommonProperty = self.putProperty(configurations, "druid-common", services)
 
-      extensions_pull_list = self.removeFromList(extensions_pull_list, mysql_extension_name)
       extensions_load_list = self.removeFromList(extensions_load_list, mysql_module_name)
       extensions_load_list = self.removeFromList(extensions_load_list, postgres_module_name)
 
       if database_type == 'mysql':
           metadata_storage_port = "3306"
-          extensions_pull_list = self.addToList(extensions_pull_list, mysql_extension_name)
           extensions_load_list = self.addToList(extensions_load_list, mysql_module_name)
 
       if database_type == 'postgres':
@@ -110,7 +106,6 @@ class HDP26StackAdvisor(HDP25StackAdvisor):
           extensions_load_list = self.addToList(extensions_load_list, "druid-kafka-indexing-service")
 
       putCommonProperty('druid.extensions.loadList', extensions_load_list)
-      putCommonProperty('druid.extensions.pullList', extensions_pull_list)
 
       # JVM Configs go to env properties
       putEnvProperty = self.putProperty(configurations, "druid-env", services)

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/test/python/stacks/2.6/DRUID/test_druid.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/DRUID/test_druid.py b/ambari-server/src/test/python/stacks/2.6/DRUID/test_druid.py
index 2988169..9c3353f 100644
--- a/ambari-server/src/test/python/stacks/2.6/DRUID/test_druid.py
+++ b/ambari-server/src/test/python/stacks/2.6/DRUID/test_druid.py
@@ -27,6 +27,7 @@ from resource_management.libraries import functions
 from resource_management.libraries.functions import format
 from resource_management.core.logger import Logger
 
+
 @patch("resource_management.libraries.Script.get_tmp_dir", new=MagicMock(return_value=('/var/lib/ambari-agent/tmp')))
 @patch.object(functions, "get_stack_version", new=MagicMock(return_value="2.0.0.0-1234"))
 class TestDruid(RMFTestCase):
@@ -62,6 +63,11 @@ class TestDruid(RMFTestCase):
                        target=RMFTestCase.TARGET_COMMON_SERVICES
                        )
     self.assert_configure_default('druid-overlord')
+    self.assertResourceCalled('Execute', format("/usr/jdk64/jdk1.7.0_45/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-overlord/extensions/* org.apache.ambari.server.DBConnectionVerification 'jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true' druid diurd com.mysql.jdbc.Driver"),
+                              user='druid',
+                              tries=5,
+                              try_sleep=10
+                              )
     self.assertResourceCalled('Execute', format('source /usr/hdp/current/druid-overlord/conf/druid-env.sh ; /usr/hdp/current/druid-overlord/bin/node.sh overlord start'),
                               user='druid'
                               )
@@ -103,6 +109,11 @@ class TestDruid(RMFTestCase):
                        target=RMFTestCase.TARGET_COMMON_SERVICES
                        )
     self.assert_configure_default('druid-coordinator')
+    self.assertResourceCalled('Execute', format("/usr/jdk64/jdk1.7.0_45/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-coordinator/extensions/* org.apache.ambari.server.DBConnectionVerification 'jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true' druid diurd com.mysql.jdbc.Driver"),
+                              user='druid',
+                              tries=5,
+                              try_sleep=10
+                              )
     self.assertResourceCalled('Execute', format('source /usr/hdp/current/druid-coordinator/conf/druid-env.sh ; /usr/hdp/current/druid-coordinator/bin/node.sh coordinator start'),
                               user='druid'
                               )
@@ -144,6 +155,11 @@ class TestDruid(RMFTestCase):
                        target=RMFTestCase.TARGET_COMMON_SERVICES
                        )
     self.assert_configure_default('druid-broker')
+    self.assertResourceCalled('Execute', format("/usr/jdk64/jdk1.7.0_45/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-broker/extensions/* org.apache.ambari.server.DBConnectionVerification 'jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true' druid diurd com.mysql.jdbc.Driver"),
+                              user='druid',
+                              tries=5,
+                              try_sleep=10
+                              )
     self.assertResourceCalled('Execute', format('source /usr/hdp/current/druid-broker/conf/druid-env.sh ; /usr/hdp/current/druid-broker/bin/node.sh broker start'),
                               user='druid'
                               )
@@ -185,6 +201,11 @@ class TestDruid(RMFTestCase):
                        target=RMFTestCase.TARGET_COMMON_SERVICES
                        )
     self.assert_configure_default('druid-router')
+    self.assertResourceCalled('Execute', format("/usr/jdk64/jdk1.7.0_45/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-router/extensions/* org.apache.ambari.server.DBConnectionVerification 'jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true' druid diurd com.mysql.jdbc.Driver"),
+                              user='druid',
+                              tries=5,
+                              try_sleep=10
+                              )
     self.assertResourceCalled('Execute', format('source /usr/hdp/current/druid-router/conf/druid-env.sh ; /usr/hdp/current/druid-router/bin/node.sh router start'),
                               user='druid'
                               )
@@ -226,6 +247,11 @@ class TestDruid(RMFTestCase):
                        target=RMFTestCase.TARGET_COMMON_SERVICES
                        )
     self.assert_configure_default('druid-historical')
+    self.assertResourceCalled('Execute', format("/usr/jdk64/jdk1.7.0_45/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-historical/extensions/* org.apache.ambari.server.DBConnectionVerification 'jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true' druid diurd com.mysql.jdbc.Driver"),
+                              user='druid',
+                              tries=5,
+                              try_sleep=10
+                              )
     self.assertResourceCalled('Execute', format('source /usr/hdp/current/druid-historical/conf/druid-env.sh ; /usr/hdp/current/druid-historical/bin/node.sh historical start'),
                               user='druid'
                               )
@@ -267,6 +293,11 @@ class TestDruid(RMFTestCase):
                        target=RMFTestCase.TARGET_COMMON_SERVICES
                        )
     self.assert_configure_default('druid-middlemanager')
+    self.assertResourceCalled('Execute', format("/usr/jdk64/jdk1.7.0_45/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-middlemanager/extensions/* org.apache.ambari.server.DBConnectionVerification 'jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true' druid diurd com.mysql.jdbc.Driver"),
+                              user='druid',
+                              tries=5,
+                              try_sleep=10
+                              )
     self.assertResourceCalled('Execute', format('source /usr/hdp/current/druid-middlemanager/conf/druid-env.sh ; /usr/hdp/current/druid-middlemanager/bin/node.sh middleManager start'),
                               user='druid'
                               )
@@ -617,6 +648,24 @@ class TestDruid(RMFTestCase):
                               mode=0755
                               )
 
+    self.assertResourceCalled('File', format("/usr/lib/ambari-agent/DBConnectionVerification.jar"),
+                              content= DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar')
+                              )
+
+    self.assertResourceCalled('File', format("/tmp/mysql-connector-java.jar"),
+                              content= DownloadSource('http://c6401.ambari.apache.org:8080/resources//mysql-connector-java.jar')
+                              )
+    self.assertResourceCalled('Execute',
+                              ('cp', '--remove-destination', '/tmp/mysql-connector-java.jar', format('/usr/hdp/current/{role}/extensions/mysql-metadata-storage/mysql-connector-java.jar')),
+                              path =  ['/bin', '/usr/bin/'],
+                              sudo =  True
+                              )
+
+    self.assertResourceCalled('File', format("/usr/hdp/current/{role}/extensions/mysql-metadata-storage/mysql-connector-java.jar"),
+                              owner = "druid",
+                              group = "hadoop"
+                              )
+
     self.assertResourceCalled('Directory', format('/usr/hdp/current/{role}/extensions'),
                               mode=0755,
                               cd_access='a',
@@ -635,7 +684,7 @@ class TestDruid(RMFTestCase):
                               recursive_ownership=True
                               )
 
-    self.assertResourceCalled('Execute', format("source /usr/hdp/current/{role}/conf/druid-env.sh ; java -classpath '/usr/hdp/current/{role}/lib/*' -Ddruid.extensions.loadList=[] -Ddruid.extensions.directory=/usr/hdp/current/{role}/extensions -Ddruid.extensions.hadoopDependenciesDir=/usr/hdp/current/{role}/hadoop-dependencies io.druid.cli.Main tools pull-deps -c mysql-metadata-storage --no-default-hadoop"),
+    self.assertResourceCalled('Execute', format("source /usr/hdp/current/{role}/conf/druid-env.sh ; java -classpath '/usr/hdp/current/{role}/lib/*' -Ddruid.extensions.loadList=[] -Ddruid.extensions.directory=/usr/hdp/current/{role}/extensions -Ddruid.extensions.hadoopDependenciesDir=/usr/hdp/current/{role}/hadoop-dependencies io.druid.cli.Main tools pull-deps -c custom-druid-extension --no-default-hadoop -r http://custom-mvn-repo/public/release"),
                               user='druid'
                               )
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
index 074d87e..c06bebb 100644
--- a/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
@@ -164,8 +164,7 @@ class TestHDP26StackAdvisor(TestCase):
             "database_name": "druid",
             "metastore_hostname": "c6401.ambari.apache.org",
             "druid.metadata.storage.type": "mysql",
-            "druid.extensions.loadList": "[\"postgresql-metadata-storage\"]",
-            "druid.extensions.pullList": "[]"
+            "druid.extensions.loadList": "[\"postgresql-metadata-storage\"]"
           }
         }
       }
@@ -195,8 +194,7 @@ class TestHDP26StackAdvisor(TestCase):
                         'druid-common': {'properties': {'druid.extensions.loadList': '["mysql-metadata-storage"]',
                                                         'druid.metadata.storage.connector.port': '3306',
                                                         'druid.metadata.storage.connector.connectURI': 'jdbc:mysql://c6401.ambari.apache.org:3306/druid?createDatabaseIfNotExist=true',
-                                                        'druid.zk.service.host': '',
-                                                        'druid.extensions.pullList': '["io.druid.extensions:mysql-metadata-storage"]'}},
+                                                        'druid.zk.service.host': ''}},
                         'druid-env': {'properties': {},
                                       'property_attributes': {'druid.coordinator.jvm.heap.memory': {'maximum': '49152'},
                                                               'druid.overlord.jvm.heap.memory': {'maximum': '49152'},
@@ -304,8 +302,7 @@ class TestHDP26StackAdvisor(TestCase):
                         'druid-common': {'properties': {'druid.extensions.loadList': '["postgresql-metadata-storage"]',
                                                         'druid.metadata.storage.connector.port': '5432',
                                                         'druid.metadata.storage.connector.connectURI': 'jdbc:postgresql://c6401.ambari.apache.org:5432/druid',
-                                                        'druid.zk.service.host': '',
-                                                        'druid.extensions.pullList': '[]'}},
+                                                        'druid.zk.service.host': ''}},
                         'druid-env': {'properties': {},
                                       'property_attributes': {'druid.coordinator.jvm.heap.memory': {'maximum': '49152'},
                                                               'druid.overlord.jvm.heap.memory': {'maximum': '49152'},
@@ -413,8 +410,7 @@ class TestHDP26StackAdvisor(TestCase):
                         'druid-common': {'properties': {'druid.extensions.loadList': '[]',
                                                         'druid.metadata.storage.connector.port': '1527',
                                                         'druid.metadata.storage.connector.connectURI': 'jdbc:derby://c6401.ambari.apache.org:1527/druid;create=true',
-                                                        'druid.zk.service.host': '',
-                                                        'druid.extensions.pullList': '[]'}},
+                                                        'druid.zk.service.host': ''}},
                         'druid-env': {'properties': {},
                                       'property_attributes': {'druid.coordinator.jvm.heap.memory': {'maximum': '49152'},
                                                               'druid.overlord.jvm.heap.memory': {'maximum': '49152'},
@@ -608,8 +604,8 @@ class TestHDP26StackAdvisor(TestCase):
                         'druid-common': {'properties': {'druid.extensions.loadList': '[]',
                                                         'druid.metadata.storage.connector.port': '1527',
                                                         'druid.metadata.storage.connector.connectURI': 'jdbc:derby://c6401.ambari.apache.org:1527/druid;create=true',
-                                                        'druid.zk.service.host': '',
-                                                        'druid.extensions.pullList': '[]'}},
+                                                        'druid.zk.service.host': ''
+                                                        }},
                         'druid-env': {'properties': {},
                                       'property_attributes': {'druid.coordinator.jvm.heap.memory': {'maximum': '49152'},
                                                               'druid.overlord.jvm.heap.memory': {'maximum': '49152'},

http://git-wip-us.apache.org/repos/asf/ambari/blob/c63d6927/ambari-server/src/test/python/stacks/2.6/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/configs/default.json b/ambari-server/src/test/python/stacks/2.6/configs/default.json
index 8b90e48..c3f1d55 100644
--- a/ambari-server/src/test/python/stacks/2.6/configs/default.json
+++ b/ambari-server/src/test/python/stacks/2.6/configs/default.json
@@ -16,7 +16,8 @@
     "jdk_name": "jdk-7u67-linux-x64.tar.gz",
     "ambari_db_rca_username": "mapred",
     "java_home": "/usr/jdk64/jdk1.7.0_45",
-    "db_name": "ambari"
+    "db_name": "ambari",
+    "custom_mysql_jdbc_name": "mysql-connector-java.jar"
   },
   "commandType": "EXECUTION_COMMAND",
   "roleParams": {},
@@ -392,11 +393,15 @@
     },
     "druid-common" : {
       "druid.metadata.storage.type" : "mysql",
+      "druid.metadata.storage.connector.connectURI" : "jdbc:mysql://my-db-host:3306/druid?createDatabaseIfNotExist=true",
+      "druid.metadata.storage.connector.user" : "druid",
+      "druid.metadata.storage.connector.password" : "diurd",
       "druid.storage.type" : "hdfs",
       "druid.storage.storageDirectory" : "/user/druid/data",
       "druid.indexer.logs.type": "hdfs",
       "druid.indexer.logs.directory": "/user/druid/logs",
-      "druid.extensions.pullList": "[\"mysql-metadata-storage\"]",
+      "druid.extensions.pullList": "[\"custom-druid-extension\"]",
+      "druid.extensions.repositoryList": "[\"http://custom-mvn-repo/public/release\"]",
       "druid.extensions.loadList": "[\"mysql-metadata-storage\", \"druid-datasketches\"]"
     },
     "druid-historical" : {