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
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):
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)
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
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
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):
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
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
"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,
"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,
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
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
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
###
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.
"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"
"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)
+