diff options
author | Michael DeHaan <mdehaan@mdehaan.rdu.redhat.com> | 2007-09-18 15:00:07 -0400 |
---|---|---|
committer | Michael DeHaan <mdehaan@mdehaan.rdu.redhat.com> | 2007-09-18 15:00:07 -0400 |
commit | 2127d90388fbe29d6b5d0446bd971acaf5051e55 (patch) | |
tree | 4791123585b9b51a52b0ff9a72d1b5fdbe472a94 | |
parent | 6fc3f8e8496610eeddc950a04417323b951d6547 (diff) | |
download | third_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.py | 67 | ||||
-rw-r--r-- | webui_templates/distro_edit.tmpl | 28 | ||||
-rw-r--r-- | webui_templates/profile_edit.tmpl | 28 | ||||
-rw-r--r-- | webui_templates/repo_edit.tmpl | 28 | ||||
-rw-r--r-- | webui_templates/system_edit.tmpl | 27 |
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: |