summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cobbler/api.py8
-rw-r--r--cobbler/remote.py6
-rw-r--r--cobbler/webui/CobblerWeb.py125
-rw-r--r--setup.py1
-rw-r--r--webui_templates/blank.tmpl6
-rw-r--r--webui_templates/empty.tmpl4
-rw-r--r--webui_templates/master.tmpl47
-rw-r--r--webui_templates/paginate.tmpl3
-rw-r--r--webui_templates/search.tmpl45
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
diff --git a/setup.py b/setup.py
index c98c89ba..904732fb 100644
--- a/setup.py
+++ b/setup.py
@@ -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