Эх сурвалжийг харах

[oozie] Generate workspace and create it at save time

Romain Rigaux 11 жил өмнө
parent
commit
7669d08

+ 20 - 2
apps/oozie/src/oozie/models2.py

@@ -18,6 +18,7 @@
 import json
 import logging
 import re
+import time
 
 from string import Template
 
@@ -27,6 +28,12 @@ from django.utils.translation import ugettext as _
 from desktop.lib import django_mako
 from desktop.models import Document2
 
+from hadoop.fs.hadoopfs import Hdfs
+from liboozie.submission2 import Submission
+from liboozie.submission2 import create_directories
+
+from oozie.conf import REMOTE_SAMPLE_DIR
+
 
 LOG = logging.getLogger(__name__)
 
@@ -58,7 +65,8 @@ class Workflow():
                "id": None,"uuid":"549e2697-97cf-f931-2ce4-83dfdd03b7e7","name":"My Workflow",
                "properties":{"job_xml":"","sla_enabled":False,"schema_version":"uri:oozie:workflow:0.4","sla_workflow_enabled":False,"credentials":[],"properties":{}},
                "nodes":[{"id":"3f107997-04cc-8733-60a9-a4bb62cebffc","name":"Start","type":"start-widget","properties":{},"children":[{'to': '33430f0f-ebfa-c3ec-f237-3e77efa03d0a'}]},            
-                        {"id":"33430f0f-ebfa-c3ec-f237-3e77efa03d0a","name":"End","type":"end-widget","properties":{},"children":[]}]
+                        {"id":"33430f0f-ebfa-c3ec-f237-3e77efa03d0a","name":"End","type":"end-widget","properties":{},"children":[]}
+               ]
           }
       })
       
@@ -90,7 +98,8 @@ class Workflow():
       _data['workflow']['properties'] = {}
       
     if 'deployment_dir' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['deployment_dir'] = '/tmp/aa'
+      default_dir = Hdfs.join(REMOTE_SAMPLE_DIR.get(), 'hue-oozie-%s' % time.time()) # Could be home of user too
+      _data['workflow']['properties']['deployment_dir'] = default_dir
     if 'parameters' not in _data['workflow']['properties']:
       _data['workflow']['properties']['parameters'] = [
           {'name': 'oozie.use.system.libpath', 'value': True},
@@ -156,6 +165,15 @@ class Workflow():
 
     return  [{'name': name, 'value': value} for name, value in params.iteritems()]
 
+  def check_workspace(self, fs):
+    create_directories(fs, [REMOTE_SAMPLE_DIR.get()])
+    create_directories(fs)
+      
+    perms = 0711
+    # if shared, perms = 0755
+
+    Submission(self.document.owner, self, fs, None, {})._create_dir(self.deployment_dir, perms=perms)
+
 
 class Node():
   def __init__(self, data):    

+ 22 - 0
apps/oozie/src/oozie/templates/editor/workflow_editor.mako

@@ -89,6 +89,11 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user) | n,unicode }
       </a>
     % endif
   </div>
+
+  <form class="form-search" style="margin: 0">
+    <strong>${_("Name")}</strong>
+    <input data-bind="value: $root.workflow.name"/>    
+  </form>
 </div>
 
 
@@ -184,6 +189,17 @@ ${ dashboard.layout_skeleton() }
         <div class="tab-pane active" id="action">
           <img src="/oozie/static/art/icon_pig_48.png" class="app-icon">
           <input type="text" data-bind="value: properties.script_path" />
+          
+	      ${ _('Parameters') }   
+	      <ul data-bind="foreach: $root.workflow.properties.parameters">
+	        <li>
+	          <input data-bind="value: name"/>
+	          <input data-bind="value: value"/>
+	          <a href="#" data-bind="click: function(){ $root.workflow.properties.parameters.remove(this); }">
+	            <i class="fa fa-minus"></i>
+	          </a>
+	        </li>
+	      </ul>          
         </div>
         <div class="tab-pane" id="files">
         </div>
@@ -206,8 +222,10 @@ ${ dashboard.layout_skeleton() }
   <div class="modal-body">
     <a href="javascript: void(0)" data-dismiss="modal" data-bind="click: addActionDemiModalFieldCancel" class="pull-right"><i class="fa fa-times"></i></a>
     
+    Script path
     <input type="text" data-bind="value: $root.addActionScriptPath"/>
     
+    <br/>
     <a data-bind="click: addActionDemiModalFieldPreview">
       Add
     </a>
@@ -234,6 +252,10 @@ ${ dashboard.layout_skeleton() }
         <i class="fa fa-plus"></i>
       </button>
 
+      <br/>
+      ${_("Workspace")}
+      <input data-bind="value: $root.workflow.properties.deployment_dir"/>
+
     </div>
   </div>
 </div>

+ 4 - 0
apps/oozie/src/oozie/views/editor2.py

@@ -86,6 +86,10 @@ def save_workflow(request):
   workflow_doc.update_data({'layout': layout})
   workflow_doc.name = name
   workflow_doc.save()
+  
+  workflow_instance = Workflow(document=workflow_doc)
+  workflow_instance.check_workspace(request.fs)
+  
   response['status'] = 0
   response['id'] = workflow_doc.id
   response['message'] = _('Page saved !')

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

@@ -183,7 +183,8 @@ var WorkflowEditorViewModel = function (layout_json, workflow_json) {
 
 
   self.showSubmitPopup = function () {
-	// if self.workflow.id() == null, need to save wf
+	// if self.workflow.id() == null, need to save wf for now
+
     $.get("/oozie/editor/workflow/submit/" + self.workflow.id(), {
       }, function (data) {
         $(document).trigger("showSubmitPopup", data);