Skip to contentSkip to conversation

wic: kickstart fixes

PATCH New Ed Bartosh 1 participant 7 messages Jan 18, 2016

lore
Share & tools
lore

Ed Bartosh

author
#0 lore raw

cover wic: kickstart fixes

Hi,

This patchset includes usability fixes and error handling improvements for new kickstart parser.

The following changes since commit a2f23fa62858b89850aab339ddec16dcf6026b37:

openssh: CVE-2016-1907 (2016-01-18 11:47:08 +0000)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib ed/wic/kickstart-fixes
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/wic/kickstart-fixes

Ed Bartosh (6):
wic: add custom exception KickStartError
wic: catch KickStartError
wic: improve processing of parseing errors
wic: removed unused imports
wic: override ArgumentParser.error
wic: rename kickstarter.py -> ksparser.py

 scripts/lib/wic/conf.py                            |  7 +++++--
 scripts/lib/wic/{kickstart.py => ksparser.py}      | 24 ++++++++++++++++++----
 scripts/lib/wic/plugins/source/bootimg-efi.py      |  2 +-
 scripts/lib/wic/plugins/source/bootimg-pcbios.py   |  2 +-
 .../lib/wic/plugins/source/isoimage-isohybrid.py   |  2 +-
 .../lib/wic/plugins/source/rootfs_pcbios_ext.py    |  1 -
 6 files changed, 28 insertions(+), 10 deletions(-)
 rename scripts/lib/wic/{kickstart.py => ksparser.py} (82%)

--
Regards,
Ed

author
#1 lore raw

PATCH 1/6 wic: add custom exception KickStartError

This exception will be raised by kickstart parser
on parsing errors and processed in the code which
calls parser to produce meaningful error output.

---
 scripts/lib/wic/kickstart.py | 3 +++
 1 file changed, 3 insertions(+)
scripts/lib/wic/kickstart.py +3 -0
index 2208395..7f0105d 100644
@@ -31,6 +31,9 @@ from argparse import ArgumentParser, ArgumentTypeError
 
 from wic.partition import Partition
 
