[rhmessaging-commits] rhmessaging commits: r4207 - in mgmt/newdata/cumin/python/cumin: usergrid and 1 other directory.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Thu Aug 12 17:44:33 EDT 2010


Author: justi9
Date: 2010-08-12 17:44:33 -0400 (Thu, 12 Aug 2010)
New Revision: 4207

Modified:
   mgmt/newdata/cumin/python/cumin/grid/main.py
   mgmt/newdata/cumin/python/cumin/grid/submission.py
   mgmt/newdata/cumin/python/cumin/usergrid/widgets.py
   mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings
Log:
 * Based on design review, simplified fields for vm submit; more
   optional fields will follow

 * Moved vm submit logic into a dedicated task


Modified: mgmt/newdata/cumin/python/cumin/grid/main.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/main.py	2010-08-12 21:21:44 UTC (rev 4206)
+++ mgmt/newdata/cumin/python/cumin/grid/main.py	2010-08-12 21:44:33 UTC (rev 4207)
@@ -17,6 +17,7 @@
         super(Module, self).__init__(app, name)
 
         self.job_submit = JobSubmit(app)
+        self.vm_job_submit = VmJobSubmit(app)
 
         # cls = app.model.com_redhat_grid.Job
 

Modified: mgmt/newdata/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/submission.py	2010-08-12 21:21:44 UTC (rev 4206)
+++ mgmt/newdata/cumin/python/cumin/grid/submission.py	2010-08-12 21:44:33 UTC (rev 4207)
@@ -85,14 +85,29 @@
         col = ObjectTableColumn(app, attr.name, attr)
         self.insert_column(2, col)
 
-        link = self.PoolSubmitLink(app, "add", app.grid.job_submit)
+        link = self.PoolSubmitLink(app, "job_submit", app.grid.job_submit)
         self.links.add_child(link)
 
+        link = self.PoolSubmitLink \
+            (app, "vm_job_submit", app.grid.vm_job_submit)
+        self.links.add_child(link)
+
     class PoolSubmitLink(TaskLink):
         def do_enter(self, session, obj, form_session):
             pool = self.parent.pool.get(session)
             self.form.pool_name.set(form_session, pool.Pool)
 
+class JobDescriptionField(StringField):
+    def __init__(self, app, name):
+        super(JobDescriptionField, self).__init__(app, name)
+
+        self.input.size = 50
+        self.required = True
+        self.help = "This text will identify the submission"
+
+    def render_title(self, session):
+        return "Description"
+
 class JobSubmit(Task):
     def __init__(self, app):
         super(JobSubmit, self).__init__(app)
@@ -117,8 +132,8 @@
         ad = dict()
 
         ad["Submission"] = description
+        ad["Owner"] = invoc.user.name
         ad["Cmd"] = executable
-        ad["Owner"] = invoc.user.name
 
         def put(name, value):
             if value:
@@ -153,10 +168,7 @@
         self.pool_name = Attribute(app, "pool")
         self.add_attribute(self.pool_name)
 
-        self.description = self.DescriptionField(app, "description")
-        self.description.input.size = 50
-        self.description.required = True
-        self.description.help = "This text will identify the submission"
+        self.description = JobDescriptionField(app, "description")
         self.add_field(self.description)
 
         self.command = self.CommandField(app, "command")
@@ -326,10 +338,6 @@
             def render_item_content(self, session, item):
                 return item
 
-    class DescriptionField(StringField):
-        def render_title(self, session):
-            return "Description"
-
     class CommandField(MultilineStringField):
         def render_title(self, session):
             return "Command"
@@ -411,93 +419,112 @@
         def render_title(self, session):
             return "Extra attributes"
 
-# class SubmissionVMAdd(SubmissionAdd):
-#     def get_add_form(self, app):
-#         return SubmissionAddVMForm(app, self.name, self)
+class VmJobSubmit(Task):
+    def __init__(self, app):
+        super(VmJobSubmit, self).__init__(app)
 
-#     def get_title(self, session):
-#         return "Create VM submission"
+        self.form = VmJobSubmitForm(app, self.name, self)
 
