summaryrefslogtreecommitdiffstats
path: root/cobbler
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2008-04-24 13:46:04 -0400
committerMichael DeHaan <mdehaan@redhat.com>2008-04-24 13:46:04 -0400
commit9f314143b39edfa0943c68158d1ae954af4f4f86 (patch)
tree3216325d51476a00fe92f4fabac060f61d755cfa /cobbler
parent7fe5d10a7387fb8f7d972567db54b3e0927081c5 (diff)
downloadthird_party-cobbler-9f314143b39edfa0943c68158d1ae954af4f4f86.tar.gz
third_party-cobbler-9f314143b39edfa0943c68158d1ae954af4f4f86.tar.xz
third_party-cobbler-9f314143b39edfa0943c68158d1ae954af4f4f86.zip
It's now possible to create new kickstart templates in /var/lib/cobbler/kickstarts/ from the WebUI, as well as delete ones that are no longer being used while on the edit page for that template.
Diffstat (limited to 'cobbler')
-rw-r--r--cobbler/remote.py43
-rw-r--r--cobbler/webui/CobblerWeb.py29
-rw-r--r--cobbler/webui/master.py16
3 files changed, 76 insertions, 12 deletions
diff --git a/cobbler/remote.py b/cobbler/remote.py
index c25e700..a7e056b 100644
--- a/cobbler/remote.py
+++ b/cobbler/remote.py
@@ -24,6 +24,7 @@ import random
import base64
import string
import traceback
+import glob
import api as cobbler_api
import utils
@@ -158,6 +159,35 @@ class CobblerXMLRPCInterface:
return self._fix_none(data)
+ def get_kickstart_templates(self,token):
+ """
+ Returns all of the kickstarts that are in use by the system.
+ """
+ self.log("get_kickstart_templates",token=token)
+ self.check_access(token, "get_kickstart_templates")
+ files = {}
+ for x in self.api.profiles():
+ if x.kickstart is not None and x.kickstart != "" and x.kickstart != "<<inherit>>":
+ files[x.kickstart] = 1
+ for x in self.api.systems():
+ if x.kickstart is not None and x.kickstart != "" and x.kickstart != "<<inherit>>":
+ files[x.kickstart] = 1
+ for x in glob.glob("/var/lib/cobbler/kickstarts/*"):
+ files[x] = 1
+
+ return files.keys()
+
+ def is_kickstart_in_use(self,ks,token):
+ self.log("is_kickstart_in_use",token=token)
+ self.check_access(token, "is_kickstart_in_use")
+ for x in self.api.profiles():
+ if x.kickstart is not None and x.kickstart == ks:
+ return True
+ for x in self.api.systems():
+ if x.kickstart is not None and x.kickstart == ks:
+ return True
+ return False
+
def generate_kickstart(self,profile=None,system=None,REMOTE_ADDR=None,REMOTE_MAC=None):
self.log("generate_kickstart")
@@ -1042,9 +1072,16 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
fileh.close()
return data
else:
- fileh = open(kickstart_file,"w+")
- fileh.write(new_data)
- fileh.close()
+ if new_data == -1:
+ # delete requested
+ if not self.is_kickstart_in_use(kickstart_file,token):
+ os.remove(kickstart_file)
+ else:
+ raise CX(_("attempt to delete in-use file"))
+ else:
+ fileh = open(kickstart_file,"w+")
+ fileh.write(new_data)
+ fileh.close()
return True
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index 628d776..2eeb1a3 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -712,6 +712,20 @@ class CobblerWeb(object):
'ksfiles': self.remote.get_kickstart_templates(self.token)
} )
+ def ksfile_new(self, name=None,**spam):
+
+
+ if not self.__xmlrpc_setup():
+ return self.xmlrpc_auth_failure()
+
+ can_edit = self.remote.check_access_no_fail(self.token,"add_kickstart",name)
+ return self.__render( 'ksfile_new.tmpl', {
+ 'editable' : can_edit,
+ 'ksdata': ''
+ } )
+
+
+
def ksfile_edit(self, name=None,**spam):
@@ -721,18 +735,26 @@ class CobblerWeb(object):
can_edit = self.remote.check_access_no_fail(self.token,"modify_kickstart",name)
return self.__render( 'ksfile_edit.tmpl', {
'name': name,
+ 'deleteable' : not self.remote.is_kickstart_in_use(name,self.token),
'editable' : can_edit,
'ksdata': self.remote.read_or_write_kickstart_template(name,True,"",self.token)
} )
- def ksfile_save(self, name=None, ksdata=None, **args):
+ def ksfile_save(self, name=None, ksdata=None, delete1=None, delete2=None, isnew=None, **args):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
+
+
try:
- self.remote.read_or_write_kickstart_template(name,False,ksdata,self.token)
+ if delete1 and delete2:
+ self.remote.read_or_write_kickstart_template(name,False,-1,self.token)
+ if isnew is not None:
+ name = "/var/lib/cobbler/kickstarts/" + name
+ if not delete1 and not delete2:
+ self.remote.read_or_write_kickstart_template(name,False,ksdata,self.token)
except Exception, e:
return self.error_page("An error occurred while trying to save kickstart file %s:<br/><br/>%s" % (name,str(e)))
- return self.ksfile_edit(name=name)
+ return self.ksfile_list()
# ------------------------------------------------------------------------ #
# Miscellaneous
@@ -813,6 +835,7 @@ class CobblerWeb(object):
settings_view.exposed = True
ksfile_edit.exposed = True
+ ksfile_new.exposed = True
ksfile_save.exposed = True
ksfile_list.exposed = True
diff --git a/cobbler/webui/master.py b/cobbler/webui/master.py
index 14f06b5..22391eb 100644
--- a/cobbler/webui/master.py
+++ b/cobbler/webui/master.py
@@ -33,10 +33,10 @@ VFN=valueForName
currentTime=time.time
__CHEETAH_version__ = '2.0.1'
__CHEETAH_versionTuple__ = (2, 0, 1, 'final', 0)
-__CHEETAH_genTime__ = 1208557454.7957201
-__CHEETAH_genTimestamp__ = 'Fri Apr 18 18:24:14 2008'
+__CHEETAH_genTime__ = 1209057202.737108
+__CHEETAH_genTimestamp__ = 'Thu Apr 24 13:13:22 2008'
__CHEETAH_src__ = 'webui_templates/master.tmpl'
-__CHEETAH_srcLastModified__ = 'Fri Feb 15 14:47:43 2008'
+__CHEETAH_srcLastModified__ = 'Thu Apr 24 12:59:37 2008'
__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -69,7 +69,7 @@ class master(Template):
- ## CHEETAH: generated from #block body at line 53, col 1.
+ ## CHEETAH: generated from #block body at line 54, col 1.
trans = KWS.get("trans")
if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
trans = self.transaction # is None unless self.awake() was called
@@ -196,11 +196,15 @@ class master(Template):
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 46, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 46, col 22.
+ write('''?mode=ksfile_new" class="menu">Kickstart</a></li>
+ <li><a href="''')
+ _v = VFFSL(SL,"base_url",True) # '$base_url' on line 47, col 22
+ if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 47, col 22.
write('''?mode=repo_edit" class="menu">Repo</a></li>
<li><hr/><br/></li>
<li><a class="button sync" href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 48, col 42
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 48, col 42.
+ _v = VFFSL(SL,"base_url",True) # '$base_url' on line 49, col 42
+ if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 49, col 42.
write('''?mode=sync">Sync</a></li>
</ul>
</div>