+class KickStartError(Exception):
+    pass
+
 def sizetype(arg):
     """
     Custom type for ArgumentParser
Signature · 1 line
2.1.4
author
#2 lore raw

PATCH 2/6 wic: catch KickStartError

In reply to Ed Bartosh

Catch parsing errors and output them using msger.

---
 scripts/lib/wic/conf.py | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
scripts/lib/wic/conf.py +5 -2
index 2e29451..922a0f6 100644
@@ -17,7 +17,7 @@
 
 import os
 
-from wic.kickstart import KickStart
+from wic.kickstart import KickStart, KickStartError
 from wic import msger
 from wic.utils import misc
 
@@ -87,7 +87,10 @@ class ConfigMgr(object):
         if not ksconf:
             return
 
-        ksobj = KickStart(ksconf)
+        try:
+            ksobj = KickStart(ksconf)
+        except KickStartError as err:
+            msger.error(str(err))
 
         self.create['ks'] = ksobj
         self.create['name'] = os.path.splitext(os.path.basename(ksconf))[0]
Signature · 1 line
2.1.4
author
#3 lore raw

PATCH 3/6 wic: improve processing of parseing errors

In reply to Ed Bartosh

Caught argparse.ArgumentError
Included .ks file name and line number into the error messages.

---
 scripts/lib/wic/kickstart.py | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)
scripts/lib/wic/kickstart.py +8 -3
index 7f0105d..5d3a572 100644
@@ -27,7 +27,7 @@
 
 
 import shlex
-from argparse import ArgumentParser, ArgumentTypeError
+from argparse import ArgumentParser, ArgumentError, ArgumentTypeError
 
 from wic.partition import Partition
 
@@ -113,11 +113,16 @@ class KickStart(object):
                 line = line.strip()
                 lineno += 1
                 if line and line[0] != '#':
-                    parsed = parser.parse_args(shlex.split(line))
+                    try:
+                        parsed = parser.parse_args(shlex.split(line))
+                    except ArgumentError as err:
+                        raise KickStartError('%s:%d: %s' % \
+                                             (confpath, lineno, err))
                     if line.startswith('part'):
                         self.partitions.append(Partition(parsed, lineno))
                     else:
                         if not self.bootloader:
                              self.bootloader = parsed
                         else:
-                             raise KickStartError("Error: more than one bootloader specified")
+                             raise KickStartError("%s:%d: more than one bootloader "\
+                                                  "specified" % (confpath, lineno))
Signature · 1 line
2.1.4
author
#4 lore raw

PATCH 4/6 wic: removed unused imports

In reply to Ed Bartosh

Removed imports of wic.kickstart from plugins as they're not used in the code.

---
 scripts/lib/wic/plugins/source/bootimg-efi.py        | 2 +-
 scripts/lib/wic/plugins/source/bootimg-pcbios.py     | 2 +-
 scripts/lib/wic/plugins/source/isoimage-isohybrid.py | 2 +-
 scripts/lib/wic/plugins/source/rootfs_pcbios_ext.py  | 1 -
 4 files changed, 3 insertions(+), 4 deletions(-)
scripts/lib/wic/plugins/source/bootimg-efi.py +1 -1
index 22f9813..125c943 100644
@@ -27,7 +27,7 @@
 import os
 import shutil
 
-from wic import kickstart, msger
+from wic import msger
 from wic.pluginbase import SourcePlugin
 from wic.utils.misc import get_custom_config
 from wic.utils.oe.misc import exec_cmd, exec_native_cmd, get_bitbake_var, \
scripts/lib/wic/plugins/source/bootimg-pcbios.py +1 -1
index 0b5478e..a1bfa26 100644
@@ -27,7 +27,7 @@
 import os
 
 from wic.utils.errors import ImageError
-from wic import kickstart, msger
+from wic import msger
 from wic.utils import runner
 from wic.utils.misc import get_custom_config
 from wic.pluginbase import SourcePlugin
scripts/lib/wic/plugins/source/isoimage-isohybrid.py +1 -1
index daefff3..c1e2a5d 100644
@@ -24,7 +24,7 @@ import os
 import re
 import shutil
 
-from wic import kickstart, msger
+from wic import msger
 from wic.pluginbase import SourcePlugin
 from wic.utils.oe.misc import exec_cmd, exec_native_cmd, get_bitbake_var
 
scripts/lib/wic/plugins/source/rootfs_pcbios_ext.py +0 -1
index 48b4817..3d60e6f 100644
@@ -19,7 +19,6 @@
 #
 
 import os
-from wic import kickstart
 from wic import msger
 from wic.utils import syslinux
 from wic.utils import runner
Signature · 1 line
2.1.4
author
#5 lore raw

PATCH 5/6 wic: override ArgumentParser.error

In reply to Ed Bartosh

Overriden error method to throw exception instead of printing usage error message. Exception is caught by KickStart code to add .ks file name and line number.

---
 scripts/lib/wic/kickstart.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
scripts/lib/wic/kickstart.py +9 -1
index 5d3a572..7dbe052 100644
@@ -34,6 +34,14 @@ from wic.partition import Partition
 class KickStartError(Exception):
     pass
 
+class KickStartParser(ArgumentParser):
+    """
+    This class overwrites error method to throw exception
+    instead of producing usage message(default argparse behavior).
+    """
+    def error(self, message):
+        raise ArgumentError(None, message)
+
 def sizetype(arg):
     """
     Custom type for ArgumentParser
@@ -77,7 +85,7 @@ class KickStart(object):
         self.bootloader = None
         self.lineno = 0
 
-        parser = ArgumentParser()
+        parser = KickStartParser()
         subparsers = parser.add_subparsers()
 
         part = subparsers.add_parser('part')
Signature · 1 line
2.1.4
author
#6 lore raw

PATCH 6/6 wic: rename kickstarter.py -> ksparser.py

In reply to Ed Bartosh

kickstarter.py was not the best name for this module as previously there was a directory with the same name in scripts/lib/wic/. All files were removed from it, but .pyc files could still stay there causing imports from wic.kickstart to fail with
ImportError: cannot import name KickStart.

---
 scripts/lib/wic/conf.py                       | 2 +-
 scripts/lib/wic/{kickstart.py => ksparser.py} | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename scripts/lib/wic/{kickstart.py => ksparser.py} (100%)
scripts/lib/wic/conf.py +1 -1
index 922a0f6..f7d56d0 100644
@@ -17,7 +17,7 @@
 
 import os
 
-from wic.kickstart import KickStart, KickStartError
+from wic.ksparser import KickStart, KickStartError
 from wic import msger
 from wic.utils import misc
 
scripts/lib/wic/ksparser.py renamed from scripts/lib/wic/kickstart.py +0 -0
similarity index 100%
rename from scripts/lib/wic/kickstart.py
rename to scripts/lib/wic/ksparser.py
Signature · 1 line
2.1.4