-#     def do_invoke(self, invoc, scheduler,
-#                   description,
-#                   executable,
-#                   arguments=None,
-#                   requirements=None,
-#                   universe=None,
-#                   iwd=None,
-#                   stdin=None,
-#                   stdout=None,
-#                   stderr=None,
-#                   usrlog=None,
-#                   attrs={}):
+    def get_title(self, session, scheduler):
+        return "Submit VM job"
 
-#         cmd = "%s %s" % (executable, arguments)
-#         arguments = None
-#         super(SubmissionVMAdd, self).do_invoke(invoc, scheduler,
-#                 description, cmd, arguments,
-#                 requirements, universe, iwd,
-#                 stdin, stdout, stderr, usrlog,
-#                 attrs)
+    def do_invoke(self, session, scheduler, invoc,
+                  description, image, memory):
+        ad = dict()
 
-# class SubmissionAddVMForm(SubmissionAddForm):
-#     def add_fields(self, app):
-#         self.disk = self.DiskField(app, "disk")
-#         self.disk.input.size = 50
-#         self.disk.required = True
-#         self.disk.help = "VM disk img file location"
-#         self.add_field(self.disk)
+        # General
 
-#         self.requirements = self.RequirementsField(app, "requirements")
-#         self.requirements.input.columns = 50
-#         self.requirements.required = True
-#         self.requirements.help = "Attributes controlling where and when " + \
-#             "this submission will run"
-#         self.add_field(self.requirements)
+        ad["Submission"] = description
+        ad["Owner"] = invoc.user.name
+        ad["Cmd"] = image # This is just an identifier in this context
+        ad["Iwd"] = "/tmp"
+        ad["ShouldTransferFiles"] = "NEVER" # try submit without
+        ad["RequestMemory"] = \
+            "ceiling(ifThenElse(JobVMMemory =!= undefined," + \
+                               "JobVMMemory, " + \
+                               "ImageSize / 1024.000000))"
 
-#         self.universe = Attribute(app, "universe")
-#         self.universe.default = self.task.UNIVERSE["VM"]
-#         self.add_attribute(self.universe)
+        # VM
 
-#         self.attributes_ = self.VMAttributes(app, "attributes")
-#         self.add_attribute(self.attributes_)
+        ad["VMPARAM_Kvm_Disk"] = "%s:vda:w" % image
+        ad["JobVMType"] = "kvm"
+        ad["JobVMMemory"] = memory
+        ad["JobVM_VCPUS"] = 1
+        ad["JobVMNetworking"] = False
+        ad["JobVMCheckpoint"] = False
+        ad["JobVMMemory"] = memory
+        ad["JobVMMemory"] = memory
+        
+        # Requirements
 
-#         self.command = Attribute(app, "command")
-#         self.command.default = "QMF Submitted VM"
-#         self.add_attribute(self.command)
+        exprs = list()
+ 
+        exprs.append('VM_Type == "KVM"')
+        exprs.append('Arch == "X86_64"') # parameterize
+        exprs.append('HasVM')
+        exprs.append('VM_AvailNum > 0')
+        exprs.append('TotalDisk >= DiskUsage')
+        exprs.append('TotalMemory >= %i' % memory)
+        exprs.append('VM_Memory >= %i' % memory)
 
-#         self.directory = Attribute(app, "directory")
-#         self.directory.default = "/tmp"
-#         self.add_attribute(self.directory)
+        # needs further consideration
+        #exprs.append('TARGET.FileSystemDomain == MY.FileSystemDomain')
 
-#         self.stdin = Attribute(app, "stdin")
-#         self.add_attribute(self.stdin)
+        ad["Requirements"] = " && ".join(exprs)
 
-#         self.stdout = Attribute(app, "stdout")
-#         self.add_attribute(self.stdout)
+        # Descriptors
 
-#         self.stderr = Attribute(app, "stderr")
-#         self.add_attribute(self.stderr)
+        descriptors = dict()
+        descriptors["Requirements"] = "com.redhat.grid.Expression"
 
-#         self.usrlog = Attribute(app, "usrlog")
-#         self.add_attribute(self.usrlog)
+        ad["!!descriptors"] = descriptors
 
-#     class DiskField(StringField):
-#         def render_title(self, session):
-#             return "Disk"
+        invoc.description = "Submit VM job '%s'" % description
 
-#     class VMAttributes(Attribute):
-#         def get(self, session):
-#             vm_ads = list()
-#             vm_ads.append("ShouldTransferFiles=NEVER")
-#             vm_ads.append("JobVMType=kvm")
-#             vm_ads.append("JobVMMemory=512")
-#             vm_ads.append("VMPARAM_Xen_Kernel=included")
+        self.qmf_call(invoc, scheduler, "SubmitJob", ad)
 
-#             disk = self.widget.disk.get(session)
-#             vm_ads.append("VMPARAM_Xen_Disk=%s:hda:w" % disk)
+class VmJobSubmitForm(ObjectTaskForm):
+    def __init__(self, app, name, task):
+        cls = app.model.com_redhat_grid.Scheduler
+        super(VmJobSubmitForm, self).__init__(app, name, task, cls)
 
-#             return "\n".join(vm_ads)
+        self.pool_name = Attribute(app, "pool")
+        self.add_attribute(self.pool_name)
 
+        self.description = JobDescriptionField(app, "description")
+        self.add_field(self.description)
+
+        self.image = self.ImageField(app, "image")
+        self.image.input.size = 50
+        self.image.required = True
+        self.add_field(self.image)
+
+        from scheduler import SchedulerSelectField # XXX
+
+        self.scheduler = SchedulerSelectField(app, "scheduler", self.pool_name)
+        self.scheduler.help = "Submit job to this schedd"
+        self.add_extra_field(self.scheduler)
+
+    def process_submit(self, session):
+        self.validate(session)
+
+        if not self.errors.get(session):
+            scheduler = self.scheduler.get(session)
+            description = self.description.get(session)
+            image = self.image.get(session)
+
+            self.task.invoke(session,
+                             scheduler,
+                             description,
+                             image,
+                             512)
+
+            self.task.exit_with_redirect(session, scheduler)
+
+    class ImageField(StringField):
+        def render_title(self, session):
+            return "Image location"
+
 # class SubmissionDagAdd(SubmissionAdd):
 #     def __init__(self, app, frame):
 #         super(SubmissionDagAdd, self).__init__(app, frame)

Modified: mgmt/newdata/cumin/python/cumin/usergrid/widgets.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/usergrid/widgets.py	2010-08-12 21:21:44 UTC (rev 4206)
+++ mgmt/newdata/cumin/python/cumin/usergrid/widgets.py	2010-08-12 21:44:33 UTC (rev 4207)
@@ -73,6 +73,9 @@
         link = TaskLink(app, "job_submit", app.grid.job_submit)
         self.add_child(link)
 
+        link = TaskLink(app, "vm_job_submit", app.grid.vm_job_submit)
+        self.add_child(link)
+
         # XXX
         # task = SubmissionVMAdd(app)
         # self.vm_link = ObjectTaskLink(app, "submissionvmadd", task)
@@ -109,9 +112,12 @@
         col = ObjectLinkColumn(app, "name", self.cls.Name, self.cls._id, frame)
         self.insert_column(1, col)
 
-        link = TaskLink(app, "add", app.grid.job_submit)
+        link = TaskLink(app, "job_submit", app.grid.job_submit)
         self.links.add_child(link)
 
+        link = TaskLink(app, "vm_job_submit", app.grid.vm_job_submit)
+        self.links.add_child(link)
+
 class UserJobStatSet(NewStatSet):
     def __init__(self, app, name, user):
         super(UserJobStatSet, self).__init__(app, name)

Modified: mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings
===================================================================
--- mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings	2010-08-12 21:21:44 UTC (rev 4206)
+++ mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings	2010-08-12 21:44:33 UTC (rev 4207)
@@ -36,6 +36,7 @@
         
         <ul style="list-style-type: none; margin: 1 0; padding: 0;">
           <li>{job_submit}</li>
+          <li>{vm_job_submit}</li>
         </ul>
       </td>
     </tr>



More information about the rhmessaging-commits mailing list