Переглянути джерело

AMBARI-13329. Test connection button for Ranger privileged user should not connect to ranger database. (jaimin)

Jaimin Jetly 9 роки тому
батько
коміт
828c7fa8a8

+ 20 - 0
ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/configuration/ranger-env.xml

@@ -75,5 +75,25 @@
     </value-attributes>
   </property>
 
+  <property>
+    <name>ranger_privelege_user_jdbc_url</name>
+    <display-name>JDBC connect string for root user</display-name>
+    <description>JDBC connect string - auto populated based on other values. This is to be used by root user</description>
+    <value>jdbc:mysql://localhost</value>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <depends-on>
+      <property>
+        <type>admin-properties</type>
+        <name>DB_FLAVOR</name>
+      </property>
+      <property>
+        <type>admin-properties</type>
+        <name>db_host</name>
+      </property>
+    </depends-on>
+  </property>
+
 
 </configuration>

+ 29 - 35
ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/themes/theme.json

@@ -18,10 +18,10 @@
                   "display-name": "Ranger Admin",
                   "row-index": "0",
                   "column-index": "0",
-                  "row-span": "4",
+                  "row-span": "3",
                   "column-span": "2",
                   "section-columns": "2",
-                  "section-rows": "4",
+                  "section-rows": "3",
                   "subsections": [
                     {
                       "name": "subsection-ranger-db-row1-col1",
@@ -38,30 +38,15 @@
                       "column-span": "1"
                     },
                     {
-                      "name": "subsection-ranger-db-row2-col1",
+                      "name": "subsection-ranger-db-row2",
                       "row-index": "1",
                       "column-index": "0",
                       "row-span": "1",
-                      "column-span": "1"
-                    },
-                    {
-                      "name": "subsection-ranger-db-row2-col2",
-                      "row-index": "1",
-                      "column-index": "1",
-                      "row-span": "1",
-                      "column-span": "1",
-                      "left-vertical-splitter": false
-                    },
-                    {
-                      "name": "subsection-ranger-db-row3",
-                      "row-index": "2",
-                      "column-index": "0",
-                      "row-span": "1",
                       "column-span": "2"
                     },
                     {
-                      "name": "subsection-ranger-db-row4-col1",
-                      "row-index": "3",
+                      "name": "subsection-ranger-db-row3-col1",
+                      "row-index": "2",
                       "column-index": "0",
                       "row-span": "1",
                       "column-span": "1",
@@ -85,8 +70,8 @@
                       ]
                     },
                     {
-                      "name": "subsection-ranger-db-row4-col2",
-                      "row-index": "3",
+                      "name": "subsection-ranger-db-row3-col2",
+                      "row-index": "2",
                       "column-index": "1",
                       "row-span": "1",
                       "column-span": "1",
@@ -107,8 +92,7 @@
                             }
                           }
                         }
-                      ],
-                      "left-vertical-splitter": false
+                      ]
                     }
                   ]
                 }
@@ -251,6 +235,10 @@
           "config": "admin-properties/db_name",
           "subsection-name": "subsection-ranger-db-row1-col1"
         },
+        {
+          "config": "admin-properties/db_user",
+          "subsection-name": "subsection-ranger-db-row1-col1"
+        },
         {
           "config": "ranger-admin-site/ranger.jpa.jdbc.url",
           "subsection-name": "subsection-ranger-db-row1-col1"
@@ -263,17 +251,13 @@
           "config": "ranger-admin-site/ranger.jpa.jdbc.driver",
           "subsection-name": "subsection-ranger-db-row1-col2"
         },
-        {
-          "config": "admin-properties/db_user",
-          "subsection-name": "subsection-ranger-db-row2-col1"
-        },
         {
           "config": "admin-properties/db_password",
-          "subsection-name": "subsection-ranger-db-row2-col2"
+          "subsection-name": "subsection-ranger-db-row1-col2"
         },
         {
           "config": "ranger-env/test_db_connection",
-          "subsection-name": "subsection-ranger-db-row2-col2",
+          "subsection-name": "subsection-ranger-db-row2",
           "property_value_attributes": {
             "ui_only_property": true
           },
@@ -298,19 +282,23 @@
         },
         {
           "config": "ranger-env/create_db_dbuser",
-          "subsection-name": "subsection-ranger-db-row3"
+          "subsection-name": "subsection-ranger-db-row2"
         },
         {
           "config": "admin-properties/db_root_user",
-          "subsection-name": "subsection-ranger-db-row4-col1"
+          "subsection-name": "subsection-ranger-db-row3-col1"
+        },
+        {
+          "config": "ranger-env/ranger_privelege_user_jdbc_url",
+          "subsection-name": "subsection-ranger-db-row3-col1"
         },
         {
           "config": "admin-properties/db_root_password",
-          "subsection-name": "subsection-ranger-db-row4-col2"
+          "subsection-name": "subsection-ranger-db-row3-col2"
         },
         {
           "config": "ranger-env/test_root_db_connection",
-          "subsection-name": "subsection-ranger-db-row4-col2",
+          "subsection-name": "subsection-ranger-db-row3-col1",
           "property_value_attributes": {
             "ui_only_property": true
           }
@@ -826,6 +814,12 @@
           "type": "toggle"
         }
       },
