summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-18 13:22:12 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-18 13:22:12 -0400
commit6fc3f8e8496610eeddc950a04417323b951d6547 (patch)
treead00958b5654cd99c00cbc7f9a90c5c54cae171f
parent063f3d86ce09cc6662b06fbb1f01625a2c85e837 (diff)
downloadthird_party-cobbler-6fc3f8e8496610eeddc950a04417323b951d6547.tar.gz
third_party-cobbler-6fc3f8e8496610eeddc950a04417323b951d6547.tar.xz
third_party-cobbler-6fc3f8e8496610eeddc950a04417323b951d6547.zip
Implement deletes in WebUI, some fixes to backend RW XMLRPC API to serialize deletes
properly.
-rw-r--r--cobbler/remote.py16
-rw-r--r--cobbler/webui/CobblerWeb.py41
-rw-r--r--docs/WUI_TODO4
3 files changed, 48 insertions, 13 deletions
diff --git a/cobbler/remote.py b/cobbler/remote.py
index e559ab5..c814a6e 100644
--- a/cobbler/remote.py
+++ b/cobbler/remote.py
@@ -611,7 +611,9 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
of the distro, not a handle.
"""
self.__validate_token(token)
- return self.api._config.distros().remove(name)
+ rc = self.api._config.distros().remove(name)
+ self.api.serialize()
+ return rc
def profile_remove(self,name,token):
"""
@@ -619,7 +621,9 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
of the profile, not a handle.
"""
self.__validate_token(token)
- return self.api._config.profiles().remove(name)
+ rc = self.api._config.profiles().remove(name)
+ self.api.serialize()
+ return rc
def system_remove(self,name,token):
"""
@@ -627,7 +631,9 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
of the system, not a handle.
"""
self.__validate_token(token)
- return self.api._config.systems().remove(name)
+ rc = self.api._config.systems().remove(name)
+ self.api.serialize()
+ return rc
def repo_remove(self,name,token):
"""
@@ -635,7 +641,9 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
of the repo, not a handle.
"""
self.__validate_token(token)
- return self.api._config.repos().remove(name)
+ rc = self.api._config.repos().remove(name)
+ self.api.serialize()
+ return rc
def sync(self,token):
"""
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index ed6df8b..53567fb 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -243,6 +243,7 @@ class CobblerWeb(object):
if not self.__xmlrpc_setup():
return self.login(message="")
+ # handle deletes as a special case
if new_or_edit == 'edit' and delete1 and delete2:
try:
self.remote.distro_remove(name,self.token)
@@ -285,7 +286,7 @@ class CobblerWeb(object):
log_exc()
return self.error_page("Error while saving distro: %s" % str(e))
- return self.distro_edit(name=name)
+ return self.distro_list()
# ------------------------------------------------------------------------ #
# Systems
@@ -308,7 +309,7 @@ class CobblerWeb(object):
# FIXME: implement handling of delete1, delete2 + renames
def system_save(self, name=None, profile=None, new_or_edit=None, mac=None, ip=None, hostname=None,
- kopts=None, ksmeta=None, netboot='n', dhcp_tag=None, **args):
+ kopts=None, ksmeta=None, netboot='n', dhcp_tag=None, delete1=None, delete2=None, **args):
if not self.__xmlrpc_setup():
return self.login(message="")
@@ -316,6 +317,16 @@ class CobblerWeb(object):
# parameter checking
if name is None:
return self.error_page("System name parameter is REQUIRED.")
+
+ # handle deletes as a special case
+ if new_or_edit == 'edit' and delete1 and delete2:
+ try:
+ self.remote.system_remove(name,self.token)
+ except Exception, e:
+ return self.error_page("could not delete %s, %s" % (name,str(e)))
+ return self.system_list()
+
+ # more parameter checking
if mac is None and ip is None and hostname is None and not is_mac(name):
return self.error_page("System must have at least one of MAC/IP/hostname.")
if hostname and not ip:
@@ -357,7 +368,7 @@ class CobblerWeb(object):
# FIXME: get the exact error message and display to the user.
log_exc()
return self.error_page("Error while saving system: %s" % str(e))
- return self.system_edit( name=name)
+ return self.system_list()
def system_edit(self, name=None):
@@ -407,7 +418,7 @@ class CobblerWeb(object):
def profile_save(self,new_or_edit=None, name=None,distro=None,kickstart=None,kopts=None,
ksmeta=None,virtfilesize=None,virtram=None,virttype=None,
- virtpath=None,repos=None,dhcptag=None,**args):
+ virtpath=None,repos=None,dhcptag=None,delete1=None,delete2=None,**args):
if not self.__xmlrpc_setup():
return self.login(message="")
@@ -418,6 +429,14 @@ class CobblerWeb(object):
if distro is None:
return self.error_page("distro is required")
+ # handle deletes as a special case
+ if new_or_edit == 'edit' and delete1 and delete2:
+ try:
+ self.remote.profile_remove(name,self.token)
+ except Exception, e:
+ return self.error_page("could not delete %s, %s" % (name,str(e)))
+ return self.profile_list()
+
# grab a reference to the object
if new_or_edit == "edit":
try:
@@ -453,7 +472,7 @@ class CobblerWeb(object):
log_exc()
return self.error_page("Error while saving profile: %s" % str(e))
- return self.profile_edit(name=name)
+ return self.profile_list()
# ------------------------------------------------------------------------ #
# Repos
@@ -489,6 +508,16 @@ class CobblerWeb(object):
# pre-command parameter checking
if name is None:
return self.error_page("name is required")
+
+ # handle deletes as a special case
+ if new_or_edit == 'edit' and delete1 and delete2:
+ try:
+ self.remote.repo_remove(name,self.token)
+ except Exception, e:
+ return self.error_page("could not delete %s, %s" % (name,str(e)))
+ return self.repo_list()
+
+ # more parameter checking
if mirror is None:
return self.error_page("mirror is required")
@@ -517,7 +546,7 @@ class CobblerWeb(object):
log_exc()
return self.error_page("Error while saving repo: %s" % str(e))
- return self.repo_edit(name=name)
+ return self.repo_list()
diff --git a/docs/WUI_TODO b/docs/WUI_TODO
index 60b1bcd..ae6dfaf 100644
--- a/docs/WUI_TODO
+++ b/docs/WUI_TODO
@@ -2,10 +2,8 @@ Things to do on the Web User Interface
- make fields wider that need to be wider (most can probably be ~128? Ksmeta/Kopts min 255)
- modify form fields that should be radio boxes, etc (things like arch, breed)
-- rename support for all distro, profile, system, repo objects
+- rename (and/or copy?) support for all distro, profile, system, repo objects
-- just detect when name changes, should not require a new form
-- delete support for all distro, profile, system, repo objects
- -- when both checkboxes are checked, process on same form
- kickstart file editing and new kickstart file creation (if in /var/lib/cobbler/kickstarts)
- sync button -- hook up to API.
- ???