diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2008-12-22 11:28:06 -0500 |
---|---|---|
committer | Michael DeHaan <mdehaan@redhat.com> | 2008-12-22 11:28:06 -0500 |
commit | c9dba7ea7214ceaa7b77bf194f7689ebdc983e6c (patch) | |
tree | 4bac0bf1604e8799c08bb8700da674ef4b309b83 /cobbler/webui/CobblerWeb.py | |
parent | 1aae8e137ddf857e65027f492fbdff9a373fdd13 (diff) | |
download | cobbler-c9dba7ea7214ceaa7b77bf194f7689ebdc983e6c.tar.gz cobbler-c9dba7ea7214ceaa7b77bf194f7689ebdc983e6c.tar.xz cobbler-c9dba7ea7214ceaa7b77bf194f7689ebdc983e6c.zip |
Apply Peter Vreman's patch to add a lot of very cool batch editing features -- changing profiles, power cycling, netboot status, etc -- all for system objects.
Diffstat (limited to 'cobbler/webui/CobblerWeb.py')
-rw-r--r-- | cobbler/webui/CobblerWeb.py | 259 |
1 files changed, 204 insertions, 55 deletions
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py index ccdfe9c0..f29a9496 100644 --- a/cobbler/webui/CobblerWeb.py +++ b/cobbler/webui/CobblerWeb.py @@ -323,8 +323,193 @@ class CobblerWeb(object): else: return self.__render('empty.tmpl',{}) - def system_save(self,name=None,oldname=None,comment=None,editmode="edit",profile=None, - new_or_edit=None, + + def system_list_action(self,actionname=None,targetlist=None,**args): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + + if actionname is None: + return self.error_page("Actionname parameter is REQUIRED.") + + if actionname == 'add': + return self.system_edit_new() + + if targetlist is None: + return self.error_page("Targetlist parameter is REQUIRED.") + + # Single item actions + if actionname == 'copy': + return self.system_edit_copy(targetlist) + if actionname == 'edit': + return self.system_edit(targetlist) + + # Multiple items actions + systems=[] + for targetname in targetlist.split(): + systems.append(self.remote.get_system(targetname,self.token)) + + return self.__render( 'system_'+actionname+'.tmpl', { + 'systems' : systems, + 'profiles' : self.remote.get_profiles(), + 'targetlist' : targetlist, + } ) + + + def system_netboot(self,targetlist=None,netboot=None,**args): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + if targetlist is None: + return self.error_page("Targetlist parameter is REQUIRED.") + if netboot is None: + return self.error_page("Netboot parameter is REQUIRED.") + try: + systems=[] + for targetname in targetlist.split(): + systems.append(self.remote.get_system_handle(targetname,self.token)) + for system in systems: + self.remote.modify_system(system, 'netboot-enabled', netboot, self.token) + self.remote.save_system(system, self.token) + return self.system_list() + except Exception, e: + log_exc(self.apache) + return self.error_page("Error while saving system: %s" % str(e)) + + + def system_profile(self,targetlist=None,profile=None,**args): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + if targetlist is None: + return self.error_page("Targetlist parameter is REQUIRED.") + if profile is None: + return self.error_page("Profile parameter is REQUIRED.") + try: + systems=[] + for targetname in targetlist.split(): + systems.append(self.remote.get_system_handle(targetname,self.token)) + for system in systems: + self.remote.modify_system(system, 'profile', profile, self.token) + self.remote.save_system(system, self.token) + return self.system_list() + except Exception, e: + log_exc(self.apache) + return self.error_page("Error while saving system: %s" % str(e)) + + + def system_power(self,targetlist=None,power=None,**args): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + if targetlist is None: + return self.error_page("Targetlist parameter is REQUIRED.") + if power is None: + return self.error_page("Power parameter is REQUIRED.") + try: + systems=[] + for targetname in targetlist.split(): + systems.append(self.remote.get_system_handle(targetname,self.token)) + for system in systems: + self.remote.power_system(system, power, self.token) + return self.system_list() + except Exception, e: + log_exc(self.apache) + return self.error_page("Error while controlling power of system: %s" % str(e)) + + + def system_rename(self,targetlist=None,name=None,**args): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + if targetlist is None: + return self.error_page("Targetlist parameter is REQUIRED.") + try: + systems=[] + for targetname in targetlist.split(): + systems.append(self.remote.get_system_handle(targetname,self.token)) + for system in systems: + self.remote.rename_system(system, name, self.token) + return self.system_list() + except Exception, e: + log_exc(self.apache) + return self.error_page("Error while renaming system: %s" % str(e)) + + + def system_delete(self,targetlist=None,**args): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + if targetlist is None: + return self.error_page("Targetlist parameter is REQUIRED.") + try: + for targetname in targetlist.split(): + self.remote.remove_system(targetname, self.token) + return self.system_list() + except Exception, e: + log_exc(self.apache) + return self.error_page("Error while deleting system: %s" % str(e)) + + + + def system_edit(self, name=None,**spam): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + + if name is None: + return self.error_page("Name parameter is REQUIRED") + input_system = self.remote.get_system(name,True) + can_edit = self.remote.check_access_no_fail(self.token,"modify_system",name) + + return self.__render( 'system_edit.tmpl', { + 'user' : self.username, + 'editmode' : 'edit', + 'editable' : can_edit, + 'system': input_system, + 'profiles': self.remote.get_profiles() + } ) + + + def system_edit_new(self,**spam): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + + can_edit = self.remote.check_access_no_fail(self.token,"new_system",None) + if not can_edit: + return self.__render('message.tmpl', { + 'message1' : "Access denied.", + 'message2' : "You do not have permission to create new objects." + }) + + return self.__render( 'system_edit.tmpl', { + 'user' : self.username, + 'editmode' : 'new', + 'editable' : True, + 'system': None, + 'profiles': self.remote.get_profiles() + } ) + + + def system_edit_copy(self, name=None,**spam): + if not self.__xmlrpc_setup(): + return self.xmlrpc_auth_failure() + + if name is None: + return self.error_page("Name parameter is REQUIRED") + + can_edit = self.remote.check_access_no_fail(self.token,"new_system",None) + if not can_edit: + return self.__render('message.tmpl', { + 'message1' : "Access denied.", + 'message2' : "You do not have permission to create new objects." + }) + + input_system = self.remote.get_system(name,True) + + return self.__render( 'system_edit.tmpl', { + 'user' : self.username, + 'editmode' : 'copy', + 'editable' : True, + 'system': input_system, + 'profiles': self.remote.get_profiles() + } ) + + + def system_save(self,name=None,comment=None,editmode="edit",profile=None, kopts=None, koptspost=None, ksmeta=None, owners=None, server_override=None, netboot='n', virtpath=None,virtram=None,virttype=None,virtcpus=None,virtfilesize=None, name_servers=None, @@ -336,37 +521,27 @@ class CobblerWeb(object): return self.xmlrpc_auth_failure() # parameter checking - if name is None and oldname is not None: - name = oldname 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: - try: - self.remote.remove_system(name,self.token) - except Exception, e: - return self.error_page("could not delete %s, %s" % (name,str(e))) - return self.system_list() # grab a reference to the object - if new_or_edit == "edit" and editmode in [ "edit", "rename" ] : + if editmode == "edit": try: - if editmode == "edit": - system = self.remote.get_system_handle( name, self.token ) - else: - system = self.remote.get_system_handle( oldname, self.token ) - + system = self.remote.get_system_handle( name, self.token ) except: return self.error_page("Failed to lookup system: %s" % name) else: + try: + system = self.remote.get_system_handle( name, self.token ) + except: + system = None + if system is not None: + return self.error_page("Failed to create new system: %s already exists." % name) system = self.remote.new_system( self.token ) # go! try: - if editmode != "rename" and name: + if editmode != "edit": self.remote.modify_system(system, 'name', name, self.token ) self.remote.modify_system(system, 'profile', profile, self.token) self.remote.modify_system(system, 'kopts', kopts, self.token) @@ -439,43 +614,9 @@ class CobblerWeb(object): log_exc(self.apache) return self.error_page("Error while saving system: %s" % str(e)) - - - if editmode == "rename" and name != oldname: - try: - self.remote.rename_system(system, name, self.token) - except Exception, e: - return self.error_page("Rename unsuccessful") - return self.system_list() - def system_edit(self, name=None,**spam): - - if not self.__xmlrpc_setup(): - return self.xmlrpc_auth_failure() - - input_system = None - if name is not None: - input_system = self.remote.get_system(name,True) - can_edit = self.remote.check_access_no_fail(self.token,"modify_system",name) - else: - can_edit = self.remote.check_access_no_fail(self.token,"new_system",None) - if not can_edit: - return self.__render('message.tmpl', { - 'message1' : "Access denied.", - 'message2' : "You do not have permission to create new objects." - }) - - - return self.__render( 'system_edit.tmpl', { - 'user' : self.username, - 'edit' : True, - 'editable' : can_edit, - 'system': input_system, - 'profiles': self.remote.get_profiles() - } ) - # ------------------------------------------------------------------------ # # Profiles # ------------------------------------------------------------------------ # @@ -992,7 +1133,15 @@ class CobblerWeb(object): profile_save.exposed = True system_edit.exposed = True + system_edit_new.exposed = True + system_edit_copy.exposed = True system_list.exposed = True + system_list_action.exposed = True + system_netboot.exposed = True + system_profile.exposed = True + system_power.exposed = True + system_rename.exposed = True + system_delete.exposed = True system_save.exposed = True repo_edit.exposed = True |