Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Debian User (http://www.linux-archive.org/debian-user/)
-   -   Add support for resizing block devices via kickstart. (http://www.linux-archive.org/debian-user/648114-add-support-resizing-block-devices-via-kickstart.html)

David Lehman 03-23-2012 04:01 PM

Add support for resizing block devices via kickstart.
 
logvol and partition get a new option, --resize. It must be combined
with --size=<newsize> and either --onpart or --useexisting.
---
pyanaconda/kickstart.py | 53 +++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
index 5167d1f..e870f97 100644
--- a/pyanaconda/kickstart.py
+++ b/pyanaconda/kickstart.py
@@ -524,7 +524,7 @@ class Lang(commands.lang.FC3_Lang):
self.anaconda.instLanguage.buildLocale()
self.anaconda.dispatch.skip_steps("language")

-class LogVolData(commands.logvol.F15_LogVolData):
+class LogVolData(commands.logvol.F17_LogVolData):
def execute(self):
storage = self.anaconda.storage
devicetree = storage.devicetree
@@ -562,6 +562,23 @@ class LogVolData(commands.logvol.F15_LogVolData):
if not dev:
raise KickstartValueError, formatErrorMsg(self.lineno, msg="No preexisting logical volume with the name "%s" was found." % self.name)

+ if self.resize:
+ if self.size < dev.currentSize:
+ # shrink
+ try:
+ devicetree.registerAction(ActionResizeFormat(dev, self.size))
+ devicetree.registerAction(ActionResizeDevice(dev, self.size))
+ except ValueError:
+ raise KickstartValueError(formatErrorMsg(self.lineno,
+ msg="Invalid target size (%d) for device %s" % (self.size, dev.name)))
+ else:
+ # grow
+ try:
+ devicetree.registerAction(ActionResizeDevice(dev, self.size))
+ devicetree.registerAction(ActionResizeFormat(dev, self.size))
+ except ValueError:
+ raise KickstartValueError(formatErrorMsg(self.lineno,
+ msg="Invalid target size (%d) for device %s" % (self.size, dev.name)))
dev.format.mountpoint = self.mountpoint
dev.format.mountopts = self.fsopts
self.anaconda.dispatch.skip_steps("partition", "parttype")
@@ -601,6 +618,14 @@ class LogVolData(commands.logvol.F15_LogVolData):
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent LV %s in logvol command" % self.name)

removeExistingFormat(device, storage)
+
+ if self.resize:
+ try:
+ devicetree.registerAction(ActionResizeDevice(devic e, self.size))
+ except ValueError:
+ raise KickstartValueError(formatErrorMsg(self.lineno,
+ msg="Invalid target size (%d) for device %s" % (self.size, device.name)))
+
devicetree.registerAction(ActionCreateFormat(devic e, format))
else:
# If a previous device has claimed this mount point, delete the
@@ -795,7 +820,7 @@ class DmRaid(commands.dmraid.FC6_DmRaid):
def parse(self, args):
raise NotImplementedError("The dmraid kickstart command is not currently supported")

-class PartitionData(commands.partition.F12_PartData):
+class PartitionData(commands.partition.F17_PartData):
def execute(self):
storage = self.anaconda.storage
devicetree = storage.devicetree
@@ -892,6 +917,23 @@ class PartitionData(commands.partition.F12_PartData):
if not dev:
raise KickstartValueError, formatErrorMsg(self.lineno, msg="No preexisting partition with the name "%s" was found." % self.onPart)

+ if self.resize:
+ if self.size < dev.currentSize:
+ # shrink
+ try:
+ devicetree.registerAction(ActionResizeFormat(dev, self.size))
+ devicetree.registerAction(ActionResizeDevice(dev, self.size))
+ except ValueError:
+ raise KickstartValueError(formatErrorMsg(self.lineno,
+ msg="Invalid target size (%d) for device %s" % (self.size, dev.name)))
+ else:
+ # grow
+ try:
+ devicetree.registerAction(ActionResizeDevice(dev, self.size))
+ devicetree.registerAction(ActionResizeFormat(dev, self.size))
+ except ValueError:
+ raise KickstartValueError(formatErrorMsg(self.lineno,
+ msg="Invalid target size (%d) for device %s" % (self.size, dev.name)))
dev.format.mountpoint = self.mountpoint
dev.format.mountopts = self.fsopts
self.anaconda.dispatch.skip_steps("partition", "parttype")
@@ -952,6 +994,13 @@ class PartitionData(commands.partition.F12_PartData):
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent partition %s in partition command" % self.onPart)

removeExistingFormat(device, storage)
+ if self.resize:
+ try:
+ devicetree.registerAction(ActionResizeDevice(devic e, self.size))
+ except ValueError:
+ raise KickstartValueError(formatErrorMsg(self.lineno,
+ msg="Invalid target size (%d) for device %s" % (self.size, device.name)))
+
devicetree.registerAction(ActionCreateFormat(devic e, kwargs["format"]))
else:
# If a previous device has claimed this mount point, delete the
--
1.7.7.6

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


All times are GMT. The time now is 05:43 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.