Merge related patch for the latest pykickstarter 59/279659/1
authorbiao716.wang <biao716.wang@samsung.com>
Mon, 15 Aug 2022 08:00:46 +0000 (17:00 +0900)
committerbiao716.wang <biao716.wang@samsung.com>
Mon, 15 Aug 2022 08:00:46 +0000 (17:00 +0900)
Change-Id: I9508c38fd6b21f040e2f817c754f00b5236da782
Signed-off-by: biao716.wang <biao716.wang@samsung.com>
mic/3rdparty/pykickstart/commands/partition.py
mic/3rdparty/pykickstart/constants.py
mic/3rdparty/pykickstart/handlers/fc6.py
mic/3rdparty/pykickstart/parser.py
mic/3rdparty/pykickstart/sections.py

index 16034bec7aa326f1e7544522bbfd4f5696de9110..2ed4bdc5ea9bc3ae18903fa798d678ad8011f04c 100644 (file)
@@ -50,8 +50,10 @@ class FC3_PartData(BaseData):
     def __eq__(self, y):
         if not y:
             return False
-
-        return self.mountpoint == y.mountpoint
+        if self.mountpoint:
+            return self.mountpoint == y.mountpoint
+        else:
+            return False
 
     def __ne__(self, y):
         return not self == y
@@ -90,7 +92,11 @@ class FC3_PartData(BaseData):
 
     def __str__(self):
         retval = BaseData.__str__(self)
-        retval += "part %s%s\n" % (self.mountpoint, self._getArgsAsStr())
+        if self.mountpoint:
+            mountpoint_str = "%s" % self.mountpoint
+        else:
+            mountpoint_str = "(No mount point)"
+        retval += "part %s%s\n" % (mountpoint_str, self._getArgsAsStr())
         return retval
 
 class FC4_PartData(FC3_PartData):
@@ -102,6 +108,7 @@ class FC4_PartData(FC3_PartData):
         self.bytesPerInode = kwargs.get("bytesPerInode", 4096)
         self.fsopts = kwargs.get("fsopts", "")
         self.label = kwargs.get("label", "")
+        self.fslabel = kwargs.get("fslabel", "")
 
     def _getArgsAsStr(self):
         retval = FC3_PartData._getArgsAsStr(self)
@@ -110,8 +117,10 @@ class FC4_PartData(FC3_PartData):
             retval += " --bytes-per-inode=%d" % self.bytesPerInode
         if self.fsopts:
             retval += " --fsoptions=\"%s\"" % self.fsopts
-        if self.label:
+        if self.label
             retval += " --label=%s" % self.label
+        if self.fslabel != "":
+            retval += " --fslabel=%s" % self.fslabel
 
         return retval
 
@@ -431,21 +440,17 @@ class FC3_Partition(KickstartCommand):
         return op
 
     def parse(self, args):
-        (ns, extra) = self.op.parse_known_args(args=args, lineno=self.lineno)
-        assert len(ns.mntpoint) == 1
-
-        if extra:
-            mapping = {"command": "partition", "options": extra}
-            raise KickstartParseError(_("Unexpected arguments to %(command)s command: %(options)s") % mapping, lineno=self.lineno)
+        (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno)
 
         pd = self.dataClass()   # pylint: disable=not-callable
         self.set_to_obj(ns, pd)
         pd.lineno = self.lineno
-        pd.mountpoint = ns.mntpoint[0]
-
-        # Check for duplicates in the data list.
-        if pd.mountpoint != "swap" and pd in self.dataList():
-            warnings.warn(_("A partition with the mountpoint %s has already been defined.") % pd.mountpoint, KickstartParseWarning)
+        if extra:
+            pd.mountpoint = extra[0]
+            if pd in self.dataList():
+                warnings.warn(_("A partition with the mountpoint %s has already been defined.") % pd.mountpoint)
+        else:
+            pd.mountpoint = None
 
         return pd
 
