summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Pitt <martin.pitt@ubuntu.com>2014-07-02 22:00:00 +0200
committerLennart Poettering <lennart@poettering.net>2015-02-11 13:02:01 +0100
commitf4f01ec146d91cb6943828851d98eee6a1ad4dd9 (patch)
tree7a9fa4a45f8b36cd63f4c95bfcf419088e3845d6
parentf93b36affa5ac5710cd84bfb8ff0dafabe99fbf1 (diff)
sysv-generator: Skip init scripts for existing native services
This avoids taking the SysV init script enablement state into account if we have native units. Otherwise systemctl disable on native unit would not be respected in the presence of an enabled SysV script. Also, there's no need to do all the parsing and creation of service files if we already have a native systemd unit for the processed SysV init script.
-rw-r--r--src/sysv-generator/sysv-generator.c8
-rw-r--r--test/sysv-generator-test.py12
2 files changed, 19 insertions, 1 deletions
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 673f04dc27..6e39b449eb 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -768,6 +768,11 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
if (!fpath)
return log_oom();
+ if (unit_file_get_state(UNIT_FILE_SYSTEM, NULL, name) >= 0) {
+ log_debug("Native unit for %s already exists, skipping", name);
+ continue;
+ }
+
service = new0(SysvStub, 1);
if (!service)
return log_oom();
@@ -852,7 +857,8 @@ static int set_dependencies_from_rcnd(LookupPaths lp, Hashmap *all_services) {
service = hashmap_get(all_services, name);
if (!service){
- log_warning("Could not find init script for %s", name);
+ log_debug("Ignoring %s symlink in %s, not generating %s.",
+ de->d_name, rcnd_table[i].path, name);
continue;
}
diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py
index 5098519073..09f5c01762 100644
--- a/test/sysv-generator-test.py
+++ b/test/sysv-generator-test.py
@@ -367,6 +367,18 @@ class SysvGeneratorTest(unittest.TestCase):
self.assert_enabled('foo.bak.service', [])
self.assert_enabled('foo.old.service', [])
+ def test_existing_native_unit(self):
+ '''existing native unit'''
+
+ with open(os.path.join(self.unit_dir, 'foo.service'), 'w') as f:
+ f.write('[Unit]\n')
+
+ self.add_sysv('foo.sh', {'Provides': 'foo bar'}, enable=True)
+ err, results = self.run_generator()
+ self.assertEqual(list(results), [])
+ # no enablement or alias links, as native unit is disabled
+ self.assertEqual(os.listdir(self.out_dir), [])
+
if __name__ == '__main__':
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2))