diff options
-rw-r--r-- | cobbler/api.py | 8 | ||||
-rw-r--r-- | cobbler/remote.py | 6 | ||||
-rw-r--r-- | cobbler/webui/CobblerWeb.py | 125 | ||||
-rw-r--r-- | setup.py | 1 | ||||
-rw-r--r-- | webui_templates/blank.tmpl | 6 | ||||
-rw-r--r-- | webui_templates/empty.tmpl | 4 | ||||
-rw-r--r-- | webui_templates/master.tmpl | 47 | ||||
-rw-r--r-- | webui_templates/paginate.tmpl | 3 | ||||
-rw-r--r-- | webui_templates/search.tmpl | 45 |
9 files changed, 219 insertions, 26 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 @@ -284,6 +284,7 @@ if __name__ == "__main__": (wwwtmpl, ['webui_templates/empty.tmpl']), (wwwtmpl, ['webui_templates/blank.tmpl']), + (wwwtmpl, ['webui_templates/search.tmpl']), (wwwtmpl, ['webui_templates/enoaccess.tmpl']), (wwwtmpl, ['webui_templates/distro_list.tmpl']), (wwwtmpl, ['webui_templates/distro_edit.tmpl']), diff --git a/webui_templates/blank.tmpl b/webui_templates/blank.tmpl index 0b0d4f7d..7b33dd50 100644 --- a/webui_templates/blank.tmpl +++ b/webui_templates/blank.tmpl @@ -1,8 +1,12 @@ #extends cobbler.webui.master #block body +#if $getVar('more_blank','') == '' You are now logged in to <A HREF="http://fedorahosted.org/cobbler">Cobbler</A>. Main screen turn on. - +#else +Cobbler awaits your command. +<!-- for great justice --> +#end if #end block body diff --git a/webui_templates/empty.tmpl b/webui_templates/empty.tmpl index 7a76ddad..9f6d6725 100644 --- a/webui_templates/empty.tmpl +++ b/webui_templates/empty.tmpl @@ -1,5 +1,9 @@ #extends cobbler.webui.master #block body +#if $getVar('search','') == '' No items found. Add some using the links on the left. +#else +No matches found. +#end if #end block body diff --git a/webui_templates/master.tmpl b/webui_templates/master.tmpl index 6080b819..80865605 100644 --- a/webui_templates/master.tmpl +++ b/webui_templates/master.tmpl @@ -29,43 +29,54 @@ <li><a href="/cobbler/webui/wui.html" class="menu">Docs</a></li> <li><a href="$base_url?mode=settings_view" class="menu">Settings</a></li> <li><hr/></li> - <li><a href="$base_url?mode=distro_list" class="menu">Distros</a></li> - #if $mode == "distro_list" + <li><a class="menu">Distros</span></li> + ##if $mode.find("distro") != -1 <ul id="navaction"> + <li><a href="$base_url?mode=distro_list" class="menu">View</a></li> + <li><a href="$base_url?mode=distro_search" class="menu">Search</a></li> <li><a href="$base_url?mode=distro_edit" class="menu">Add</a></li> </ul> - #end if - <li><a href="$base_url?mode=profile_list" class="menu">Profiles</a></li> - #if $mode == "profile_list" + ##end if + <li><a class="menu">Profiles</span></li> + ##if $mode.find("profile") != -1 <ul id="navaction"> + <li><a href="$base_url?mode=profile_list" class="menu">View</a></li> + <li><a href="$base_url?mode=profile_search" class="menu">Search</a></li> <li><a href="$base_url?mode=profile_edit" class="menu">Add</a></li> <li><a href="$base_url?mode=subprofile_edit" class="menu">Add child</a></li> </ul> - #end if - <li><a href="$base_url?mode=system_list" class="menu">Systems</a></li> - #if $mode == "system_list" + ##end if + <li><a class="menu">Systems</span></li> + ##if $mode.find("system") != -1 <ul id="navaction"> + <li><a href="$base_url?mode=system_list" class="menu">View</a></li> + <li><a href="$base_url?mode=system_search" class="menu">Search</a></li> <li><a href="$base_url?mode=system_edit_new" class="menu">Add</a></li> </ul> - #end if - <li><a href="$base_url?mode=ksfile_list" class="menu">Kickstarts</a></li> - #if $mode == "ksfile_list" + ##end if + <li><a class="menu">Kickstarts</span></li> + ##if $mode.find("ksfile") != -1 <ul id="navaction"> + <li><a href="$base_url?mode=ksfile_list" class="menu">View</a></li> <li><a href="$base_url?mode=ksfile_new" class="menu">Add</a></li> </ul> - #end if - <li><a href="$base_url?mode=repo_list" class="menu">Repos</a></li> - #if $mode == "repo_list" + ##end if + <li><a class="menu">Repos</span></li> + ##if $mode.find("repo") != -1 <ul id="navaction"> + <li><a href="$base_url?mode=repo_list" class="menu">View</a></li> + <li><a href="$base_url?mode=repo_search" class="menu">Search</a></li> <li><a href="$base_url?mode=repo_edit" class="menu">Add</a></li> </ul> - #end if - <li><a href="$base_url?mode=image_list" class="menu">Images</a></li> - #if $mode == "image_list" + ##end if + <li><a class="menu">Images</span></li> + ##if $mode.find("image") != -1 <ul id="navaction"> + <li><a href="$base_url?mode=image_list" class="menu">View</a></li> + <li><a href="$base_url?mode=image_search" class="menu">Search</a></li> <li><a href="$base_url?mode=image_edit" class="menu">Add</a></li> </ul> - #end if + ##end if <li><hr/><br/></li> <li><a class="button sync" href="$base_url?mode=sync">Sync</a></li> </ul> diff --git a/webui_templates/paginate.tmpl b/webui_templates/paginate.tmpl index 9b20e560..66bf6345 100644 --- a/webui_templates/paginate.tmpl +++ b/webui_templates/paginate.tmpl @@ -1,3 +1,4 @@ +#if $page > 0 ## USAGE: # set global what="system" ## # include "/path/to/this/file" @@ -28,4 +29,4 @@ <br/> <br/> - +#end if diff --git a/webui_templates/search.tmpl b/webui_templates/search.tmpl new file mode 100644 index 00000000..f3fca6cb --- /dev/null +++ b/webui_templates/search.tmpl @@ -0,0 +1,45 @@ +#extends cobbler.webui.master +#block body + +<script language="javascript"> +</script> + +#set $form_dest=$base_url+"?mode="+$what+"_search_execute" + +<form method="POST" action="$form_dest"> +<fieldset id="cform"> + + <legend>$caption</legend> + <table border=0> + + <tr> + + <td> + <select id="key1" name="key1"> + <option value="name">name</option> + #if $what == "distro": + <option value="kernel">kernel</option> + <option value="initrd">initrd</option> + #elif $what == "profile" + <option value="distro">distro</option> + #elif $what == "system" + <option value="profile">profile</option> + <option value="image">image</option> + ## FIMXE: more values for more fields, add images, add repos + #end if + </select> + </td> + + ## FIXME copy and paste key2,value2 and key3,value3 in a loop + <td> + <input type="text" id="value1" name="value1"/> + </td> + + </table> + + <input type="submit" value="search"/> + +</fieldset> + +</form> +#end block body |