Author: croberts
Date: 2013-06-19 18:46:21 +0000 (Wed, 19 Jun 2013)
New Revision: 5756
Modified:
trunk/cumin/python/cumin/gridhadoop/hadoop.py
trunk/cumin/python/cumin/gridhadoop/jobtracker.py
trunk/cumin/python/cumin/gridhadoop/namenode.py
Log:
Adding links to add external infrastructure name nodes/job trackers. Also including forms
and calls to stubbed functionality to add the nodes. Not yet showing the external nodes
in the lists.
Modified: trunk/cumin/python/cumin/gridhadoop/hadoop.py
===================================================================
--- trunk/cumin/python/cumin/gridhadoop/hadoop.py 2013-06-19 18:38:42 UTC (rev 5755)
+++ trunk/cumin/python/cumin/gridhadoop/hadoop.py 2013-06-19 18:46:21 UTC (rev 5756)
@@ -179,8 +179,16 @@
class Owner(StringField):
def render_title(self, session):
return "Username of the owner"
+
+class IpcField(StringField):
+ def render_title(self, session):
+ return "Ipc"
+class HttpField(StringField):
+ def render_title(self, session):
+ return "Http"
+
class NameNodeField(ScalarField):
def __init__(self, app, name):
super(NameNodeField, self).__init__(app, name, None)
@@ -329,3 +337,26 @@
def render_cell_href(self, session, record):
link = self.field.get_content(session, record)
return link
+
+class HadoopExternalAddForm(HadoopNodeCreateForm):
+ def __init__(self, app, name, task, cls):
+ super(HadoopExternalAddForm, self).__init__(app, name, task, cls)
+
+ self.ipc = IpcField(app, "ipc")
+ self.add_field(self.ipc)
+
+ self.http = HttpField(app, "http")
+ self.add_field(self.http)
+
+ def process_submit(self, session):
+ self.validate(session)
+
+ url = self.return_url.get(session)
+ self.page.redirect.set(session, url)
+
+ if not self.errors.get(session):
+ ipc = self.ipc.get(session)
+ http = self.http.get(session)
+ self.task.invoke(session, None, (ipc, http))
+ self.task.exit_with_redirect(session, url)
+
\ No newline at end of file
Modified: trunk/cumin/python/cumin/gridhadoop/jobtracker.py
===================================================================
--- trunk/cumin/python/cumin/gridhadoop/jobtracker.py 2013-06-19 18:38:42 UTC (rev 5755)
+++ trunk/cumin/python/cumin/gridhadoop/jobtracker.py 2013-06-19 18:46:21 UTC (rev 5756)
@@ -39,6 +39,10 @@
task = JobTrackerCreate(app, name + ".create", self.module)
link = TaskLink(app, "jobTracker_create", task)
self.links.add_child(link)
+
+ task = JobTrackerAddExternal(app, name + ".add", module)
+ link = TaskLink(app, "jobTracker_add", task)
+ self.links.add_child(link)
JobTrackerDelete(app, self, "jobTracker_delete", self.module)
@@ -75,6 +79,45 @@
frame = self.frame.children_by_name[self.frame.name + self.frame_path]
return frame.get_href(session, id,
self.app.remote.get_hosts("SCHEDULER", "HADOOP")[0])
+class JobTrackerAddExternal(Task):
+ def __init__(self, app, name, module):
+ super(JobTrackerAddExternal, self).__init__(app, name)
+ cls = app.model.com_redhat_cumin_grid_hadoop.JobTracker
+
+ self.module = module
+
+ self.form = JobTrackerAddForm(app, self.name, self, cls)
+ self.invoc = None
+
+ def callback(self, result):
+ if result == False:
+ self.invoc.status = self.invoc.FAILED
+ self.invoc.end()
+
+ def do_invoke(self, session, object, invoc, args):
+ self.invoc = invoc
+ (ipc, http) = args
+ self.app.remote.add_external_job_tracker(ipc, http, invoc.make_callback())
+
+ def get_title(self, session, x):
+ return "Add an infrastructure job tracker"
+
+ def enter(self, session, obj):
+ form_session = wooly.Session(self.app.form_page)
+
+ if obj:
+ self.form.id.set(form_session, obj._id)
+
+ self.form.return_url.set(form_session, session.marshal())
+ self.form.show(form_session)
+
+ self.do_enter(session, obj, form_session)
+ return form_session
+
+class JobTrackerAddForm(HadoopExternalAddForm):
+ def render_title(self, session):
+ return "Add an infrastructure job tracker"
+
class JobTrackerDelete(HadoopNodeDeleteTask):
def __init__(self, app, selector, name, module):
super(JobTrackerDelete, self).__init__(app, selector)
Modified: trunk/cumin/python/cumin/gridhadoop/namenode.py
===================================================================
--- trunk/cumin/python/cumin/gridhadoop/namenode.py 2013-06-19 18:38:42 UTC (rev 5755)
+++ trunk/cumin/python/cumin/gridhadoop/namenode.py 2013-06-19 18:46:21 UTC (rev 5756)
@@ -35,6 +35,10 @@
task = NameNodeCreate(app, name + ".create", module)
link = TaskLink(app, "nameNode_create", task)
self.links.add_child(link)
+
+ task = NameNodeAddExternal(app, name + ".add", module)
+ link = TaskLink(app, "nameNode_add", task)
+ self.links.add_child(link)
NameNodeDelete(app, self, "nodeName_delete", module)
@@ -68,10 +72,51 @@
class NameNodeColumn(ObjectLinkColumn):
def render_cell_href(self, session, record):
id = unescape_entity(record[self.id_field.index])
+ #TODO might need id to be http instead if regular id isn't available
+ #maybe pass all options along (id, ipc, http)
frame = self.frame.children_by_name[self.frame.name + self.frame_path]
hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER",
"HADOOP")
return frame.get_href(session, id, hadoop_schedulers[0])
+class NameNodeAddExternal(Task):
+ def __init__(self, app, name, module):
+ super(NameNodeAddExternal, self).__init__(app, name)
+ cls = app.model.com_redhat_cumin_grid_hadoop.NameNode
+
+ self.module = module
+
+ self.form = NameNodeAddForm(app, self.name, self, cls)
+ self.invoc = None
+
+ def callback(self, result):
+ if result == False:
+ self.invoc.status = self.invoc.FAILED
+ self.invoc.end()
+
+ def do_invoke(self, session, object, invoc, args):
+ self.invoc = invoc
+ (ipc, http) = args
+ self.app.remote.add_external_name_node(ipc, http, invoc.make_callback())
+
+ def get_title(self, session, x):
+ return "Add an infrastructure name node"
+
+ def enter(self, session, obj):
+ form_session = wooly.Session(self.app.form_page)
+
+ if obj:
+ self.form.id.set(form_session, obj._id)
+
+ self.form.return_url.set(form_session, session.marshal())
+ self.form.show(form_session)
+
+ self.do_enter(session, obj, form_session)
+ return form_session
+
+class NameNodeAddForm(HadoopExternalAddForm):
+ def render_title(self, session):
+ return "Add an infrastructure name node"
+
class NameNodeCreate(Task):
def __init__(self, app, name, module):
super(NameNodeCreate, self).__init__(app, name)