Browse Source

[oozie] Add file to Pig action

Romain Rigaux 11 years ago
parent
commit
0035898d07

+ 4 - 0
apps/oozie/src/oozie/models2.py

@@ -94,6 +94,10 @@ class Workflow():
     
     if self.document is not None:
       _data['workflow']['id'] = self.document.id
+      _data['workflow']['dependencies'] = self.document.dependencies
+    else:
+      _data['workflow']['dependencies'] = []
+
     if 'properties' not in _data['workflow']:
       _data['workflow']['properties'] = {}
       

+ 1 - 1
apps/oozie/src/oozie/templates/editor/gen2/workflow-common.xml.mako

@@ -59,7 +59,7 @@
 <%def name="distributed_cache(files, archives)">
     % for f in files:
         % if f:
-            <file>${ filelink(f) }</file>
+            <file>${ filelink(f['value']) }</file>
         % endif
     % endfor
     % for a in archives:

+ 19 - 7
apps/oozie/src/oozie/templates/editor/workflow_editor.mako

@@ -54,7 +54,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user) | n,unicode }
                     options: {'start': function(event, ui){lastWindowScrollPosition = $(window).scrollTop();$('.card-body').slideUp('fast');},
                               'stop': function(event, ui){$('.card-body').slideDown('fast', function(){$(window).scrollTop(lastWindowScrollPosition)});}}}"
          title="${_('MapReduce job')}" rel="tooltip" data-placement="top">
-         <a class="draggable-icon"><i class="fa fa-file-code-o"></i></a>
+         <a class="draggable-icon"><i class="fa fa-files-o"></i></a>
     </div>
 
     <div data-bind="css: { 'draggable-widget': true },
@@ -219,7 +219,7 @@ ${ dashboard.layout_skeleton() }
     <div>
       <ul class="nav nav-tabs">
         <li class="active"><a href="#action" data-toggle="tab">${ _('Pig') }</a></li>
-        <li><a href="#files" data-toggle="tab">${ _('Files') }</a></li>
+        <li><a href="#properties" data-toggle="tab">${ _('Properties') }</a></li>
         <li><a href="#sla" data-toggle="tab">${ _('SLA') }</a></li>
         <li><a href="#credentials" data-toggle="tab">${ _('Credentials') }</a></li>
         <li><a href="#transitions" data-toggle="tab">${ _('Transitions') }</a></li>
@@ -241,13 +241,25 @@ ${ dashboard.layout_skeleton() }
           <button data-bind="click: function(){ properties.arguments.push({'value': ''}); }">
             <i class="fa fa-plus"></i>
           </button>	      
+          </br>
+          ${ _('Files') }   
+          <ul data-bind="foreach: properties.files">
+            <li>
+              <input data-bind="value: value"/>
+              <a href="#" data-bind="click: function(){ $parent.properties.files.remove(this); }">
+                <i class="fa fa-minus"></i>
+              </a>
+            </li>
+          </ul>
+          <button data-bind="click: function(){ properties.files.push({'value': ''}); }">
+            <i class="fa fa-plus"></i>
+          </button>
         </div>
-        <div class="tab-pane" id="files">
+        <div class="tab-pane" id="properties">
           prepares <input type="text" data-bind="value: properties.prepares" /></br>
           job_xml <input type="text" data-bind="value: properties.job_xml" /></br>
           proeperties <input type="text" data-bind="value: properties.properties" /></br>
           parameters <input type="text" data-bind="value: properties.parameters" /></br>
-          files <input type="text" data-bind="value: properties.files" /></br>
           archives <input type="text" data-bind="value: properties.archives" /></br>
           sla <input type="text" data-bind="value: properties.sla" /></br>
           credentials <input type="text" data-bind="value: properties.credentials" /></br>
@@ -314,7 +326,7 @@ ${ dashboard.layout_skeleton() }
 
     <div>
       <ul class="nav nav-tabs">