+      {
+        "config": "ranger-env/ranger_privelege_user_jdbc_url",
+        "widget": {
+          "type": "text-field"
+        }
+      },
       {
         "config": "admin-properties/db_root_user",
         "widget": {
@@ -845,7 +839,7 @@
           "display-name": "Test Connection",
           "required-properties": {
             "jdbc.driver.class": "ranger-admin-site/ranger.jpa.jdbc.driver",
-            "jdbc.driver.url": "ranger-admin-site/ranger.jpa.jdbc.url",
+            "jdbc.driver.url": "ranger-env/ranger_privelege_user_jdbc_url",
             "db.connection.source.host": "ranger-site/ranger_admin_hosts",
             "db.type": "admin-properties/DB_FLAVOR",
             "db.connection.destination.host": "admin-properties/db_host",

+ 19 - 2
ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py

@@ -255,6 +255,7 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
   def recommendRangerConfigurations(self, configurations, clusterData, services, hosts):
     super(HDP23StackAdvisor, self).recommendRangerConfigurations(configurations, clusterData, services, hosts)
     putRangerAdminProperty = self.putProperty(configurations, "ranger-admin-site", services)
+    putRangerEnvProperty = self.putProperty(configurations, "ranger-env", services)
 
     if 'admin-properties' in services['configurations'] and ('DB_FLAVOR' in services['configurations']['admin-properties']['properties'])\
       and ('db_host' in services['configurations']['admin-properties']['properties']) and ('db_name' in services['configurations']['admin-properties']['properties']):
@@ -262,17 +263,33 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
       rangerDbFlavor = services['configurations']["admin-properties"]["properties"]["DB_FLAVOR"]
       rangerDbHost =   services['configurations']["admin-properties"]["properties"]["db_host"]
       rangerDbName =   services['configurations']["admin-properties"]["properties"]["db_name"]
-      ranger_db_driver_dict = {
+      ranger_db_url_dict = {
         'MYSQL': {'ranger.jpa.jdbc.driver': 'com.mysql.jdbc.Driver', 'ranger.jpa.jdbc.url': 'jdbc:mysql://' + rangerDbHost + '/' + rangerDbName},
         'ORACLE': {'ranger.jpa.jdbc.driver': 'oracle.jdbc.driver.OracleDriver', 'ranger.jpa.jdbc.url': 'jdbc:oracle:thin:@/' + rangerDbHost + ':1521/' + rangerDbName},
         'POSTGRES': {'ranger.jpa.jdbc.driver': 'org.postgresql.Driver', 'ranger.jpa.jdbc.url': 'jdbc:postgresql://' + rangerDbHost + ':5432/' + rangerDbName},
         'MSSQL': {'ranger.jpa.jdbc.driver': 'com.microsoft.sqlserver.jdbc.SQLServerDriver', 'ranger.jpa.jdbc.url': 'jdbc:sqlserver://' + rangerDbHost + ';databaseName=' + rangerDbName},
         'SQLA': {'ranger.jpa.jdbc.driver': 'sap.jdbc4.sqlanywhere.IDriver', 'ranger.jpa.jdbc.url': 'jdbc:sqlanywhere:host=' + rangerDbHost + ';database=' + rangerDbName}
       }
-      rangerDbProperties = ranger_db_driver_dict.get(rangerDbFlavor, ranger_db_driver_dict['MYSQL'])
+      rangerDbProperties = ranger_db_url_dict.get(rangerDbFlavor, ranger_db_url_dict['MYSQL'])
       for key in rangerDbProperties:
         putRangerAdminProperty(key, rangerDbProperties.get(key))
 
+      if 'admin-properties' in services['configurations'] and ('DB_FLAVOR' in services['configurations']['admin-properties']['properties']) \
+        and ('db_host' in services['configurations']['admin-properties']['properties']):
+
+        rangerDbFlavor = services['configurations']["admin-properties"]["properties"]["DB_FLAVOR"]
+        rangerDbHost =   services['configurations']["admin-properties"]["properties"]["db_host"]
+        ranger_db_privelege_url_dict = {
+          'MYSQL': {'ranger_privelege_user_jdbc_url': 'jdbc:mysql://' + rangerDbHost},
+          'ORACLE': {'ranger_privelege_user_jdbc_url': 'jdbc:oracle:thin:@/' + rangerDbHost + ':1521'},
+          'POSTGRES': {'ranger_privelege_user_jdbc_url': 'jdbc:postgresql://' + rangerDbHost + ':5432'},
+          'MSSQL': {'ranger_privelege_user_jdbc_url': 'jdbc:sqlserver://' + rangerDbHost + ';'},
+          'SQLA': {'ranger_privelege_user_jdbc_url': 'jdbc:sqlanywhere:host=' + rangerDbHost + ';'}
+        }
+        rangerPrivelegeDbProperties = ranger_db_privelege_url_dict.get(rangerDbFlavor, ranger_db_privelege_url_dict['MYSQL'])
+        for key in rangerPrivelegeDbProperties:
+          putRangerEnvProperty(key, rangerPrivelegeDbProperties.get(key))
+
   def getServiceConfigurationValidators(self):
       parentValidators = super(HDP23StackAdvisor, self).getServiceConfigurationValidators()
       childValidators = {