We want the user to be able to manually navigate advanced storage when using a ks.cfg without partitioning sections. --- pykickstart/commands/ignoredisk.py | 47 +++++++++++++++++++++++++++++++++-- pykickstart/handlers/control.py | 2 +- tests/commands/ignoredisk.py | 17 +++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/pykickstart/commands/ignoredisk.py b/pykickstart/commands/ignoredisk.py index 607d696..83e1048 100644 --- a/pykickstart/commands/ignoredisk.py +++ b/pykickstart/commands/ignoredisk.py @@ -77,11 +77,12 @@ class F8_IgnoreDisk(FC3_IgnoreDisk):
return retval
- def parse(self, args): + def parse(self, args, errorCheck=True): retval = FC3_IgnoreDisk.parse(self, args)
- if (len(self.ignoredisk) == 0 and len(self.onlyuse) == 0) or (len(self.ignoredisk) > 0 and (len(self.onlyuse) > 0)): - raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --drives or --only-use must be specified for ignoredisk command.")) + if errorCheck: + if (len(self.ignoredisk) == 0 and len(self.onlyuse) == 0) or (len(self.ignoredisk) > 0 and (len(self.onlyuse) > 0)): + raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --drives or --only-use must be specified for ignoredisk command."))
return retval
@@ -96,3 +97,43 @@ class F8_IgnoreDisk(FC3_IgnoreDisk): op.add_option("--only-use", dest="onlyuse", action="callback", callback=drive_cb, nargs=1, type="string") return op + +class RHEL6_IgnoreDisk(F8_IgnoreDisk): + removedKeywords = F8_IgnoreDisk.removedKeywords + removedAttrs = F8_IgnoreDisk.removedAttrs + + def __init__(self, writePriority=0, *args, **kwargs): + F8_IgnoreDisk.__init__(self, writePriority, *args, **kwargs) + + self.interactive = kwargs.get("interactive", False) + if self.interactive: + self.ignoredisk = [] + + def __str__(self): + retval = F8_IgnoreDisk.__str__(self) + + if self.interactive: + retval = "ignoredisk --interactive\n" + + return retval + + def parse(self, args): + retval = F8_IgnoreDisk.parse(self, args, errorCheck=False) + + howmany = 0 + if len(self.ignoredisk) > 0: + howmany += 1 + if len(self.onlyuse) > 0: + howmany += 1 + if self.interactive: + howmany += 1 + if howmany != 1: + raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --drives , --only-use , or --interactive must be specified for ignoredisk command.")) + + return retval + + def _getParser(self): + op = F8_IgnoreDisk._getParser(self) + op.add_option("--interactive", dest="interactive", action="store_true", + default=False) + return op diff --git a/pykickstart/handlers/control.py b/pykickstart/handlers/control.py index 51651b8..2bcb566 100644 --- a/pykickstart/handlers/control.py +++ b/pykickstart/handlers/control.py @@ -830,7 +830,7 @@ commandMap = { "group": group.F12_Group, "halt": reboot.FC6_Reboot, "harddrive": method.F13_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, + "ignoredisk": ignoredisk.RHEL6_IgnoreDisk, "install": upgrade.F11_Upgrade, "interactive": interactive.FC3_Interactive, "iscsi": iscsi.F10_Iscsi, diff --git a/tests/commands/ignoredisk.py b/tests/commands/ignoredisk.py index 23c5840..f535689 100644 --- a/tests/commands/ignoredisk.py +++ b/tests/commands/ignoredisk.py @@ -59,5 +59,22 @@ class F8_TestCase(FC3_TestCase): self.assert_parse_error("ignoredisk --drives=sda --only-use=sdb", KickstartValueError) self.assert_parse_error("ignoredisk --only-use=sda --drives=sdb", KickstartValueError)
+class RHEL6_TestCase(F8_TestCase): + def runTest(self): + # Run parents class tests + F8_TestCase.runTest(self) + + # pass + self.assert_parse("ignoredisk --interactive", "ignoredisk --interactive\n") + + # fail + # both options provided + self.assert_parse_error("ignoredisk --drives=sda --interactive", KickstartValueError) + self.assert_parse_error("ignoredisk --interactive --drives=sda", KickstartValueError) + self.assert_parse_error("ignoredisk --only-use=sda --interactive", KickstartValueError) + self.assert_parse_error("ignoredisk --interactive --only-use=sda", KickstartValueError) + self.assert_parse_error("ignoredisk --interactive --drives=sda --only-use=sdb", KickstartValueError) + self.assert_parse_error("ignoredisk --only-use=sda --drives=sdb --interactive", KickstartValueError) + if __name__ == "__main__": unittest.main()
People run ks.cfg with no partitioning section all the time and expect to get the partitioning screen; this allows that to (conditionally) include the device filtering UI. --- anaconda | 1 + kickstart.py | 9 ++++++--- storage/__init__.py | 5 ++++- 3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/anaconda b/anaconda index 17003c9..b55c0f9 100755 --- a/anaconda +++ b/anaconda @@ -1091,6 +1091,7 @@ if __name__ == "__main__": # Before we set up the storage system, we need to know which disks to # ignore, etc. Luckily that's all in the kickstart data. anaconda.id.storage.zeroMbr = ksdata.zerombr.zerombr + anaconda.id.storage.ignoreDiskInteractive = ksdata.ignoredisk.interactive anaconda.id.storage.ignoredDisks = ksdata.ignoredisk.ignoredisk anaconda.id.storage.exclusiveDisks = ksdata.ignoredisk.onlyuse
diff --git a/kickstart.py b/kickstart.py index 52e396f..89321e4 100644 --- a/kickstart.py +++ b/kickstart.py @@ -354,9 +354,9 @@ class Firstboot(commands.firstboot.FC3_Firstboot): def execute(self, anaconda): anaconda.id.firstboot = self.firstboot
-class IgnoreDisk(commands.ignoredisk.F8_IgnoreDisk): +class IgnoreDisk(commands.ignoredisk.RHEL6_IgnoreDisk): def parse(self, args): - retval = commands.ignoredisk.F8_IgnoreDisk.parse(self, args) + retval = commands.ignoredisk.RHEL6_IgnoreDisk.parse(self, args)
# See comment in ClearPart.parse drives = [] @@ -382,9 +382,11 @@ class IgnoreDisk(commands.ignoredisk.F8_IgnoreDisk): return retval
def execute(self, anaconda): + anaconda.id.storage.ignoreDiskInteractive = self.interactive anaconda.id.storage.ignoredDisks = self.ignoredisk anaconda.id.storage.exclusiveDisks = self.onlyuse - anaconda.id.ksdata.skipSteps.extend(["filter", "filtertype"]) + if not self.interactive: + anaconda.id.ksdata.skipSteps.extend(["filter", "filtertype"])
class Iscsi(commands.iscsi.F10_Iscsi): def parse(self, args): @@ -1437,6 +1439,7 @@ def setSteps(anaconda): dispatch.skipStep("confirmupgrade") dispatch.skipStep("welcome")
+ if not interactive and not anaconda.id.storage.ignoreDiskInteractive: # Since ignoredisk is optional and not specifying it means you want to # consider all possible disks, we should not stop on the filter steps # unless it's an interactive install. diff --git a/storage/__init__.py b/storage/__init__.py index f541014..c7863e0 100644 --- a/storage/__init__.py +++ b/storage/__init__.py @@ -245,6 +245,7 @@ class Storage(object): self.anaconda = anaconda
# storage configuration variables + self.ignoreDiskInteractive = False self.ignoredDisks = [] self.exclusiveDisks = [] self.doAutoPart = False @@ -1101,7 +1102,9 @@ class Storage(object): f.write("#clearpart %s\n" % " ".join(args))
# ignoredisks - if self.ignoredDisks: + if self.ignoreDiskInteractive: + f.write("#ignoredisk --interactive\n") + elif self.ignoredDisks: f.write("#ignoredisk --drives=%s\n" % ",".join(self.ignoredDisks)) elif self.exclusiveDisks: f.write("#ignoredisk --only-use=%s\n" % ",".join(self.exclusiveDisks))
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Ack.
On Thu, 27 May 2010, Peter Jones wrote:
People run ks.cfg with no partitioning section all the time and expect to get the partitioning screen; this allows that to (conditionally) include the device filtering UI.
anaconda | 1 + kickstart.py | 9 ++++++--- storage/__init__.py | 5 ++++- 3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/anaconda b/anaconda index 17003c9..b55c0f9 100755 --- a/anaconda +++ b/anaconda @@ -1091,6 +1091,7 @@ if __name__ == "__main__": # Before we set up the storage system, we need to know which disks to # ignore, etc. Luckily that's all in the kickstart data. anaconda.id.storage.zeroMbr = ksdata.zerombr.zerombr
anaconda.id.storage.ignoreDiskInteractive = ksdata.ignoredisk.interactive anaconda.id.storage.ignoredDisks = ksdata.ignoredisk.ignoredisk anaconda.id.storage.exclusiveDisks = ksdata.ignoredisk.onlyusediff --git a/kickstart.py b/kickstart.py index 52e396f..89321e4 100644 --- a/kickstart.py +++ b/kickstart.py @@ -354,9 +354,9 @@ class Firstboot(commands.firstboot.FC3_Firstboot): def execute(self, anaconda): anaconda.id.firstboot = self.firstboot
-class IgnoreDisk(commands.ignoredisk.F8_IgnoreDisk): +class IgnoreDisk(commands.ignoredisk.RHEL6_IgnoreDisk): def parse(self, args):
retval = commands.ignoredisk.F8_IgnoreDisk.parse(self, args)
retval = commands.ignoredisk.RHEL6_IgnoreDisk.parse(self, args) # See comment in ClearPart.parse drives = []@@ -382,9 +382,11 @@ class IgnoreDisk(commands.ignoredisk.F8_IgnoreDisk): return retval
def execute(self, anaconda):
anaconda.id.storage.ignoreDiskInteractive = self.interactive anaconda.id.storage.ignoredDisks = self.ignoredisk anaconda.id.storage.exclusiveDisks = self.onlyuse
anaconda.id.ksdata.skipSteps.extend(["filter", "filtertype"])
if not self.interactive:anaconda.id.ksdata.skipSteps.extend(["filter", "filtertype"])class Iscsi(commands.iscsi.F10_Iscsi): def parse(self, args): @@ -1437,6 +1439,7 @@ def setSteps(anaconda): dispatch.skipStep("confirmupgrade") dispatch.skipStep("welcome")
- if not interactive and not anaconda.id.storage.ignoreDiskInteractive: # Since ignoredisk is optional and not specifying it means you want to # consider all possible disks, we should not stop on the filter steps # unless it's an interactive install.
diff --git a/storage/__init__.py b/storage/__init__.py index f541014..c7863e0 100644 --- a/storage/__init__.py +++ b/storage/__init__.py @@ -245,6 +245,7 @@ class Storage(object): self.anaconda = anaconda
# storage configuration variables
self.ignoreDiskInteractive = False self.ignoredDisks = [] self.exclusiveDisks = [] self.doAutoPart = False@@ -1101,7 +1102,9 @@ class Storage(object): f.write("#clearpart %s\n" % " ".join(args))
# ignoredisks
if self.ignoredDisks:
if self.ignoreDiskInteractive:f.write("#ignoredisk --interactive\n")elif self.ignoredDisks: f.write("#ignoredisk --drives=%s\n" % ",".join(self.ignoredDisks)) elif self.exclusiveDisks: f.write("#ignoredisk --only-use=%s\n" % ",".join(self.exclusiveDisks))
- -- David Cantrell dcantrell@redhat.com Red Hat / Honolulu, HI
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Ack.
On Thu, 27 May 2010, Peter Jones wrote:
We want the user to be able to manually navigate advanced storage when using a ks.cfg without partitioning sections.
pykickstart/commands/ignoredisk.py | 47 +++++++++++++++++++++++++++++++++-- pykickstart/handlers/control.py | 2 +- tests/commands/ignoredisk.py | 17 +++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/pykickstart/commands/ignoredisk.py b/pykickstart/commands/ignoredisk.py index 607d696..83e1048 100644 --- a/pykickstart/commands/ignoredisk.py +++ b/pykickstart/commands/ignoredisk.py @@ -77,11 +77,12 @@ class F8_IgnoreDisk(FC3_IgnoreDisk):
return retval
- def parse(self, args):
- def parse(self, args, errorCheck=True): retval = FC3_IgnoreDisk.parse(self, args)
if (len(self.ignoredisk) == 0 and len(self.onlyuse) == 0) or (len(self.ignoredisk) > 0 and (len(self.onlyuse) > 0)):raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --drives or --only-use must be specified for ignoredisk command."))
if errorCheck:if (len(self.ignoredisk) == 0 and len(self.onlyuse) == 0) or (len(self.ignoredisk) > 0 and (len(self.onlyuse) > 0)):raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --drives or --only-use must be specified for ignoredisk command.")) return retval@@ -96,3 +97,43 @@ class F8_IgnoreDisk(FC3_IgnoreDisk): op.add_option("--only-use", dest="onlyuse", action="callback", callback=drive_cb, nargs=1, type="string") return op
+class RHEL6_IgnoreDisk(F8_IgnoreDisk):
- removedKeywords = F8_IgnoreDisk.removedKeywords
- removedAttrs = F8_IgnoreDisk.removedAttrs
- def __init__(self, writePriority=0, *args, **kwargs):
F8_IgnoreDisk.__init__(self, writePriority, *args, **kwargs)self.interactive = kwargs.get("interactive", False)if self.interactive:self.ignoredisk = []- def __str__(self):
retval = F8_IgnoreDisk.__str__(self)if self.interactive:retval = "ignoredisk --interactive\n"return retval- def parse(self, args):
retval = F8_IgnoreDisk.parse(self, args, errorCheck=False)howmany = 0if len(self.ignoredisk) > 0:howmany += 1if len(self.onlyuse) > 0:howmany += 1if self.interactive:howmany += 1if howmany != 1:raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --drives , --only-use , or --interactive must be specified for ignoredisk command."))return retval- def _getParser(self):
op = F8_IgnoreDisk._getParser(self)op.add_option("--interactive", dest="interactive", action="store_true",default=False)return opdiff --git a/pykickstart/handlers/control.py b/pykickstart/handlers/control.py index 51651b8..2bcb566 100644 --- a/pykickstart/handlers/control.py +++ b/pykickstart/handlers/control.py @@ -830,7 +830,7 @@ commandMap = { "group": group.F12_Group, "halt": reboot.FC6_Reboot, "harddrive": method.F13_Method,
"ignoredisk": ignoredisk.F8_IgnoreDisk,
"ignoredisk": ignoredisk.RHEL6_IgnoreDisk, "install": upgrade.F11_Upgrade, "interactive": interactive.FC3_Interactive, "iscsi": iscsi.F10_Iscsi,diff --git a/tests/commands/ignoredisk.py b/tests/commands/ignoredisk.py index 23c5840..f535689 100644 --- a/tests/commands/ignoredisk.py +++ b/tests/commands/ignoredisk.py @@ -59,5 +59,22 @@ class F8_TestCase(FC3_TestCase): self.assert_parse_error("ignoredisk --drives=sda --only-use=sdb", KickstartValueError) self.assert_parse_error("ignoredisk --only-use=sda --drives=sdb", KickstartValueError)
+class RHEL6_TestCase(F8_TestCase):
- def runTest(self):
# Run parents class testsF8_TestCase.runTest(self)# passself.assert_parse("ignoredisk --interactive", "ignoredisk --interactive\n")# fail# both options providedself.assert_parse_error("ignoredisk --drives=sda --interactive", KickstartValueError)self.assert_parse_error("ignoredisk --interactive --drives=sda", KickstartValueError)self.assert_parse_error("ignoredisk --only-use=sda --interactive", KickstartValueError)self.assert_parse_error("ignoredisk --interactive --only-use=sda", KickstartValueError)self.assert_parse_error("ignoredisk --interactive --drives=sda --only-use=sdb", KickstartValueError)self.assert_parse_error("ignoredisk --only-use=sda --drives=sdb --interactive", KickstartValueError)if __name__ == "__main__": unittest.main()
- -- David Cantrell dcantrell@redhat.com Red Hat / Honolulu, HI
anaconda-devel@lists.fedoraproject.org