-        <li class="active"><a href="#action" data-toggle="tab">${ _('Java') }</a></li>
+        <li class="active"><a href="#action" data-toggle="tab">${ _('Sub-workflow') }</a></li>
         <li><a href="#files" data-toggle="tab">${ _('Files') }</a></li>
         <li><a href="#sla" data-toggle="tab">${ _('SLA') }</a></li>
         <li><a href="#credentials" data-toggle="tab">${ _('Credentials') }</a></li>
@@ -322,7 +334,7 @@ ${ dashboard.layout_skeleton() }
       </ul>
       <div class="tab-content">
         <div class="tab-pane active" id="action">
-          <input type="text" data-bind="value: properties.jar_path" />
+          <input type="text" data-bind="value: properties.subworkflow" />
         </div>
         <div class="tab-pane" id="files">
         </div>
@@ -401,7 +413,7 @@ ${ dashboard.layout_skeleton() }
     </ul>
     
     <!-- ko if: addActionWorkflows().length > 0 -->
-      <select data-bind="options: addActionWorkflows, optionsText: 'name'"></select>
+      <select data-bind="options: addActionWorkflows, optionsText: 'name', value: selectedSubWorkflow"></select>
     <!-- /ko -->        
     
     <br/>

+ 15 - 2
apps/oozie/src/oozie/views/editor2.py

@@ -82,6 +82,11 @@ def save_workflow(request):
   else:      
     workflow_doc = Document2.objects.create(name=name, type='oozie-workflow2', owner=request.user)
 
+  subworkflows = [node['properties']['subworkflow'] for node in workflow['nodes'] if node['type'] == 'subworkflow-widget']
+  if subworkflows:
+    dependencies = Document2.objects.filter(uuid__in=subworkflows)
+    workflow_doc.dependencies = dependencies
+
   workflow_doc.update_data({'workflow': workflow})
   workflow_doc.update_data({'layout': layout})
   workflow_doc.name = name
@@ -96,6 +101,7 @@ def save_workflow(request):
 
   return HttpResponse(json.dumps(response), mimetype="application/json")
 
+
 P = {
   'jar_path': {
       'name': 'jar_path',
@@ -155,14 +161,21 @@ def add_node(request):
   workflow = json.loads(request.POST.get('workflow', '{}')) # TODO perms
   node = json.loads(request.POST.get('node', '{}'))
   properties = json.loads(request.POST.get('properties', '{}'))
+  subworkflow = json.loads(request.POST.get('subworkflow', '{}'))
 
   print node
-  print properties
+  print subworkflow
   
   properties = response['properties'] = dict([(property['name'], property['value']) for property in properties])
+  if subworkflow:
+    properties.update({
+       'subworkflow': subworkflow['value']
+    })
   properties.update({
       'parameters': [],
-      'arguments': []
+      'arguments': [],
+      'files': [],
+      'archives': []
   })
 
   response['status'] = 0

+ 5 - 1
apps/oozie/static/js/workflow-editor.ko.js

@@ -106,7 +106,8 @@ var Workflow = function (vm, workflow) {
     $.post("/oozie/editor/workflow/add_node/", {        
         "workflow": ko.mapping.toJSON(workflow),
         "node": ko.mapping.toJSON(widget),
-        "properties": ko.mapping.toJSON(viewModel.addActionProperties()),        
+        "properties": ko.mapping.toJSON(viewModel.addActionProperties()),
+        "subworkflow": viewModel.selectedSubWorkflow() ? ko.mapping.toJSON(viewModel.selectedSubWorkflow()) : '{}',
       }, function (data) {
       if (data.status == 0) {
         widget.properties = data.properties;
@@ -158,8 +159,11 @@ var WorkflowEditorViewModel = function (layout_json, workflow_json) {
     self.workflow.loadNodes(workflow_json);
   }
 
+  self.depen = ko.observableArray(workflow_json.dependencies);
+  
   self.addActionProperties = ko.observableArray([]);
   self.addActionWorkflows = ko.observableArray([]);
+  self.selectedSubWorkflow = ko.observable();
 
 
   self.getWidgetById = function (widget_id) {