Make Lorax.arch and Lorax.product into objects

arch has three attributes: .buildarch, .basearch, and .libdir
product has six: .name, .version, .release, .variant, .bugurl, and
is_beta

This makes it easier to pass this data into functions/templates.
This commit is contained in:
Will Woods 2011-04-27 16:25:35 -04:00
parent 17c9c8bfaf
commit b186317213

View File

@ -55,25 +55,17 @@ from treeinfo import TreeInfo
from discinfo import DiscInfo from discinfo import DiscInfo
import images import images
class ArchData(object):
ARCHMAPS = { lib64_arches = ("x86_64", "ppc64", "sparc64", "s390x", "ia64")
"i386": {"base": "i386", "efi": "IA32", "is64": False}, archmap = {"i386": "i386", "i586":"i386", "i686":"i386", "x86_64":"x86_64",
"i586": {"base": "i386", "efi": "IA32", "is64": False}, "ppc":"ppc", "ppc64": "ppc",
"i686": {"base": "i386", "efi": "IA32", "is64": False}, "sparc":"sparc", "sparcv9":"sparc", "sparc64":"sparc",
"x86_64": {"base": "x86_64", "efi": "X64", "is64": True}, "s390":"s390", "s390x":"s390x",
"ppc": {"base": "ppc", "efi": "", "is64": False},
"ppc64": {"base": "ppc", "efi": "", "is64": True},
"s390": {"base": "s390", "efi": "", "is64": False},
"s390x": {"base": "s390x", "efi": "", "is64": True},
"sparc": {"base": "sparc", "efi": "", "is64": False},
"sparcv9": {"base": "sparc", "efi": "", "is64": False},
"sparc64": {"base": "sparc", "efi": "", "is64": True},
"ia64": {"base": "ia64", "efi": "IA64", "is64": True}
} }
def __init__(self, buildarch):
LIB32 = "lib" self.buildarch = buildarch
LIB64 = "lib64" self.basearch = self.archmap.get(buildarch) or buildarch
self.libdir = "lib64" if buildarch in self.lib64_arches else "lib"
class Lorax(BaseLoraxClass): class Lorax(BaseLoraxClass):
@ -183,48 +175,30 @@ class Lorax(BaseLoraxClass):
logger.debug("using install root: {0}".format(self.yum.installroot)) logger.debug("using install root: {0}".format(self.yum.installroot))
logger.info("setting up build architecture") logger.info("setting up build architecture")
self.arch = ArchData(self.get_buildarch())
self.buildarch = self.get_buildarch() for attr in ('buildarch', 'basearch', 'libdir'):
logger.debug("set buildarch = {0.buildarch}".format(self)) logger.debug("self.arch.%s = %s", attr, getattr(self.arch,attr))
archmap = ARCHMAPS.get(self.buildarch)
assert archmap is not None
self.basearch = archmap.get("base")
self.efiarch = archmap.get("efi")
self.libdir = LIB64 if archmap.get("is64") else LIB32
logger.debug("set basearch = {0.basearch}".format(self))
logger.debug("set efiarch = {0.efiarch}".format(self))
logger.debug("set libdir = {0.libdir}".format(self))
logger.info("setting up install tree") logger.info("setting up install tree")
self.installtree = LoraxInstallTree(self.yum, self.basearch, self.installtree = LoraxInstallTree(self.yum, self.arch.basearch,
self.libdir, self.workdir) self.arch.libdir, self.workdir)
logger.info("setting up build parameters") logger.info("setting up build parameters")
product = DataHolder(name=product, version=version, release=release,
variant=variant, bugurl=bugurl, is_beta=is_beta)
self.product = product self.product = product
self.version = version logger.debug("product data: %s" % product)
self.release = release
logger.debug("set product = {0.product}".format(self))
logger.debug("set version = {0.version}".format(self))
logger.debug("set release = {0.release}".format(self))
# set up optional build parameters
self.variant = variant
self.bugurl = bugurl
self.is_beta = is_beta
logger.debug("set variant = {0.variant}".format(self))
logger.debug("set bugurl = {0.bugurl}".format(self))
logger.debug("set is_beta = {0.is_beta}".format(self))
logger.info("parsing the template") logger.info("parsing the template")
tfile = joinpaths(self.conf.get("lorax", "sharedir"), tfile = joinpaths(self.conf.get("lorax", "sharedir"),
self.conf.get("templates", "ramdisk")) self.conf.get("templates", "ramdisk"))
tvars = { "basearch": self.basearch, # TODO: normalize with arch templates:
"buildarch": self.buildarch, # tvars = dict(product=product, arch=arch)
"libdir" : self.libdir, tvars = { "basearch": self.arch.basearch,
"product": self.product.lower() } "buildarch": self.arch.buildarch,
"libdir" : self.arch.libdir,
"product": self.product.name.lower() }
template = ltmpl.LoraxTemplate() template = ltmpl.LoraxTemplate()
template = template.parse(tfile, tvars) template = template.parse(tfile, tvars)
@ -251,8 +225,8 @@ class Lorax(BaseLoraxClass):
self.installtree.yum.process_transaction(skipbroken) self.installtree.yum.process_transaction(skipbroken)
# write .buildstamp # write .buildstamp
buildstamp = BuildStamp(self.workdir, self.product, self.version, buildstamp = BuildStamp(self.workdir, self.product.name, self.product.version,
self.bugurl, self.is_beta, self.buildarch) self.product.bugurl, self.product.is_beta, self.arch.buildarch)
buildstamp.write() buildstamp.write()
shutil.copy2(buildstamp.path, self.installtree.root) shutil.copy2(buildstamp.path, self.installtree.root)
@ -315,18 +289,18 @@ class Lorax(BaseLoraxClass):
self.installtree.get_anaconda_portions() self.installtree.get_anaconda_portions()
# write .discinfo # write .discinfo
discinfo = DiscInfo(self.workdir, self.release, self.basearch) discinfo = DiscInfo(self.workdir, self.product.release, self.arch.basearch)
discinfo.write() discinfo.write()
shutil.copy2(discinfo.path, self.outputdir) shutil.copy2(discinfo.path, self.outputdir)
# create .treeinfo # create .treeinfo
treeinfo = TreeInfo(self.workdir, self.product, self.version, treeinfo = TreeInfo(self.workdir, self.product.name, self.product.version,
self.variant, self.basearch) self.product.variant, self.arch.basearch)
# get the image class # get the image class
factory = images.Factory() factory = images.Factory()
imgclass = factory.get_class(self.basearch) imgclass = factory.get_class(self.arch.basearch)
ctype = self.conf.get("compression", "type") ctype = self.conf.get("compression", "type")
cspeed = self.conf.get("compression", "speed") cspeed = self.conf.get("compression", "speed")
@ -334,10 +308,10 @@ class Lorax(BaseLoraxClass):
i = imgclass(kernellist=kernels, i = imgclass(kernellist=kernels,
installtree=self.installtree, installtree=self.installtree,
outputroot=self.outputdir, outputroot=self.outputdir,
product=self.product, product=self.product.name,
version=self.version, version=self.product.version,
treeinfo=treeinfo, treeinfo=treeinfo,
basearch=self.basearch, basearch=self.arch.basearch,
ctype=ctype, ctype=ctype,
cspeed=cspeed) cspeed=cspeed)
@ -383,7 +357,7 @@ class Lorax(BaseLoraxClass):
# compress install tree (create initrd) # compress install tree (create initrd)
logger.info("creating the initrd") logger.info("creating the initrd")
i.create_initrd(self.libdir) i.create_initrd(self.arch.libdir)
# create boot iso # create boot iso
logger.info("creating boot iso") logger.info("creating boot iso")