@@ -474,6 +479,8 @@ class FC4_Partition(FC3_Partition):
                         on the partition. If the given label is already in use
                         by another filesystem, a new label will be created for
                         this partition.""")
+        op.add_argument("--fslabel", dest="fslabel", version=FC4, help="""
+                      label for file system.""")
         return op
 
 class RHEL5_Partition(FC4_Partition):
index dadeea8574a356c9c4620d6a88e41ebfe4fd055a..cb1b685218c3510c08265e6f00dd9fb3f699f175 100644 (file)
@@ -53,6 +53,8 @@ KS_SCRIPT_POST = 1
 KS_SCRIPT_TRACEBACK = 2
 KS_SCRIPT_PREINSTALL = 3
 KS_SCRIPT_ONERROR = 4
+KS_SCRIPT_RUN = 5
+KS_SCRIPT_UMOUNT = 6
 
 KS_WAIT = 0
 KS_REBOOT = 1
index 048c5158c3a361b88badd6289d1fb5ea82f5d6eb..392a85de331559230ade86551a5b127f521ff760 100644 (file)
@@ -22,6 +22,7 @@ __all__ = ["FC6Handler"]
 from pykickstart import commands
 from pykickstart.base import BaseHandler
 from pykickstart.version import FC6
+from mic.kickstart.custom_commands.micrepo import *
 
 class FC6Handler(BaseHandler):
     version = FC6
@@ -67,6 +68,7 @@ class FC6Handler(BaseHandler):
         "raid": commands.raid.FC5_Raid,
         "reboot": commands.reboot.FC6_Reboot,
         "repo": commands.repo.FC6_Repo,
+        "tpk_repo": Mic_Tpk_Repo,
         "rootpw": commands.rootpw.FC3_RootPw,
         "selinux": commands.selinux.FC3_SELinux,
         "services": commands.services.FC6_Services,
@@ -93,6 +95,7 @@ class FC6Handler(BaseHandler):
         "NetworkData": commands.network.FC6_NetworkData,
         "PartData": commands.partition.FC4_PartData,
         "RaidData": commands.raid.FC5_RaidData,
+        "TpkRepoData": Mic_Tpk_RepoData,
         "RepoData": commands.repo.FC6_RepoData,
         "UserData": commands.user.FC6_UserData,
         "VolGroupData": commands.volgroup.FC3_VolGroupData,
index 7edf8aa486138323859d7d65dcf85984c3594615..f3d17a3492ac0ea10f4a463b56365fe11f0696e6 100644 (file)
@@ -231,6 +231,10 @@ class Script(KickstartObject):
             retval += '\n%pre-install'
         elif self.type == constants.KS_SCRIPT_ONERROR:
             retval += '\n%onerror'
+        elif self.type == constants.KS_SCRIPT_RUN:
+            retval += '\n%runscript'
+        elif self.type == constants.KS_SCRIPT_UMOUNT:
+            retval += '\n%post-umount'
 
         if self.interp != "/bin/sh" and self.interp:
             retval += " --interpreter=%s" % self.interp
@@ -355,6 +359,7 @@ class Packages(KickstartObject):
         self.handleMissing = constants.KS_MISSING_PROMPT
         self.handleBroken = constants.KS_BROKEN_REPORT
         self.packageList = []
+        self.tpk_packageList = []
         self.instLangs = None
         self.multiLib = False
         self.excludeWeakdeps = False
@@ -503,6 +508,25 @@ class Packages(KickstartObject):
         self.packageList = sorted(existingPackageSet)
         self.excludedList = sorted(existingExcludedSet)
 
+class TpkPackages(KickstartObject):
+    """A class representing the %tpk_packages section of the kickstart file."""
+    def __init__(self, *args, **kwargs):
+        KickstartObject.__init__(self, *args, **kwargs)
+        self.tpk_packageList = []
+    def __str__(self):
+        tpk_pkgs = ""
+        retval = "\n%tpk_packages"
+        p = self.packageList
+        p.sort()
+        for pkg in p:
+            tpk_pkgs += "%s\n" % pkg
+        return retval + "\n" +tpk_pkgs
+    def add(self, tpkPackageList):
+        tpk_PackageSet = set(self.tpk_packageList)
+        for tpk_pkg in tpkPackageList:
+            stripped = tpk_pkg.strip()
+            tpk_PackageSet.add(stripped)
+        self.tpk_packageList = list(tpk_PackageSet)
 ###
 ### PARSER
 ###
@@ -830,7 +854,10 @@ class KickstartParser(object):
         self.registerSection(PostScriptSection(self.handler, dataObj=Script))
         self.registerSection(OnErrorScriptSection(self.handler, dataObj=Script))
         self.registerSection(TracebackScriptSection(self.handler, dataObj=Script))
+        self.registerSection(RunScriptSection(self.handler, dataObj=Script))
+        self.registerSection(PostUmountScriptSection(self.handler, dataObj=Script))
         self.registerSection(PackageSection(self.handler))
+        self.registerSection(TpkPackageSection(self.handler))
 
         # Whitelist well-known sections that pykickstart does not understand,
         # but shouldn't error on.
index bf797c137b2522ae6443d206098c48560702e254..b7c0ffe0823d7b33d44201b7746836052457460d 100644 (file)
@@ -448,6 +448,35 @@ class TracebackScriptSection(OnErrorScriptSection):
                       "your kickstart file to use the %onerror section instead.",
                       KickstartDeprecationWarning)
 
+class RunScriptSection(ScriptSection):
+    sectionOpen = "%runscript"
+    def _resetScript(self):
+        ScriptSection._resetScript(self)
+        self._script["type"] = KS_SCRIPT_RUN
+
+    def finalize(self):
+        ScriptSection.finalize(self)
+        if self.handler:
+            for s in self.handler.scripts:
+                if s.type == KS_SCRIPT_UMOUNT:
+                    raise KickstartError("%runscript and %post-umount " \
+                                         "can not be defined together")
+
+class PostUmountScriptSection(ScriptSection):
+    sectionOpen = "%post-umount"
+
+    def _resetScript(self):
+        ScriptSection._resetScript(self)
+        self._script["type"] = KS_SCRIPT_UMOUNT
+
+    def finalize(self):
+        ScriptSection.finalize(self)
+        if self.handler:
+            for s in self.handler.scripts:
+                if s.type == KS_SCRIPT_RUN:
+                    raise KickstartError("%runscript and %post-umount " \
+                                         "can not be defined together")
+
 class PackageSection(Section):
     sectionOpen = "%packages"
     _title = "Package Selection"
@@ -800,3 +829,22 @@ class PackageSection(Section):
                                     "this option with its preferred alias %(new_option)s.")
                                   % {"option": option, "lineno": lineno, "new_option": new_option},
                                   KickstartDeprecationWarning)
+
+class TpkPackageSection(Section):
+    sectionOpen = "%tpk_packages"
+
+    def handleLine(self, line):
+        if not self.handler:
+            return
+
+        (h, s, t) = line.partition('#')
+        line = h.rstrip()
+        self.handler.tpk_packages.add([line])
+
+    def handleHeader(self, lineno, args):
+        """Process the arguments to the %tpk_packages header and set attributes
+           on the Version's TpkPackages instance appropriate.  This method may be
+           overridden in a subclass if necessary.
+        """
+        Section.handleHeader(self, lineno, args)
+