summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2009-03-11 16:11:54 -0400
committerMichael DeHaan <mdehaan@redhat.com>2009-03-11 16:11:54 -0400
commitc2fa274c0ea98946e15920d31e83f4e096f71703 (patch)
tree6df436ff6f2ae91ecee51f1c7e4a062073c7f0d3
parentbd8fcadb63c2d6bda4399d61b60e2661ecefc1cd (diff)
downloadcobbler-c2fa274c0ea98946e15920d31e83f4e096f71703.tar.gz
cobbler-c2fa274c0ea98946e15920d31e83f4e096f71703.tar.xz
cobbler-c2fa274c0ea98946e15920d31e83f4e096f71703.zip
A very simple "cobbler hardlink" command to optimize space in /var/www/cobbler
-rw-r--r--CHANGELOG1
-rw-r--r--cobbler/action_hardlink.py56
-rw-r--r--cobbler/api.py5
-rw-r--r--cobbler/modules/cli_misc.py17
4 files changed, 78 insertions, 1 deletions
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 <mdehaan@redhat.com>
+
+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 []