[master 1/2] Add --tmpdir to parse-kickstart for testing

bcl installerbot-noreply at redhat.com
Tue Mar 31 00:10:53 UTC 2015


From: "Brian C. Lane" <bcl at redhat.com>

This will allow the /tmp directory to be overridden for testing
purposes. Pass --tmpdir /path/to/tmp/ to override it. Note that the =
syntax is *not* supported, they must be separate arguments.

This also changes the ifcfg files to have their keys sorted so that
testing the output is easier.
---
 dracut/parse-kickstart | 39 ++++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart
index 9a62df2..ed63340 100755
--- a/dracut/parse-kickstart
+++ b/dracut/parse-kickstart
@@ -42,6 +42,8 @@ from collections import OrderedDict
 # Default logging: none
 log = logging.getLogger('parse-kickstart').addHandler(logging.NullHandler())
 
+TMPDIR = "/tmp"
+
 # Helper function for reading simple files in /sys
 def readsysfile(f):
     '''Return the contents of f, or "" if missing.'''
@@ -134,7 +136,7 @@ class DriverDisk(commands.driverdisk.F14_DriverDisk):
         # disk sources cannot be added to cmdline because the initial
         # driver-update run has already finished.
         if dd_disk:
-            with open("/tmp/dd_args_ks", "w") as f:
+            with open(TMPDIR+"/dd_args_ks", "w") as f:
                 f.write(" ".join(dd_disk))
 
         # network sources can be added to the existing cmdline, they
@@ -326,7 +328,7 @@ def ksnet_to_dracut(args, lineno, net, bootdev=False):
         if net.device:
             line.append("bootdev=%s" % net.device)
         # touch /tmp/net.ifaces to make sure dracut brings up network
-        open("/tmp/net.ifaces", "a")
+        open(TMPDIR+"/net.ifaces", "a")
 
     if net.essid or net.wepkey or net.wpakey:
         # TODO: make dracut support wireless? (do we care?)
@@ -358,9 +360,9 @@ def ksnet_to_ifcfg(net, filename=None):
         return
     ifcfg = dict()
     if filename is None:
-        filename = "/tmp/ifcfg/ifcfg-%s" % dev
-        if not os.path.isdir("/tmp/ifcfg"):
-            os.makedirs("/tmp/ifcfg")
+        filename = TMPDIR+"/ifcfg/ifcfg-%s" % dev
+        if not os.path.isdir(TMPDIR+"/ifcfg"):
+            os.makedirs(TMPDIR+"/ifcfg")
     ifcfg['DEVICE'] = dev
     hwaddr = readsysfile("/sys/class/net/%s/address" % dev)
     if "ifname={0}:{1}".format(dev, hwaddr).upper() in open("/proc/cmdline").read().upper():
@@ -412,8 +414,8 @@ def ksnet_to_ifcfg(net, filename=None):
     # TODO: dhcpclass, ethtool, essid/wepkey/wpakay, etc.
 
     if net.bootProto == 'dhcp':
-        srcpath = "/tmp/dhclient.%s.lease" % dev
-        dstdir = "/tmp/ifcfg-leases"
+        srcpath = TMPDIR+"/dhclient.%s.lease" % dev
+        dstdir = TMPDIR+"/ifcfg-leases"
         dstpath = "%s/dhclient-%s-%s.lease" % (dstdir, ifcfg['UUID'], dev)
         if os.path.exists(srcpath):
             if not os.path.isdir(dstdir):
@@ -441,7 +443,7 @@ def ksnet_to_ifcfg(net, filename=None):
                             'HWADDR' : readsysfile("/sys/class/net/%s/address" % slave),
                           }
             add_s390_settings(slave, slave_ifcfg)
-            slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
+            slave_filename = TMPDIR+"/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
             log.info("writing ifcfg %s for slave %s of bond %s", slave_filename, slave, dev)
             write_ifcfg(slave_filename, slave_ifcfg)
 
@@ -465,7 +467,7 @@ def ksnet_to_ifcfg(net, filename=None):
             if cfg:
                 slave_ifcfg['TEAM_PORT_CONFIG'] = "'" + cfg + "'"
 
-            slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
+            slave_filename = TMPDIR+"/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
             log.info("writing ifcfg %s for slave %s of team %s", slave_filename, slave, dev)
             write_ifcfg(slave_filename, slave_ifcfg)
 
@@ -502,7 +504,7 @@ def ksnet_to_ifcfg(net, filename=None):
                             'BRIDGE' : dev,
                             'HWADDR' : readsysfile("/sys/class/net/%s/address" % slave),
                           }
-            slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
+            slave_filename = TMPDIR+"/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
             log.info("writing ifcfg %s for slave %s of bridge %s", slave_filename, slave, dev)
             write_ifcfg(slave_filename, slave_ifcfg)
 
@@ -515,7 +517,7 @@ def ksnet_to_ifcfg(net, filename=None):
         ifcfg['NAME'] = "VLAN connection %s" % interface_name
         ifcfg['DEVICE'] = interface_name
         ifcfg['PHYSDEV'] = dev
-        filename = "/tmp/ifcfg/ifcfg-%s" % interface_name
+        filename = TMPDIR+"/ifcfg/ifcfg-%s" % interface_name
 
     log.info("writing ifcfg %s for %s", filename, dev)
     if write_ifcfg(filename, ifcfg):
@@ -525,7 +527,7 @@ def write_ifcfg(filename, ifcfg):
     try:
         with open(filename, "w") as f:
             f.write('# Generated by parse-kickstart\n')
-            for k,v in ifcfg.items():
+            for k,v in sorted(ifcfg.items()):
                 f.write("%s=%s\n" % (k,v))
     except IOError as e:
         log.error("can't write %s: %s", filename, e)
@@ -543,13 +545,24 @@ def process_kickstart(ksfile):
         parser.readKickstart(processed_file)
     except KickstartError as e:
         log.error(str(e))
-    with open("/tmp/ks.info", "a") as f:
+    with open(TMPDIR+"/ks.info", "a") as f:
         f.write('parsed_kickstart="%s"\n' % processed_file)
     log.info("finished parsing kickstart")
     return processed_file, handler.output
 
 if __name__ == '__main__':
     log = init_logger()
+
+    # Override tmp directory path for testing. Don't use argparse because we don't want to
+    # include that dependency in the initramfs. Pass '--tmpdir /path/to/tmp/'
+    if "--tmpdir" in sys.argv:
+        idx = sys.argv.index("--tmpdir")
+        try:
+            sys.argv.pop(idx)
+            TMPDIR = os.path.normpath(sys.argv.pop(idx))
+        except IndexError:
+            pass
+
     for path in sys.argv[1:]:
         outfile, output = process_kickstart(path)
         for line in filter(None, output):


-- 
To view this commit on github, visit https://github.com/rhinstaller/anaconda/commit/2d14678931a83942a784c437fd0d07242ea54550


More information about the anaconda-patches mailing list