Browse Source

AMBARI-13377. External URL (policymgr_external_ur) value in Ranger service should be recommended by stack advisor (dlysnichenko)

Lisnichenko Dmitro 10 years ago
parent
commit
9992147b04

+ 35 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py

@@ -266,6 +266,41 @@ class HDP206StackAdvisor(DefaultStackAdvisor):
       rangerSqlConnectorProperty = ranger_sql_connector_dict.get(rangerDbFlavor, ranger_sql_connector_dict['MYSQL'])
       putRangerAdminProperty('SQL_CONNECTOR_JAR', rangerSqlConnectorProperty)
 
+    # Build policymgr_external_url
+    protocol = 'http'
+    ranger_admin_host = 'localhost'
+    port = '6080'
+
+    if 'ranger-site' in services['configurations'] and 'http.enabled' in services['configurations']['ranger-site']['properties'] \
+      and services['configurations']['ranger-site']['properties']['http.enabled'].lower() == 'false':
+      # HTTPS protocol is used
+      protocol = 'https'
+      # In HDP-2.3 port stored in ranger-admin-site ranger.service.https.port
+      if 'ranger-admin-site' in services['configurations'] and \
+          'ranger.service.https.port' in services['configurations']['ranger-admin-site']['properties']:
+        port = services['configurations']['ranger-admin-site']['properties']['ranger.service.https.port']
+      # In HDP-2.2 port stored in ranger-site https.service.port
+      elif 'ranger-site' in services['configurations'] and \
+          'https.service.port' in services['configurations']['ranger-site']['properties']:
+        port = services['configurations']['ranger-site']['properties']['https.service.port']
+    else:
+      # HTTP protocol is used
+      # In HDP-2.3 port stored in ranger-admin-site ranger.service.http.port
+      if 'ranger-admin-site' in services['configurations'] and \
+          'ranger.service.http.port' in services['configurations']['ranger-admin-site']['properties']:
+        port = services['configurations']['ranger-admin-site']['properties']['ranger.service.http.port']
+      # In HDP-2.2 port stored in ranger-site http.service.port
+      elif 'ranger-site' in services['configurations'] and \
+          'http.service.port' in services['configurations']['ranger-site']['properties']:
+        port = services['configurations']['ranger-site']['properties']['http.service.port']
+
+    ranger_admin_hosts = self.getComponentHostNames(services, "RANGER", "RANGER_ADMIN")
+    if ranger_admin_hosts:
+      ranger_admin_host = ranger_admin_hosts[0]
+
+    policymgr_external_url = "%s://%s:%s" % (protocol, ranger_admin_host, port)
+    putRangerAdminProperty('policymgr_external_url', policymgr_external_url)
+
 
   def getAmsMemoryRecommendation(self, services, hosts):
     # MB per sink in hbase heapsize

+ 80 - 0
ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py

@@ -676,6 +676,86 @@ class TestHDP206StackAdvisor(TestCase):
     self.stackAdvisor.recommendHbaseConfigurations(configurations, clusterData, services, None)
     self.assertEquals(configurations, expected)
 
+
+  def test_recommendRangerConfigurations(self):
+    clusterData = {}
+    # Recommend for not existing DB_FLAVOR and http enabled, HDP-2.3
+    services = {
+      "services":  [
+        {
+          "StackServices": {
+            "service_name": "RANGER"
+          },
+          "components": [
+            {
+              "StackServiceComponents": {
+                "component_name": "RANGER_ADMIN",
+                "hostnames": ["host1"]
+              }
+            }
+          ]
+        },
+      ],
+      "configurations": {
+        "admin-properties": {
+          "properties": {
+            "DB_FLAVOR": "NOT_EXISTING",
+            }
+        },
+        "ranger-admin-site": {
+          "properties": {
+            "ranger.service.http.port": "7777",
+            }
+        },
+        "ranger-site": {
+          "properties": {
+            "http.enabled": "true",
+            }
+        }
+      }
+    }
+    expected = {
+      "admin-properties": {
+        "properties": {
+          "SQL_CONNECTOR_JAR": "/usr/share/java/mysql-connector-java.jar",
+          "policymgr_external_url": "http://host1:7777",
+        }
+      },
+    }
+    recommendedConfigurations = {}
+    self.stackAdvisor.recommendRangerConfigurations(recommendedConfigurations, clusterData, services, None)
+    self.assertEquals(recommendedConfigurations, expected)
+
+    # Recommend for DB_FLAVOR ORACLE and https enabled, HDP-2.2
+    configurations = {
+      "admin-properties": {
+        "properties": {
+          "DB_FLAVOR": "ORACLE",
+          }
+      },
+      "ranger-site": {
+        "properties": {
+          "http.enabled": "false",
+          "https.service.port": "8888",
+          }
+      }
+    }
+    services['configurations'] = configurations
+    expected = {
+      "admin-properties": {
+        "properties": {
+          "SQL_CONNECTOR_JAR": "/usr/share/java/ojdbc6.jar",
+          "policymgr_external_url": "https://host1:8888",
+          }
+      },
+    }
+
+    recommendedConfigurations = {}
+    self.stackAdvisor.recommendRangerConfigurations(recommendedConfigurations, clusterData, services, None)
+    self.assertEquals(recommendedConfigurations, expected)
+
+
+
   def test_recommendHDFSConfigurations(self):
     configurations = {
       "hadoop-env": {