Browse Source

HUE-8330 [core] Support a pure multi cluster setup without any app configuration

e.g.

TODO:
Unblacklist Hive Editor if we have some Hive multi clusters

[[clusters]]

    [[[nightlyc6]]]
      name=nightly c6
      server_host=nightly6x-unsecure-1.gce.cloudera.com

    [[[selfserviceanalytics]]]
      name=self service analytics
      server_host=self-service-analytics-1.gce.cloudera.com
Romain Rigaux 7 năm trước cách đây
mục cha
commit
4f76be7ff7

+ 2 - 2
apps/metastore/src/metastore/static/metastore/js/metastore.model.js

@@ -36,8 +36,8 @@ var MetastoreDatabase = (function () {
     self.loadingTablePopularity = ko.observable(false);
 
 
-    self.contexts = ko.observableArray(['Default', 'nightlyc6', 'selfserviceanalytics']);
-    self.context = ko.observable('Default');
+    self.contexts = ko.observableArray(['default', 'nightlyc6', 'selfserviceanalytics']);
+    self.context = ko.observable('default');
     self.context.subscribe(function(newVal) {
       window.context = newVal;
     });

+ 4 - 2
desktop/core/src/desktop/api2.py

@@ -80,6 +80,8 @@ def get_config(request):
 def get_context(request, app, engine):
   context = {}
 
+  clusters = get_clusters(request.user).values()
+
   if app == 'editor':
     if engine == 'hive':
       context['editor'] = {
@@ -88,7 +90,7 @@ def get_context(request, app, engine):
             {
               'id': cluster['id'],
               'name': cluster['name']
-            } for cluster in get_clusters().values()
+            } for cluster in clusters
           ]
         }
       }
@@ -100,7 +102,7 @@ def get_context(request, app, engine):
             {
               'id': cluster['id'],
               'name': cluster['name']
-            } for cluster in get_clusters().values()
+            } for cluster in clusters
           ]
         }
       }

+ 27 - 15
desktop/core/src/desktop/conf.py

@@ -1585,21 +1585,33 @@ DISABLE_HUE_3 = Config( # To remove in Hue 5
 )
 
 
-def get_clusters():
-  if CLUSTERS.get():
-    cluster_config = CLUSTERS.get()
-    clusters = OrderedDict([
-      (i, {
-        'id': i,
-        'name': cluster_config[i].NAME.get() or i,
-        'type': cluster_config[i].TYPE.get(),
-        'server_host': cluster_config[i].SERVER_HOST.get()
-      }) for i in cluster_config
-    ])
-  else:
-    clusters = OrderedDict([('Default', {'name': 'Default', 'type': 'ini'})])
+def get_clusters(user):
+  # Get additional remote multi clusters
+  cluster_config = CLUSTERS.get()
+  clusters = [
+    (i, {
+      'id': i,
+      'name': cluster_config[i].NAME.get() or i,
+      'type': cluster_config[i].TYPE.get(),
+      'server_host': cluster_config[i].SERVER_HOST.get()
+    }) for i in cluster_config
+  ]
+
+  # Get core standalone config if there
+  apps = appmanager.get_apps_dict(user)
+  if 'beeswax' in apps:
+    from beeswax.conf import HIVE_SERVER_HOST
+    clusters.insert(0,
+      (CLUSTER_ID.get(), {
+        'id': CLUSTER_ID.get(),
+        'name': CLUSTER_ID.get(),
+        'type': 'single',
+        'server_host': HIVE_SERVER_HOST.get()
+        }
+      )
+    )
 
-  return clusters
+  return OrderedDict(clusters)
 
 
 CLUSTERS = UnspecifiedConfigSection(
@@ -1616,7 +1628,7 @@ CLUSTERS = UnspecifiedConfigSection(
       ),
       TYPE=Config(
           "type",
-          help=_("Type of cluster, e.g. direct, local ini, CM API, Dataeng, Arcus, BigQuery, Presto."),
+          help=_("Type of cluster, e.g. single, direct, local ini, CM API, Dataeng, Arcus, BigQuery, Presto."),
           default='direct',
           type=str,
       ),

+ 3 - 3
desktop/core/src/desktop/models.py

@@ -49,7 +49,7 @@ from kafka.conf import has_kafka
 from notebook.conf import SHOW_NOTEBOOKS, get_ordered_interpreters
 
 from desktop import appmanager
-from desktop.conf import get_clusters
+from desktop.conf import get_clusters, CLUSTER_ID
 from desktop.lib.i18n import force_unicode
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.paths import get_run_root
@@ -1912,8 +1912,8 @@ class Cluster():
 
   def __init__(self, user):
     self.user = user
-    self.clusters = get_clusters()
-    self.data = self.clusters['Default']
+    self.clusters = get_clusters(user)
+    self.data = self.clusters[CLUSTER_ID.get()]
 
   def get_type(self):
     return self.data['type']

+ 1 - 1
desktop/core/src/desktop/views.py

@@ -73,7 +73,7 @@ def is_alive(request):
 def hue(request):
   apps = appmanager.get_apps_dict(request.user)
   current_app, other_apps, apps_list = _get_apps(request.user, '')
-  clusters = get_clusters().values()
+  clusters = get_clusters(request.user).values()
 
   return render('hue.mako', request, {
     'apps': apps,