summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-18 15:00:07 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-18 15:00:07 -0400
commit2127d90388fbe29d6b5d0446bd971acaf5051e55 (patch)
tree4791123585b9b51a52b0ff9a72d1b5fdbe472a94
parent6fc3f8e8496610eeddc950a04417323b951d6547 (diff)
downloadthird_party-cobbler-2127d90388fbe29d6b5d0446bd971acaf5051e55.tar.gz
third_party-cobbler-2127d90388fbe29d6b5d0446bd971acaf5051e55.tar.xz
third_party-cobbler-2127d90388fbe29d6b5d0446bd971acaf5051e55.zip
Adding rename and copy support to the Web UI.
-rw-r--r--cobbler/webui/CobblerWeb.py67
-rw-r--r--webui_templates/distro_edit.tmpl28
-rw-r--r--webui_templates/profile_edit.tmpl28
-rw-r--r--webui_templates/repo_edit.tmpl28
-rw-r--r--webui_templates/system_edit.tmpl27
5 files changed, 164 insertions, 14 deletions
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index 53567fb..fec69db 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -238,7 +238,9 @@ class CobblerWeb(object):
} )
# FIXME: deletes and renames
- def distro_save(self,name=None,new_or_edit=None,kernel=None,initrd=None,kopts=None,ksmeta=None,arch=None,breed=None,delete1=None,delete2=None,**args):
+ def distro_save(self,name=None,oldname=None,new_or_edit=None,editmode='edit',kernel=None,
+ initrd=None,kopts=None,ksmeta=None,arch=None,breed=None,
+ delete1=None,delete2=None,**args):
if not self.__xmlrpc_setup():
return self.login(message="")
@@ -258,9 +260,11 @@ class CobblerWeb(object):
return self.error_page("kernel must be specified as an absolute path")
if initrd is None or not str(initrd).startswith("/"):
return self.error_page("initrd must be specified as an absolute path")
+ if (editmode == 'rename' or editmode == 'copy') and name == oldname:
+ return self.error_page("The name has not been changed.")
# grab a reference to the object
- if new_or_edit == "edit":
+ if new_or_edit == "edit" and editmode == "edit":
try:
distro = self.remote.get_distro_handle( name, self.token)
except:
@@ -286,6 +290,13 @@ class CobblerWeb(object):
log_exc()
return self.error_page("Error while saving distro: %s" % str(e))
+ if editmode == "rename" and name != oldname:
+ try:
+ self.remote.distro_remove(oldname, self.token)
+ except Exception, e:
+ return self.error_page("Rename unsuccessful. Object %s was copied instead, and the old copy (%s) still remains. Reason: %s" % (name, oldname, str(e)))
+
+
return self.distro_list()
# ------------------------------------------------------------------------ #
@@ -308,8 +319,10 @@ class CobblerWeb(object):
return self.__render('empty.tmpl',{})
# 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, delete1=None, delete2=None, **args):
+ def system_save(self,name=None,oldname=None,editmode="edit",profile=None,
+ new_or_edit=None, mac=None, ip=None, hostname=None,
+ kopts=None, ksmeta=None, netboot='n', dhcp_tag=None,
+ delete1=None, delete2=None, **args):
if not self.__xmlrpc_setup():
return self.login(message="")
@@ -317,6 +330,8 @@ class CobblerWeb(object):
# parameter checking
if name is None:
return self.error_page("System name parameter is REQUIRED.")
+ if (editmode == 'rename' or editmode == 'copy') and name == oldname:
+ return self.error_page("The name has not been changed.")
# handle deletes as a special case
if new_or_edit == 'edit' and delete1 and delete2:
@@ -327,7 +342,7 @@ class CobblerWeb(object):
return self.system_list()
# more parameter checking
- if mac is None and ip is None and hostname is None and not is_mac(name):
+ if mac is None and ip is None and hostname is None and not is_mac(name) and not is_ip(name):
return self.error_page("System must have at least one of MAC/IP/hostname.")
if hostname and not ip:
ip = resolve_ip( hostname )
@@ -337,7 +352,7 @@ class CobblerWeb(object):
return self.error_page("The provided IP address appears to be invalid.")
# grab a reference to the object
- if new_or_edit == "edit":
+ if new_or_edit == "edit" and editmode == "edit":
try:
system = self.remote.get_system_handle( name, self.token )
except:
@@ -368,8 +383,16 @@ 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))
+
+ if editmode == "rename" and name != oldname:
+ try:
+ self.remote.system_remove(oldname, self.token)
+ except Exception, e:
+ return self.error_page("Rename unsuccessful. Object %s was copied instead, and the old copy (%s) still remains. Reason: %s" % (name, oldname, str(e)))
+
return self.system_list()
+
def system_edit(self, name=None):
if not self.__xmlrpc_setup():
@@ -416,7 +439,8 @@ class CobblerWeb(object):
'ksfiles': self.remote.get_kickstart_templates(self.token)
} )
- def profile_save(self,new_or_edit=None, name=None,distro=None,kickstart=None,kopts=None,
+ def profile_save(self,new_or_edit=None,editmode='edit',name=None,oldname=None,
+ distro=None,kickstart=None,kopts=None,
ksmeta=None,virtfilesize=None,virtram=None,virttype=None,
virtpath=None,repos=None,dhcptag=None,delete1=None,delete2=None,**args):
@@ -428,7 +452,9 @@ class CobblerWeb(object):
return self.error_page("name is required")
if distro is None:
return self.error_page("distro is required")
-
+ if (editmode == 'rename' or editmode == 'copy') and name == oldname:
+ return self.error_page("The name has not been changed")
+
# handle deletes as a special case
if new_or_edit == 'edit' and delete1 and delete2:
try:
@@ -438,7 +464,7 @@ class CobblerWeb(object):
return self.profile_list()
# grab a reference to the object
- if new_or_edit == "edit":
+ if new_or_edit == "edit" and editmode == "edit":
try:
profile = self.remote.get_profile_handle( name, self.token )
except:
@@ -472,6 +498,13 @@ class CobblerWeb(object):
log_exc()
return self.error_page("Error while saving profile: %s" % str(e))
+ if editmode == "rename" and name != oldname:
+ try:
+ self.remote.profile_remove(oldname, self.token)
+ except Exception, e:
+ return self.error_page("Rename unsuccessful. Object %s was copied instead, and the old copy (%s) still remains. Reason: %s" % (name, oldname, str(e)))
+
+
return self.profile_list()
# ------------------------------------------------------------------------ #
@@ -501,13 +534,18 @@ class CobblerWeb(object):
'repo': input_repo,
} )
- def repo_save(self,name=None,new_or_edit=None,mirror=None,keepupdated=None,localfilename=None,rpmlist=None,createrepoflags=None,**args):
+ def repo_save(self,name=None,oldname=None,new_or_edit=None,editmode="edit",
+ mirror=None,keepupdated=None,localfilename=None,
+ rpmlist=None,createrepoflags=None,delete1=None,delete2=None,**args):
if not self.__xmlrpc_setup():
return self.login(message="")
# pre-command parameter checking
if name is None:
return self.error_page("name is required")
+ if (editmode == 'rename' or editmode == 'copy') and name == oldname:
+ return self.error_page("The name has not been changed.")
+
# handle deletes as a special case
if new_or_edit == 'edit' and delete1 and delete2:
@@ -522,7 +560,7 @@ class CobblerWeb(object):
return self.error_page("mirror is required")
# grab a reference to the object
- if new_or_edit == "edit":
+ if new_or_edit == "edit" and editmode == "edit":
try:
repo = self.remote.get_repo_handle( name, self.token)
except:
@@ -546,6 +584,13 @@ class CobblerWeb(object):
log_exc()
return self.error_page("Error while saving repo: %s" % str(e))
+ if editmode == "rename" and name != oldname:
+ try:
+ self.remote.repo_remove(oldname, self.token)
+ except Exception, e:
+ return self.error_page("Rename unsuccessful. Object %s was copied instead, and the old copy (%s) still remains. Reason: %s" % (name, oldname, str(e)))
+
+
return self.repo_list()
diff --git a/webui_templates/distro_edit.tmpl b/webui_templates/distro_edit.tmpl
index 8b2b9c7..bd76bfe 100644
--- a/webui_templates/distro_edit.tmpl
+++ b/webui_templates/distro_edit.tmpl
@@ -1,25 +1,51 @@
#extends cobbler.webui.master
-
#block body
+
+#if $distro
+<script language="javascript">
+function disablename(value)
+{
+ document.getElementById("name").disabled=value;
+ if (value) {
+ document.getElementById("name").value = "$distro.name";
+ }
+}
+</script>
+#end if
+
<form method="post" action="$base_url/distro_save">
<fieldset id="cform">
#if $distro
<legend>Editing Distro</legend>
<input type="hidden" name="new_or_edit" value="edit"/>
+ <input type="hidden" name="oldname" value="$distro.name"/>
#else
<legend>Adding a Distro</legend>
<input type="hidden" name="new_or_edit" value="new"/>
#end if
<label for="name">Name</label>
+ #if $distro
+ <input type="text" size="32" style="width: 150px;" name="name" id="name" disabled="true"
+ #else
<input type="text" size="32" style="width: 150px;" name="name" id="name"
+ #end if
#if $distro
value="$distro.name"
#end if
/>
<br/>
+ #if $distro
+ <label for="mode">Edit Mode</label>
+ <input type="radio" name="editmode" value="edit" checked onclick="javascript:disablename(true)">Edit
+ <input type="radio" name="editmode" value="rename" onclick="javascript:disablename(false)">Rename + Edit
+ <input type="radio" name="editmode" value="copy" onclick="javascript:disablename(false)">Copy + Edit
+ <br/>
+ #end if
+
+
<label for="kernel">Kernel</label>
<input type="text" size="32" style="width: 150px;" name="kernel" id="kernel"
#if $distro
diff --git a/webui_templates/profile_edit.tmpl b/webui_templates/profile_edit.tmpl
index 1fc3df8..5c46d6b 100644
--- a/webui_templates/profile_edit.tmpl
+++ b/webui_templates/profile_edit.tmpl
@@ -1,6 +1,18 @@
#extends cobbler.webui.master
-
#block body
+
+#if $profile
+<script language="javascript">
+function disablename(value)
+{
+ document.getElementById("name").disabled=value;
+ if (value) {
+ document.getElementById("name").value = "$profile.name";
+ }
+}
+</script>
+#end if
+
<form method="post" action="$base_url/profile_save">
<fieldset id="cform">
@@ -13,6 +25,7 @@
#if $profile
<legend>Editing Profile</legend>
<input type="hidden" name="new_or_edit" value="edit"/>
+ <input type="hidden" name="oldname" value="$profile.name"/>
#else
<legend>Adding a Profile</legend>
<input type="hidden" name="new_or_edit" value="new"/>
@@ -20,13 +33,26 @@
<label for="name">Profile Name</label>
+ #if $profile
+ <input type="text" size="32" style="width: 150px;" name="name" id="name" disabled="true"
+ #else
<input type="text" size="32" style="width: 150px;" name="name" id="name"
+ #end if
#if $profile
value="$profile.name"
#end if
/>
<br/>
+ #if $profile
+ <label for="mode">Edit Mode</label>
+ <input type="radio" name="editmode" value="edit" checked onclick="javascript:disablename(true)">Edit
+ <input type="radio" name="editmode" value="rename" onclick="javascript:disablename(false)">Rename + Edit
+ <input type="radio" name="editmode" value="copy" onclick="javascript:disablename(false)">Copy + Edit
+ <br/>
+ #end if
+
+
<label for="distro">Distribution</label>
<select name="distro" id="distro">
#for $distro in $distros:
diff --git a/webui_templates/repo_edit.tmpl b/webui_templates/repo_edit.tmpl
index 5783f37..f658239 100644
--- a/webui_templates/repo_edit.tmpl
+++ b/webui_templates/repo_edit.tmpl
@@ -1,26 +1,52 @@
#extends cobbler.webui.master
-
#block body
+#if $repo
+<script language="javascript">
+function disablename(value)
+{
+ document.getElementById("name").disabled=value;
+ if (value) {
+ document.getElementById("name").value = "$repo.name";
+ }
+}
+</script>
+#end if
+
+
<form method="post" action="$base_url/repo_save">
<fieldset id="cform">
#if $repo
<legend>Editing Repo</legend>
<input type="hidden" name="new_or_edit" value="edit"/>
+ <input type="hidden" name="oldname" value="$repo.name"/>
#else
<legend>Adding a Repo</legend>
<input type="hidden" name="new_or_edit" value="new"/>
#end if
<label for="name">Name</label>
+ #if $repo
+ <input type="text" size="32" style="width: 150px;" name="name" id="name" disabled="true"
+ #else
<input type="text" size="32" style="width: 150px;" name="name" id="name"
+ #end if
#if $repo
value="$repo.name"
#end if
/>
<br/>
+ #if $repo
+ <label for="mode">Edit Mode</label>
+ <input type="radio" name="editmode" value="edit" checked onclick="javascript:disablename(true)">Edit
+ <input type="radio" name="editmode" value="rename" onclick="javascript:disablename(false)">Rename + Edit
+ <input type="radio" name="editmode" value="copy" onclick="javascript:disablename(false)">Copy + Edit
+ <br/>
+ #end if
+
+
<label for="mirror">Mirror Location (http/ftp/rsync)</label>
<input type="text" size="32" style="width: 150px;" name="mirror" id="mirror"
#if $repo
diff --git a/webui_templates/system_edit.tmpl b/webui_templates/system_edit.tmpl
index dfbb34c..7d613e6 100644
--- a/webui_templates/system_edit.tmpl
+++ b/webui_templates/system_edit.tmpl
@@ -1,11 +1,26 @@
#extends cobbler.webui.master
+
#block body
+
+#if $system
+<script language="javascript">
+function disablename(value)
+{
+ document.getElementById("name").disabled=value;
+ if (value) {
+ document.getElementById("name").value = "$system.name";
+ }
+}
+</script>
+#end if
+
<form method="post" action="$base_url/system_save">
<fieldset id="cform">
#if $system
<input type="hidden" name="new_or_edit" value="edit"/>
+ <input type="hidden" name="oldname" value="$system.name"/>
#else
<input type="hidden" name="new_or_edit" value="new"/>
#end if
@@ -13,13 +28,25 @@
<legend>Edit a System</legend>
<label for="name">System Name</label>
+ #if $system
+ <input type="text" size="32" style="width: 150px;" name="name" id="name" disabled="true"
+ #else
<input type="text" size="32" style="width: 150px;" name="name" id="name"
+ #end if
#if $system
value="$system.name"
#end if
/>
<br/>
+ #if $system
+ <label for="mode">Edit Mode</label>
+ <input type="radio" name="editmode" value="edit" checked onclick="javascript:disablename(true)">Edit
+ <input type="radio" name="editmode" value="rename" onclick="javascript:disablename(false)">Rename + Edit
+ <input type="radio" name="editmode" value="copy" onclick="javascript:disablename(false)">Copy + Edit
+ <br/>
+ #end if
+
<label for="profile">Profile</label>
<select name="profile" id="profile">
#for $profile in $profiles: