summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-14 14:59:29 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-14 14:59:29 -0400
commit9fce10e7cf0a616b14c031d7b03c78f58a887c56 (patch)
treedabbb05b0eee7ec6f57ab943ee767cd5e98c016e
parent522f4a9573db3443b6fdba095a97daf7755bbaf3 (diff)
downloadthird_party-cobbler-9fce10e7cf0a616b14c031d7b03c78f58a887c56.tar.gz
third_party-cobbler-9fce10e7cf0a616b14c031d7b03c78f58a887c56.tar.xz
third_party-cobbler-9fce10e7cf0a616b14c031d7b03c78f58a887c56.zip
Repos are now added to the WebUI.
-rw-r--r--cobbler.spec1
-rw-r--r--cobbler/item_repo.py1
-rw-r--r--cobbler/utils.py3
-rw-r--r--cobbler/webui/CobblerWeb.py63
-rw-r--r--cobbler/webui/master.py18
-rw-r--r--setup.py3
-rw-r--r--webui_templates/master.tmpl6
-rw-r--r--webui_templates/repo_edit.tmpl95
-rw-r--r--webui_templates/repo_list.tmpl33
9 files changed, 212 insertions, 11 deletions
diff --git a/cobbler.spec b/cobbler.spec
index e1db970..4910cb8 100644
--- a/cobbler.spec
+++ b/cobbler.spec
@@ -21,6 +21,7 @@ Requires: syslinux
Requires(post): /sbin/chkconfig
Requires(preun): /sbin/chkconfig
Requires(preun): /sbin/service
+BuildRequires: redhat-rpm-config
BuildRequires: python-devel
BuildRequires: python-cheetah
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
diff --git a/cobbler/item_repo.py b/cobbler/item_repo.py
index 51fe9a7..48fefc5 100644
--- a/cobbler/item_repo.py
+++ b/cobbler/item_repo.py
@@ -113,6 +113,7 @@ class Repo(item.Item):
except:
pass
self.rpm_list = rpmlist
+ return True
def set_createrepo_flags(self,createrepo_flags):
"""
diff --git a/cobbler/utils.py b/cobbler/utils.py
index 591a7e3..2feee70 100644
--- a/cobbler/utils.py
+++ b/cobbler/utils.py
@@ -299,12 +299,15 @@ def blender(remove_hashes, root_obj):
def flatten(data):
# convert certain nested hashes to strings.
+ # FIXME: this function should be made more generic
if data.has_key("kernel_options"):
data["kernel_options"] = hash_to_string(data["kernel_options"])
if data.has_key("ks_meta"):
data["ks_meta"] = hash_to_string(data["ks_meta"])
if data.has_key("repos") and type(data["repos"]) == list:
data["repos"] = " ".join(data["repos"])
+ if data.has_key("rpm_list") and type(data["rpm_list"]) == list:
+ data["rpm_list"] = " ".join(data["rpm_list"])
return data
def __consolidate(node,results):
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index 2466f68..ab7afec 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -346,7 +346,64 @@ class CobblerWeb(object):
# Repos
# ------------------------------------------------------------------------ #
- # integrate repository adding/editing as with the other objects.
+ def repo_list(self):
+ self.__xmlrpc_setup()
+ repos = self.remote.get_repos()
+ if len(repos) > 0:
+ return self.__render( 'repo_list.tmpl', {
+ 'repos': repos
+ })
+ else:
+ return self.__render('empty.tmpl', {})
+
+ def repo_edit(self, name=None):
+ self.__xmlrpc_setup()
+
+ input_repo = None
+ if name is not None:
+ input_repo = self.remote.get_repo(name, True)
+
+ return self.__render( 'repo_edit.tmpl', {
+ 'repo': input_repo,
+ } )
+
+ def repo_save(self,name=None,new_or_edit=None,mirror=None,keepupdated=None,localfilename=None,rpmlist=None,createrepoflags=None,**args):
+ self.__xmlrpc_setup()
+
+ # pre-command parameter checking
+ if name is None:
+ return self.error_page("name is required")
+ if mirror is None:
+ return self.error_page("mirror is required")
+
+ # grab a reference to the object
+ if new_or_edit == "edit":
+ try:
+ repo = self.remote.get_repo_handle( name, self.token)
+ except:
+ return self.error_page("Failed to lookup repo: %s" % name)
+ else:
+ repo = self.remote.new_repo(self.token)
+
+ try:
+ self.remote.modify_repo(repo, 'name', name, self.token)
+ self.remote.modify_repo(repo, 'mirror', mirror, self.token)
+ if keepupdated:
+ self.remote.modify_repo(repo, 'keep-updated', keepupdated, self.token)
+ if localfilename:
+ self.remote.modify_repo(repo, 'local-filename', localfilename, self.token)
+ if rpmlist:
+ self.remote.modify_repo(repo, 'rpm-list', rpmlist, self.token)
+ if createrepoflags:
+ self.remote.modify_distro(repo, 'createrepo-flags', createrepoflags, self.token)
+ self.remote.save_repo(repo, self.token)
+ except Exception, e:
+ log_exc()
+ return self.error_page("Error while saving repo: %s" % str(e))
+
+ return self.repo_edit(name=name)
+
+
# ------------------------------------------------------------------------ #
# Kickstart files
@@ -408,6 +465,10 @@ class CobblerWeb(object):
system_list.exposed = True
system_save.exposed = True
+ repo_edit.exposed = True
+ repo_list.exposed = True
+ repo_save.exposed = True
+
settings_view.exposed = True
ksfile_view.exposed = True
ksfile_list.exposed = True
diff --git a/cobbler/webui/master.py b/cobbler/webui/master.py
index a9cfdab..1525f4f 100644
--- a/cobbler/webui/master.py
+++ b/cobbler/webui/master.py
@@ -33,10 +33,10 @@ VFN=valueForName
currentTime=time.time
__CHEETAH_version__ = '2.0rc8'
__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 8)
-__CHEETAH_genTime__ = 1189723059.0217919
-__CHEETAH_genTimestamp__ = 'Thu Sep 13 18:37:39 2007'
+__CHEETAH_genTime__ = 1189794092.422076
+__CHEETAH_genTimestamp__ = 'Fri Sep 14 14:21:32 2007'
__CHEETAH_src__ = 'webui_templates/master.tmpl'
-__CHEETAH_srcLastModified__ = 'Thu Sep 13 18:27:46 2007'
+__CHEETAH_srcLastModified__ = 'Fri Sep 14 14:19:18 2007'
__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -172,7 +172,10 @@ class master(Template):
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 39, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 39, col 22.
write('''/ksfile_list" class="menu">Kickstarts</a></li>
- <li>(Pending: Repos)</li>
+ <li><a href="''')
+ _v = VFFSL(SL,"base_url",True) # '$base_url' on line 40, col 22
+ if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 40, col 22.
+ write('''/repo_list" class="menu">Repos</a></li>
<li><hr/></li>
<li>ADD</li>
<li><a href="''')
@@ -187,9 +190,12 @@ class master(Template):
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 45, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 45, col 22.
write('''/system_edit" class="menu">System</a></li>
- <li>(Pending: Repo)</li>
+ <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('''/repo_edit" class="menu">Repo</a></li>
<li><hr/></li>
- <li>Sync</li>
+ <li>&lt;Sync&gt;</li>
</ul>
</div>
diff --git a/setup.py b/setup.py
index 8a59123..039e007 100644
--- a/setup.py
+++ b/setup.py
@@ -126,7 +126,8 @@ if __name__ == "__main__":
(wwwtmpl, ['webui_templates/profile_edit.tmpl']),
(wwwtmpl, ['webui_templates/system_list.tmpl']),
(wwwtmpl, ['webui_templates/system_edit.tmpl']),
- #(wwwtmpl, ['webui_templates/repo_list.tmpl']),
+ (wwwtmpl, ['webui_templates/repo_list.tmpl']),
+ (wwwtmpl, ['webui_templates/repo_edit.tmpl']),
# Web UI common templates
(wwwtmpl, ['webui_templates/error_page.tmpl']),
diff --git a/webui_templates/master.tmpl b/webui_templates/master.tmpl
index b856f6d..0e73c03 100644
--- a/webui_templates/master.tmpl
+++ b/webui_templates/master.tmpl
@@ -37,15 +37,15 @@
<li><a href="$base_url/profile_list" class="menu">Profiles</a></li>
<li><a href="$base_url/system_list" class="menu">Systems</a></li>
<li><a href="$base_url/ksfile_list" class="menu">Kickstarts</a></li>
- <li>(Pending: Repos)</li>
+ <li><a href="$base_url/repo_list" class="menu">Repos</a></li>
<li><hr/></li>
<li>ADD</li>
<li><a href="$base_url/distro_edit" class="menu">Distro</a></li>
<li><a href="$base_url/profile_edit" class="menu">Profile</a></li>
<li><a href="$base_url/system_edit" class="menu">System</a></li>
- <li>(Pending: Repo)</li>
+ <li><a href="$base_url/repo_edit" class="menu">Repo</a></li>
<li><hr/></li>
- <li>Sync</li>
+ <li>&lt;Sync&gt;</li>
</ul>
</div>
diff --git a/webui_templates/repo_edit.tmpl b/webui_templates/repo_edit.tmpl
new file mode 100644
index 0000000..5783f37
--- /dev/null
+++ b/webui_templates/repo_edit.tmpl
@@ -0,0 +1,95 @@
+#extends cobbler.webui.master
+
+#block body
+
+<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"/>
+ #else
+ <legend>Adding a Repo</legend>
+ <input type="hidden" name="new_or_edit" value="new"/>
+ #end if
+
+ <label for="name">Name</label>
+ <input type="text" size="32" style="width: 150px;" name="name" id="name"
+ #if $repo
+ value="$repo.name"
+ #end if
+ />
+ <br/>
+
+ <label for="mirror">Mirror Location (http/ftp/rsync)</label>
+ <input type="text" size="32" style="width: 150px;" name="mirror" id="mirror"
+ #if $repo
+ value="$repo.mirror"
+ #end if
+ />
+ <br/>
+
+ <label for="keepupdated">Keep Updated</label>
+ <input type="checkbox" name="keepupdated" id="keepupdated"
+ #if $repo
+ #if $repo.keep_updated
+ selected="True"
+ #else
+ selected="False"
+ #end if
+ #else
+ selected = "True"
+ #end if
+ />
+ <br/>
+
+ <label for="localfilename">Local Filename</label>
+ <input type="text" size="32" style="width: 150px;" name="localfilename" id="localfilename"
+ #if $repo
+ value="$repo.local_filename"
+ #end if
+ />
+
+
+ <br/>
+
+ ## FIXME: input field sizes should be larger (universally)
+ ## FIXME: make this a text area?
+ <label for="rpmlist">RPM List</label>
+ <input type="text" size="32" style="width: 150px;" name="rpmlist" id="rpmlist"
+ #if $repo
+ value="$repo.rpm_list"
+ #end if
+ />
+ <br/>
+
+ <label for="createrepo_flags">createrepo flags</label>
+ <input type="text" size="32" style="width: 150px;" name="creatrepoflags" id="createrepoflags"
+ #if $repo
+ value="$repo.createrepo_flags"
+ #end if
+ />
+ <br/>
+
+ #if $repo
+ <label for="delete">Delete</label>
+ <input type="checkbox" name="delete1" value="delete1">Yes
+ <input type="checkbox" name="delete2" value="delete2">Really
+ <br/>
+ #end if
+
+ <input type="submit" name="submit" value="Save"/>
+ <input type="reset" name="reset" value="Reset"/>
+</fieldset>
+</form>
+<br/>
+
+<blockquote>
+Note: Newly added repos contain no package content until "cobbler reposync" is run
+from the command line, which means that profiles relying on these repositories will
+not install. Placing "cobbler reposync" on a crontab to ensure frequent updates
+is recommended procedure.
+</blockquote>
+
+<br/>
+#end block body
diff --git a/webui_templates/repo_list.tmpl b/webui_templates/repo_list.tmpl
new file mode 100644
index 0000000..0aff65c
--- /dev/null
+++ b/webui_templates/repo_list.tmpl
@@ -0,0 +1,33 @@
+#extends cobbler.webui.master
+#attr $title = "Cobbler: List of Repositories"
+
+#block body
+<table class="sortable">
+ <thead>
+ <caption>Cobbler Repos</caption>
+ <tr>
+ <th class="text">Name</th>
+ <th class="text">Mirror</th>
+ </tr>
+ </thead>
+ <tbody>
+ #set $evenodd = 1
+ #for $repo in $repos
+ #if $evenodd % 2 == 0
+ #set $tr_class = "roweven"
+ #else
+ #set $tr_class = "rowodd"
+ #end if
+ #set $evenodd += 1
+
+ <tr class="$tr_class">
+ <td>
+ <a href="$base_url/repo_edit?name=$repo.name">$repo.name</a>
+ </td>
+ <td>$repo.mirror</td>
+ </tr>
+ #end for
+ </tbody>
+</table>
+#end block body
+