From c2fa274c0ea98946e15920d31e83f4e096f71703 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Wed, 11 Mar 2009 16:11:54 -0400 Subject: A very simple "cobbler hardlink" command to optimize space in /var/www/cobbler --- CHANGELOG | 1 + cobbler/action_hardlink.py | 56 +++++++++++++++++++++++++++++++++++++++++++++ cobbler/api.py | 5 ++++ cobbler/modules/cli_misc.py | 17 +++++++++++++- 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 cobbler/action_hardlink.py diff --git a/CHANGELOG b/CHANGELOG index 285ebcf6..5bf694dd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -20,6 +20,7 @@ Cobbler CHANGELOG - (BUGF) sleep 5 seconds between power cycling systems - (FEAT) support for /usr/bin/cobbler-register - (FEAT) web UI search feature +- (FEAT) very simple "cobbler hardlink" command to optimize space in /var/www/cobbler - Tue Mar 3 2009 - 1.4.3 - (BUGF) fix OMAPI support's (note: deprecated) usage of subprocess diff --git a/cobbler/action_hardlink.py b/cobbler/action_hardlink.py new file mode 100644 index 00000000..6e17e357 --- /dev/null +++ b/cobbler/action_hardlink.py @@ -0,0 +1,56 @@ +""" +Hard links cobbler content together to save space. + +Copyright 2009, Red Hat, Inc +Michael DeHaan + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA +""" + +import os +import utils +from cexceptions import * + +class HardLinker: + + def __init__(self,config): + """ + Constructor + """ + #self.config = config + #self.api = config.api + #self.settings = config.settings() + pass + + def run(self): + """ + Simply hardlinks directories that are cobbler managed. + This is a /very/ simple command but may grow more complex + and intelligent over time. + """ + + # FIXME: if these directories become configurable some + # changes will be required here. + + if not os.path.exists("/usr/sbin/hardlink"): + raise CX("please install 'hardlink' (/usr/sbin/hardlink) to use this feature") + + print "now hardlinking to save space, this may take some time." + + rc = os.system("/usr/sbin/hardlink -c -v /var/www/cobbler/ks_mirror /var/www/cobbler/repo_mirror") + + return rc + diff --git a/cobbler/api.py b/cobbler/api.py index ffc62644..c36d442a 100644 --- a/cobbler/api.py +++ b/cobbler/api.py @@ -36,6 +36,7 @@ import action_replicate import action_acl import action_report import action_power +import action_hardlink from cexceptions import * import sub_process import module_loader @@ -681,6 +682,10 @@ class BootAPI: iso=iso, profiles=profiles, systems=systems, tempdir=tempdir, distro=distro, standalone=standalone, source=source ) + def hardlink(self): + linker = action_hardlink.HardLinker(self._config) + return linker.run() + def replicate(self, cobbler_master = None, sync_all=False, sync_kickstarts=False, sync_trees=False, sync_repos=False, sync_triggers=False, systems=False): """ Pull down metadata from a remote cobbler server that is a master to this server. diff --git a/cobbler/modules/cli_misc.py b/cobbler/modules/cli_misc.py index f83b5c8c..a4fc4708 100644 --- a/cobbler/modules/cli_misc.py +++ b/cobbler/modules/cli_misc.py @@ -39,6 +39,21 @@ HELP_FORMAT = commands.HELP_FORMAT ######################################################## +class HardLinkFunction(commands.CobblerFunction): + def help_me(self): + return HELP_FORMAT % ("cobbler hardlink","") + + def command_name(self): + return "hardlink" + + def add_options(self, p, args): + pass + + def run(self): + self.api.hardlink() + +######################################################## + class CheckFunction(commands.CobblerFunction): def help_me(self): @@ -359,7 +374,7 @@ def cli_functions(api): ListFunction(api), StatusFunction(api), SyncFunction(api), RepoSyncFunction(api), ValidateKsFunction(api), ReplicateFunction(api), AclFunction(api), - VersionFunction(api) + VersionFunction(api), HardLinkFunction(api) ] return [] -- cgit