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 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