Przeglądaj źródła

HUE-1803 [oozie] Support global configuration

Workflow global properties are split in two parts:
  - regular properties
  - config
Romain Rigaux 12 lat temu
rodzic
commit
1db86d3076

+ 28 - 1
apps/oozie/src/oozie/models.py

@@ -71,6 +71,8 @@ DEFAULT_SLA = [
     {'key': 'notification-msg', 'value': ''},
     {'key': 'upstream-apps', 'value': ''},
 ]
+DEFAULT_GLOBAL_PROPERTIES = [{}]
+DEFAULT_GLOBAL_CONFIG = [{}]
 
 class JobManager(models.Manager):
 
@@ -222,8 +224,13 @@ class Job(models.Model):
   @property
   def data_dict(self): 
     data_python = json.loads(self.data)
-    if 'sla' not in data_python: # backward compatibility
+    # Backward compatibility
+    if 'sla' not in data_python:
       data_python['sla'] = copy.deepcopy(DEFAULT_SLA)
+    if 'global_properties' not in data_python:
+      data_python['global_properties'] = DEFAULT_GLOBAL_PROPERTIES       
+    if 'global_config' not in data_python:
+      data_python['global_config'] = DEFAULT_GLOBAL_CONFIG     
     return data_python 
 
   @property
@@ -244,6 +251,26 @@ class Job(models.Model):
   def sla_enabled(self):
     return self.sla[0]['value'] # #1 is enabled
 
+  @property
+  def global_properties(self):
+    return self.data_dict['global_properties']
+
+  @global_properties.setter
+  def global_properties(self, global_properties): 
+    data_ = self.data_dict
+    data_['global_properties'] = global_properties
+    self.data = json.dumps(data_)
+
+  @property
+  def global_config(self):
+    return self.data_dict['global_config']
+
+  @global_config.setter
+  def global_config(self, global_config): 
+    data_ = self.data_dict
+    data_['global_config'] = global_config
+    self.data = json.dumps(data_)
+
 
 class WorkflowManager(models.Manager):
   SCHEMA_VERSION = {

+ 30 - 0
apps/oozie/src/oozie/templates/utils.inc.mako

@@ -278,6 +278,36 @@
 </%def>
 
 
+<%def name="globalPropertiesForm()">
+  <div data-bind="foreach: { 'data': globalProperties }">
+    <div class="controls">
+      <div class="span3">
+        <span></span>
+      </div>
+      <div class="span9">
+        <input type="text" data-bind="value: key" class="span6">
+        <input type="text" data-bind="value: value" class="span6">
+      </div>
+    </div>
+  </div>
+</%def>
+
+
+<%def name="globalConfigForm()">
+  <div data-bind="foreach: { 'data': globalConfig }">
+    <div class="controls">
+      <div class="span3">
+        <span></span>
+      </div>
+      <div class="span9">
+        <input type="text" data-bind="value: key" class="span6">
+        <input type="text" data-bind="value: value" class="span6">
+      </div>
+    </div>
+  </div>
+</%def>
+
+
 ## Would be nice include it in slaForm() somehow
 <%def name="slaGlobal()">
   var SLA_TEXT = {

+ 8 - 3
apps/oozie/static/js/workflow.js

@@ -432,9 +432,16 @@ var WorkflowModule = function($, NodeModelChooser, Node, ForkNode, DecisionNode,
     self.read_only = ko.observable( options.read_only || false );
     self.new_node = ko.observable();
 
+    // Create fields from the generic data field
     self.sla = ko.computed(function() {
       return self.data.sla();
     });
+//    self.globalProperties = ko.computed(function() {
+//        return self.data.globalProperties();
+//      });     
+//    self.globalConfig = ko.computed(function() {
+//      return self.data.globalConfig();
+//    });
 
     self.url = ko.computed(function() {
       return '/oozie/workflows/' + self.id();
@@ -606,9 +613,7 @@ var WorkflowModule = function($, NodeModelChooser, Node, ForkNode, DecisionNode,
         nodes.push(model);
       });
       data['nodes'] = nodes;
-      
-      //data['sla'] = self.sla;
-      
+            
       return JSON.stringify(data);
     },