![](https://seccdn.libravatar.org/avatar/ff2cb327bf0a83604a58d72935bcf7ff.jpg?s=120&d=mm&r=g)
Author: lslezak Date: Tue Sep 6 14:27:42 2011 New Revision: 65576 URL: http://svn.opensuse.org/viewcvs/yast?rev=65576&view=rev Log: addded Systemd::DefaultRunlevel() to read the default systemd runlevel (+ test) Modified: branches/tmp/lslezak/yast2/library/runlevel/src/Systemd.ycp branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.out branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.ycp Modified: branches/tmp/lslezak/yast2/library/runlevel/src/Systemd.ycp URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/lslezak/yast2/library/runlevel/src/Systemd.ycp?rev=65576&r1=65575&r2=65576&view=diff ============================================================================== --- branches/tmp/lslezak/yast2/library/runlevel/src/Systemd.ycp (original) +++ branches/tmp/lslezak/yast2/library/runlevel/src/Systemd.ycp Tue Sep 6 14:27:42 2011 @@ -14,6 +14,7 @@ module "Systemd"; const string systemd_path = "/bin/systemd"; +const string default_symlink = "/etc/systemd/system/default.target"; textdomain "base"; @@ -53,8 +54,6 @@ */ global boolean SetDefaultRunlevel(integer runlevel) { - const string default_symlink = "/etc/systemd/system/default.target"; - if (runlevel == nil || runlevel < 0 || runlevel > 6) { y2error("Invalid default runlevel (must be in range 0..6): %1", runlevel); @@ -76,6 +75,57 @@ return ret; } +/** + * Get the default runlevel for systemd + * @return integer the default runlevel (or nil on error or unknown runlevel) + */ +global integer DefaultRunlevel() +{ + string target = (string)SCR::Read(.target.symlink, default_symlink); + y2milestone("Default symlink points to: %1", target); + + if (target == nil) + { + y2error("Cannot read symlink target of %1", default_symlink); + return nil; + } + + // check runlevel<number>.target + string runlevel = regexpsub(target, "/runlevel([0-6]).target$", "\\1"); + if (runlevel != nil) + { + integer ret = tointeger(runlevel); + y2milestone("Default runlevel: %1", ret); + + return ret; + } + + // check runlevel specified by a symbolic name + // (this is written in systemd documentation how to change the default, + // YaST should also support this style in case users do a manual change) + string runlevel_name = regexpsub(target, "/([^/]*).target$", "\\1"); + if (runlevel_name != nil) + { + y2milestone("Detected default runlevel name: %1", runlevel_name); + map<string, integer> mapping = $[ + "poweroff" : 0, + "rescue" : 1, + // this is ambiguous, runlevels 2 and 4 also point to multi-user + // assume runlevel 3 in this case (the most probable) + "multi-user": 3, + "graphical" : 5, + "reboot" : 6 + ]; + + integer ret = mapping[runlevel_name]:nil; + y2milestone("Default runlevel: %1", ret); + + return ret; + } + + y2error("Cannot determine the default runlevel"); + return nil; +} } /* EOF */ Modified: branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.out URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.out?rev=65576&r1=65575&r2=65576&view=diff ============================================================================== --- branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.out (original) +++ branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.out Tue Sep 6 14:27:42 2011 @@ -16,3 +16,13 @@ Return true Execute .target.bash "/bin/ln -s -f /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target" 1 Return false +Dump Systemd::DefaultRunlevel() tests +Read .target.symlink "/etc/systemd/system/default.target" nil +Log Cannot read symlink target of /etc/systemd/system/default.target +Return nil +Read .target.symlink "/etc/systemd/system/default.target" "/lib/systemd/system/runlevel3.target" +Return 3 +Read .target.symlink "/etc/systemd/system/default.target" "/lib/systemd/system/graphical.target" +Return 5 +Read .target.symlink "/etc/systemd/system/default.target" "/lib/systemd/system/unknown_default.target" +Return nil Modified: branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.ycp URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.ycp?rev=65576&r1=65575&r2=65576&view=diff ============================================================================== --- branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.ycp (original) +++ branches/tmp/lslezak/yast2/library/runlevel/testsuite/tests/Systemd.ycp Tue Sep 6 14:27:42 2011 @@ -45,4 +45,19 @@ TEST (``(Systemd::SetDefaultRunlevel(5)), [$[], $[], $[ "target" : $[ "bash" : 1 ] ]], nil); + + + DUMP("Systemd::DefaultRunlevel() tests"); + + // test missing / invalid (not a symlink) default + TEST (``(Systemd::DefaultRunlevel()), [$[ "target" : $[ "symlink" : nil]], $[], $[]], nil); + + // test numeric runlevel + TEST (``(Systemd::DefaultRunlevel()), [$[ "target" : $[ "symlink" : "/lib/systemd/system/runlevel3.target"]], $[], $[]], nil); + + // test symbolic runlevel + TEST (``(Systemd::DefaultRunlevel()), [$[ "target" : $[ "symlink" : "/lib/systemd/system/graphical.target"]], $[], $[]], nil); + + // test unknown symbolic runlevel + TEST (``(Systemd::DefaultRunlevel()), [$[ "target" : $[ "symlink" : "/lib/systemd/system/unknown_default.target"]], $[], $[]], nil); } -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org