Removing hacks is always nice, but I'm not sure about InstallData as Chris had some plans to remove it. Otherwise the patch looks simple enough and fine. Martin ----- "Hans de Goede" <hdegoede@xxxxxxxxxx> wrote: > Currently we rely on self.handler being defined in our execute() > methods > of pykickstart command/data derived classes. But self.handler is is > not > defined for BaseData derived classes, which we fix by some trickery to > define > it anyways. > > This patch replaces the trickery by using the anaconda parameter all > the execute() method of pykickstart command/data derived classes have, > this > allows access to the same object through anaconda.id.ksdata, without > requiring > the trickery. > --- > kickstart.py | 58 > +++++++++++++++++++++++----------------------------------- > 1 files changed, 23 insertions(+), 35 deletions(-) > > diff --git a/kickstart.py b/kickstart.py > index 7665686..cf5d8b1 100644 > --- a/kickstart.py > +++ b/kickstart.py > @@ -197,7 +197,7 @@ class AutoPart(commands.autopart.F12_AutoPart): > anaconda.id.storage.autoPartAddBackupPassphrase = \ > self.backuppassphrase > > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > > class AutoStep(commands.autostep.FC3_AutoStep): > def execute(self, anaconda): > @@ -221,9 +221,9 @@ class > Bootloader(commands.bootloader.F12_Bootloader): > anaconda.id.bootloader.doUpgradeOnly = 1 > > if location is None: > - > self.handler.permanentSkipSteps.extend(["bootloadersetup", > "instbootloader"]) > + > anaconda.id.ksdata.permanentSkipSteps.extend(["bootloadersetup", > "instbootloader"]) > else: > - self.handler.showSteps.append("bootloader") > + anaconda.id.ksdata.showSteps.append("bootloader") > > if self.appendLine: > anaconda.id.bootloader.args.append(self.appendLine) > @@ -268,7 +268,7 @@ class > Bootloader(commands.bootloader.F12_Bootloader): > > anaconda.id.bootloader.updateDriveList(new) > > - self.handler.permanentSkipSteps.extend(["upgbootloader", > "bootloader"]) > + > anaconda.id.ksdata.permanentSkipSteps.extend(["upgbootloader", > "bootloader"]) > > class ClearPart(commands.clearpart.FC3_ClearPart): > def parse(self, args): > @@ -298,7 +298,7 @@ class > ClearPart(commands.clearpart.FC3_ClearPart): > anaconda.id.storage.reinitializeDisks = self.initAll > > clearPartitions(anaconda.id.storage) > - self.handler.skipSteps.append("cleardiskssel") > + anaconda.id.ksdata.skipSteps.append("cleardiskssel") > > class Fcoe(commands.fcoe.F13_Fcoe): > def parse(self, args): > @@ -356,7 +356,7 @@ class > IgnoreDisk(commands.ignoredisk.F8_IgnoreDisk): > def execute(self, anaconda): > anaconda.id.storage.ignoredDisks = self.ignoredisk > anaconda.id.storage.exclusiveDisks = self.onlyuse > - self.handler.skipSteps.extend(["filter", "filtertype"]) > + anaconda.id.ksdata.skipSteps.extend(["filter", > "filtertype"]) > > class Iscsi(commands.iscsi.F10_Iscsi): > def parse(self, args): > @@ -382,13 +382,13 @@ class Keyboard(commands.keyboard.FC3_Keyboard): > def execute(self, anaconda): > anaconda.id.keyboard.set(self.keyboard) > anaconda.id.keyboard.beenset = 1 > - self.handler.skipSteps.append("keyboard") > + anaconda.id.ksdata.skipSteps.append("keyboard") > > class Lang(commands.lang.FC3_Lang): > def execute(self, anaconda): > anaconda.id.instLanguage.instLang = self.lang > anaconda.id.instLanguage.systemLang = self.lang > - self.handler.skipSteps.append("language") > + anaconda.id.ksdata.skipSteps.append("language") > > class LogVolData(commands.logvol.F12_LogVolData): > def execute(self, anaconda): > @@ -430,7 +430,7 @@ class LogVolData(commands.logvol.F12_LogVolData): > > dev.format.mountpoint = self.mountpoint > dev.format.mountopts = self.fsopts > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > return > > # Make sure this LV name is not already used in the requested > VG. > @@ -511,7 +511,7 @@ class LogVolData(commands.logvol.F12_LogVolData): > parents=request) > storage.createDevice(luksdev) > > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > > class Logging(commands.logging.FC6_Logging): > def execute(self, anaconda): > @@ -634,7 +634,7 @@ class > PartitionData(commands.partition.F12_PartData): > > # store "raid." alias for other ks partitioning commands > if self.onPart: > - self.handler.onPart[kwargs["name"]] = self.onPart > + anaconda.id.ksdata.onPart[kwargs["name"]] = > self.onPart > self.mountpoint = "" > elif self.mountpoint.startswith("pv."): > type = "lvmpv" > @@ -645,7 +645,7 @@ class > PartitionData(commands.partition.F12_PartData): > > # store "pv." alias for other ks partitioning commands > if self.onPart: > - self.handler.onPart[kwargs["name"]] = self.onPart > + anaconda.id.ksdata.onPart[kwargs["name"]] = > self.onPart > self.mountpoint = "" > elif self.mountpoint == "/boot/efi": > type = "EFI System Partition" > @@ -671,7 +671,7 @@ class > PartitionData(commands.partition.F12_PartData): > > dev.format.mountpoint = self.mountpoint > dev.format.mountopts = self.fsopts > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > return > > # Size specification checks. > @@ -760,11 +760,11 @@ class > PartitionData(commands.partition.F12_PartData): > parents=request) > storage.createDevice(luksdev) > > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > > class Reboot(commands.reboot.FC6_Reboot): > def execute(self, anaconda): > - self.handler.skipSteps.append("complete") > + anaconda.id.ksdata.skipSteps.append("complete") > > class RaidData(commands.raid.F12_RaidData): > def execute(self, anaconda): > @@ -783,7 +783,7 @@ class RaidData(commands.raid.F12_RaidData): > elif self.mountpoint.startswith("pv."): > type = "lvmpv" > kwargs["name"] = self.mountpoint > - self.handler.onPart[kwargs["name"]] = devicename > + anaconda.id.ksdata.onPart[kwargs["name"]] = devicename > > if devicetree.getDeviceByName(kwargs["name"]): > raise KickstartValueError, > formatErrorMsg(self.lineno, msg="PV partition defined multiple > times") > @@ -813,13 +813,13 @@ class RaidData(commands.raid.F12_RaidData): > > dev.format.mountpoint = self.mountpoint > dev.format.mountopts = self.fsopts > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > return > > # Get a list of all the RAID members. > for member in self.members: > # if member is using --onpart, use original device > - member = self.handler.onPart.get(member, member) > + member = anaconda.id.ksdata.onPart.get(member, member) > dev = devicetree.getDeviceByName(member) > if not dev: > raise KickstartValueError, > formatErrorMsg(self.lineno, msg="Tried to use undefined partition %s > in RAID specification" % member) > @@ -899,14 +899,14 @@ class RaidData(commands.raid.F12_RaidData): > parents=request) > storage.createDevice(luksdev) > > - self.handler.skipSteps.extend(["partition", "zfcpconfig", > "parttype"]) > + anaconda.id.ksdata.skipSteps.extend(["partition", > "zfcpconfig", "parttype"]) > > class RootPw(commands.rootpw.F8_RootPw): > def execute(self, anaconda): > anaconda.id.rootPassword["password"] = self.password > anaconda.id.rootPassword["isCrypted"] = self.isCrypted > anaconda.id.rootPassword["lock"] = self.lock > - self.handler.skipSteps.append("accounts") > + anaconda.id.ksdata.skipSteps.append("accounts") > > class SELinux(commands.selinux.FC3_SELinux): > def execute(self, anaconda): > @@ -914,7 +914,7 @@ class SELinux(commands.selinux.FC3_SELinux): > > class SkipX(commands.skipx.FC3_SkipX): > def execute(self, anaconda): > - self.handler.skipSteps.extend(["setsanex", "videocard", > "xcustom"]) > + anaconda.id.ksdata.skipSteps.extend(["setsanex", "videocard", > "xcustom"]) > > if anaconda.id.desktop is not None: > anaconda.id.desktop.setDefaultRunLevel(3) > @@ -928,7 +928,7 @@ class Timezone(commands.timezone.FC6_Timezone): > log.warning("Timezone %s set in kickstart is not valid." > % (self.timezone,)) > > anaconda.id.timezone.setTimezoneInfo(self.timezone, > self.isUtc) > - self.handler.skipSteps.append("timezone") > + anaconda.id.ksdata.skipSteps.append("timezone") > > class Upgrade(commands.upgrade.F11_Upgrade): > def execute(self, anaconda): > @@ -946,7 +946,7 @@ class > VolGroupData(commands.volgroup.FC3_VolGroupData): > # Get a list of all the physical volume devices that make up > this VG. > for pv in self.physvols: > # if pv is using --onpart, use original device > - pv = self.handler.onPart.get(pv, pv) > + pv = anaconda.id.ksdata.onPart.get(pv, pv) > dev = devicetree.getDeviceByName(pv) > if not dev: > raise KickstartValueError, > formatErrorMsg(self.lineno, msg="Tried to use undefined partition %s > in Volume Group specification" % pv) > @@ -1080,18 +1080,6 @@ class AnacondaKSHandler(superclass): > # Data objects can be seen over and over again. > self._dataObjs.append(obj) > > - def dispatcher(self, args, lineno, include=None): > - # This is a big fat hack, and I don't want it in pykickstart. > A lot > - # of our overridden data objects here refer to the handler > (to skip > - # steps, mainly). I don't think this should be pykickstart's > job > - # since it's only required for anaconda, so it's got to go > here. > - obj = superclass.dispatcher(self, args, lineno, > include=include) > - > - if isinstance(obj, BaseData) and self.commands[args[0]] != > None: > - obj.handler = self > - > - return obj > - > def execute(self): > for obj in filter(lambda o: hasattr(o, "execute"), > self._dataObjs): > obj.execute(self.anaconda) > -- > 1.6.5.2 > > _______________________________________________ > Anaconda-devel-list mailing list > Anaconda-devel-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/anaconda-devel-list _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list