summaryrefslogtreecommitdiffstats
path: root/cobbler
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2009-03-05 17:59:10 -0500
committerMichael DeHaan <mdehaan@redhat.com>2009-03-05 17:59:10 -0500
commit1dee14556a2e8b5bb7046a56731490a95245b441 (patch)
treebd7f641dd2251396c1031f453ecf920f18e101b6 /cobbler
parentdbcfc5a2f0d191001cd8000a543e41eddefd20f7 (diff)
downloadcobbler-1dee14556a2e8b5bb7046a56731490a95245b441.tar.gz
cobbler-1dee14556a2e8b5bb7046a56731490a95245b441.tar.xz
cobbler-1dee14556a2e8b5bb7046a56731490a95245b441.zip
Add search to the webapp. Currently all areas are implemented on the backend though we need to tweak out the search forms to allow searching on simulatenous fields and prepopulate the options with fields folks will want to search against.
Diffstat (limited to 'cobbler')
-rw-r--r--cobbler/api.py8
-rw-r--r--cobbler/remote.py6
-rw-r--r--cobbler/webui/CobblerWeb.py125
3 files changed, 133 insertions, 6 deletions
diff --git a/cobbler/api.py b/cobbler/api.py
index 655bb413..ffc62644 100644
--- a/cobbler/api.py
+++ b/cobbler/api.py
@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
"""
+import yaml
import config
import utils
import action_sync
@@ -48,7 +49,6 @@ import logging
import time
import random
import os
-import yaml
import xmlrpclib
import traceback
@@ -209,14 +209,16 @@ class BootAPI:
version_tuple -- something like [ 1, 3, 2 ]
"""
fd = open("/var/lib/cobbler/version")
- data = yaml.load(fd.read())
+ ydata = fd.read()
fd.close()
+ data = yaml.load(ydata)
if not extended:
# for backwards compatibility and use with koan's comparisons
elems = data["version_tuple"]
+ print elems
return int(elems[0]) + 0.1*int(elems[1]) + 0.001*int(elems[2])
else:
- return data
+ return data
def clear(self):
"""
diff --git a/cobbler/remote.py b/cobbler/remote.py
index 7d7c229b..d1935712 100644
--- a/cobbler/remote.py
+++ b/cobbler/remote.py
@@ -601,7 +601,11 @@ class CobblerXMLRPCInterface:
def find_distro(self,criteria={},expand=False,token=None,**rest):
self._log("find_distro", token=token)
+ # FIXME DEBUG
+ self._log(criteria)
data = self.__find(self.api.find_distro,criteria,expand=expand,token=token)
+ # FIXME DEBUG
+ self._log(data)
return data
def find_profile(self,criteria={},expand=False,token=None,**rest):
@@ -1566,7 +1570,7 @@ class CobblerXMLRPCInterface:
class CobblerXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
def __init__(self, args):
self.allow_reuse_address = True
- SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self,args)
+ SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self,args,allow_none=True)
# *********************************************************************************
# *********************************************************************************
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index 16cbffd1..b68eacbb 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -128,7 +128,7 @@ class CobblerWeb(object):
})
def menu(self,**args):
- return self.__render( 'blank.tmpl', { } )
+ return self.__render( 'blank.tmpl', {} )
# ------------------------------------------------------------------------ #
# Settings
@@ -151,6 +151,85 @@ class CobblerWeb(object):
# Distributions
# ------------------------------------------------------------------------ #
+ def distro_menu(self,**spam):
+ return self.__render('blank.tmpl',{ 'more_blank' : 1})
+
+ def __search_execute(self,what,key1=None,value1=None,key2=None,value2=None,key3=None,value3=None):
+ if not self.__xmlrpc_setup():
+ return self.xmlrpc_auth_failure()
+
+ criteria={}
+ if key1 is not None and key1 != "":
+ criteria[key1] = value1.replace('"','')
+ if key2 is not None and key2 != "":
+ criteria[key2] = value2.replace('"','')
+ if key3 is not None and key3 != "":
+ criteria[key3] = value3.replace('"','')
+
+ params = {}
+ params['page'] = -1
+
+ results = []
+ if what == "distro":
+ results = params['distros'] = self.remote.find_distro(criteria,True)
+ elif what == "profile":
+ results = params['profiles'] = self.remote.find_profile(criteria,True)
+ elif what == "system":
+ results = params['systems'] = self.remote.find_system(criteria,True)
+ elif what == "image":
+ results = params['images'] = self.remote.find_image(criteria,True)
+ elif what == "repo":
+ results = params['repos'] = self.remote.find_repo(criteria,True)
+ else:
+ raise "internal error, unknown search type"
+
+
+ if len(results) > 0:
+ return self.__render( "%s_list.tmpl" % what, params)
+ else:
+ return self.__render('empty.tmpl', { 'search' : 1 })
+
+ def distro_search_execute(self,key1=None,value1=None,key2=None,value2=None,key3=None,value3=None,**rest):
+ return self.__search_execute("distro",key1,value1,key2,value2,key3,value3)
+ def profile_search_execute(self,key1=None,value1=None,key2=None,value2=None,key3=None,value3=None,**rest):
+ return self.__search_execute("profile",key1,value1,key2,value2,key3,value3)
+ def system_search_execute(self,key1=None,value1=None,key2=None,value2=None,key3=None,value3=None,**rest):
+ return self.__search_execute("system",key1,value1,key2,value2,key3,value3)
+ def image_search_execute(self,key1=None,value1=None,key2=None,value2=None,key3=None,value3=None,**rest):
+ return self.__search_execute("image",key1,value1,key2,value2,key3,value3)
+ def repo_search_execute(self,key1=None,value1=None,key2=None,value2=None,key3=None,value3=None,**rest):
+ return self.__search_execute("repo",key1,value1,key2,value2,key3,value3)
+
+ def __search(self, what):
+ caption = ""
+ dest = ""
+ if what == "distro":
+ caption = "Search distros"
+ dest = "distro_search_execute"
+ elif what == "profile":
+ caption = "Search profiles"
+ dest = "profile_search_execute"
+ elif what == "system":
+ caption = "Search systems"
+ dest = "system_search_execute"
+ elif what == "repo":
+ caption = "Search repos"
+ dest = "repo_search_execute"
+ elif what == "image":
+ caption = "Search image"
+ dest = "image_search_execute"
+ else:
+ raise "internal error, unknown object type in search"
+
+ return self.__render('search.tmpl', {
+ 'what' : what,
+ 'caption' : caption,
+ 'submit_dest' : dest
+ })
+
+ def distro_search(self,**spam):
+ return self.__search('distro')
+
def distro_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -303,6 +382,9 @@ class CobblerWeb(object):
pages = total_size / results_per_page
return (page, results_per_page, pages)
+
+ def system_menu(self,**spam):
+ return self.__render('blank.tmpl',{ 'more_blank' : 1})
def system_list(self,page=None,limit=None,**spam):
@@ -619,10 +701,19 @@ class CobblerWeb(object):
return self.system_list()
+ def system_search(self,**spam):
+ return self.__search('system')
# ------------------------------------------------------------------------ #
# Profiles
# ------------------------------------------------------------------------ #
+
+ def profile_search(self,**spam):
+ return self.__search('profile')
+
+ def profile_menu(self,**spam):
+ return self.__render('blank.tmpl', { 'more_blank' : 1})
+
def profile_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -780,6 +871,12 @@ class CobblerWeb(object):
# Repos
# ------------------------------------------------------------------------ #
+ def repo_search(self,**spam):
+ return self.__search('repo')
+
+ def repo_menu(self,**spam):
+ return self.__render('blank.tmpl', { 'more_blank' : 1})
+
def repo_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -894,6 +991,12 @@ class CobblerWeb(object):
# Images
# ------------------------------------------------------------------------ #
+ def image_search(self,**spam):
+ return self.__search('image')
+
+ def image_menu(self,**spam):
+ return self.__render('blank.tmpl', { 'more_blank' : 1})
+
def image_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -1017,6 +1120,9 @@ class CobblerWeb(object):
# Kickstart files
# ------------------------------------------------------------------------ #
+ def ksfile_menu(self,**spam):
+ return self.__render('blank.tmpl', { 'more_blank' : 1})
+
def ksfile_list(self,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -1128,15 +1234,22 @@ class CobblerWeb(object):
index.exposed = True
menu.exposed = True
+ distro_menu.exposed = True
distro_edit.exposed = True
distro_list.exposed = True
distro_save.exposed = True
-
+ distro_search.exposed = True
+ distro_search_execute.exposed = True
+
+ profile_menu.exposed = True
subprofile_edit.exposed = True
profile_edit.exposed = True
profile_list.exposed = True
+ profile_search.exposed = True
profile_save.exposed = True
+ profile_search_execute.exposed = True
+ system_menu.exposed = True
system_edit.exposed = True
system_edit_new.exposed = True
system_edit_copy.exposed = True
@@ -1148,14 +1261,22 @@ class CobblerWeb(object):
system_rename.exposed = True
system_delete.exposed = True
system_save.exposed = True
+ system_search.exposed = True
+ system_search_execute.exposed = True
+ repo_menu.exposed = True
repo_edit.exposed = True
repo_list.exposed = True
repo_save.exposed = True
+ repo_search.exposed = True
+ repo_search_execute.exposed = True
+ image_menu.exposed = True
image_edit.exposed = True
image_list.exposed = True
image_save.exposed = True
+ image_search.exposed = True
+ image_search_execute.exposed = True
settings_view.exposed = True
ksfile_edit.exposed = True