fix-init-system-detection
authorCeph Maintainers <ceph-maintainers@lists.ceph.com>
Wed, 7 Jun 2017 08:39:39 +0000 (09:39 +0100)
committerAdrian Bunk <bunk@debian.org>
Wed, 7 Jun 2017 08:39:39 +0000 (09:39 +0100)
Gbp-Pq: Name fix-init-system-detection.patch

src/ceph-detect-init/ceph_detect_init/__init__.py
src/ceph-detect-init/ceph_detect_init/debian/__init__.py
src/ceph-detect-init/tests/test_all.py

index a2bcc7cf277c908dfdbd8dc2c0a80a2e5aae6fcc..7797e4ed416472201648c37993440726fb20bb4e 100644 (file)
@@ -25,7 +25,7 @@ import platform
 
 def get(use_rhceph=False):
     distro_name, release, codename = platform_information()
-    if not codename or not _get_distro(distro_name):
+    if not _get_distro(distro_name):
         raise exc.UnsupportedPlatform(
             distro=distro_name,
             codename=codename,
@@ -83,25 +83,6 @@ def platform_information():
     logging.debug('platform_information: linux_distribution = ' +
                   str(platform.linux_distribution()))
     distro, release, codename = platform.linux_distribution()
-    # this could be an empty string in Debian
-    if not codename and 'debian' in distro.lower():
-        debian_codenames = {
-            '8': 'jessie',
-            '7': 'wheezy',
-            '6': 'squeeze',
-        }
-        major_version = release.split('.')[0]
-        codename = debian_codenames.get(major_version, '')
-
-        # In order to support newer jessie/sid or wheezy/sid strings
-        # we test this if sid is buried in the minor, we should use
-        # sid anyway.
-        if not codename and '/' in release:
-            major, minor = release.split('/')
-            if minor == 'sid':
-                codename = minor
-            else:
-                codename = major
 
     return (
         str(distro).rstrip(),
index 73a7851a3fc9ab21d3c8ad73f0c94aa630358250..00a4841dd6e5fcfc8935a0ce9cdb03982ba60278 100644 (file)
@@ -1,3 +1,6 @@
+import os
+import subprocess
+
 distro = None
 release = None
 codename = None
@@ -8,14 +11,11 @@ def choose_init():
 
     Returns the name of a init system (upstart, sysvinit ...).
     """
-    assert(distro and codename)
-    if distro.lower() in ('ubuntu', 'linuxmint'):
-        if codename >= 'vivid':
-            return 'systemd'
-        else:
-            return 'upstart'
-    if distro.lower() == 'debian':
-        if codename in ('squeeze', 'wheezy'):
-            return 'sysvinit'
-        else:
-            return 'systemd'
+    # yes, this is heuristics
+    if os.path.isdir('/run/systemd/system'):
+        return 'systemd'
+    if not subprocess.call('. /lib/lsb/init-functions ; init_is_upstart',
+                           shell=True):
+        return 'upstart'
+    elif os.path.isfile('/sbin/init') and not os.path.islink('/sbin/init'):
+        return 'sysvinit'
index 22cff5bca93607ecc32fdbda09e73de9a0f50eff..c84bf3b2b0ef212cdfebab459701a0392c2afa35 100644 (file)
@@ -44,30 +44,35 @@ class TestCephDetectInit(testtools.TestCase):
         self.assertEqual('sysvinit', centos.choose_init())
 
     def test_debian(self):
-        with mock.patch.multiple('ceph_detect_init.debian',
-                                 distro='debian',
-                                 codename='wheezy'):
-            self.assertEqual('sysvinit', debian.choose_init())
-        with mock.patch.multiple('ceph_detect_init.debian',
-                                 distro='debian',
-                                 codename='squeeze'):
-            self.assertEqual('sysvinit', debian.choose_init())
-        with mock.patch.multiple('ceph_detect_init.debian',
-                                 distro='debian',
-                                 codename='jessie'):
+        with mock.patch.multiple('os.path',
+                                 isdir=lambda x: x == '/run/systemd/system'):
             self.assertEqual('systemd', debian.choose_init())
-        with mock.patch.multiple('ceph_detect_init.debian',
-                                 distro='ubuntu',
-                                 codename='trusty'):
-            self.assertEqual('upstart', debian.choose_init())
-        with mock.patch.multiple('ceph_detect_init.debian',
-                                 distro='ubuntu',
-                                 codename='vivid'):
-            self.assertEqual('systemd', debian.choose_init())
-        with mock.patch.multiple('ceph_detect_init.debian',
-                                 distro='not-debian',
-                                 codename='andy'):
-            self.assertIs(None, debian.choose_init())
+
+        def mock_call_with_upstart(*args, **kwargs):
+            if args[0] == '. /lib/lsb/init-functions ; init_is_upstart' and \
+               kwargs['shell']:
+                return 0
+            else:
+                return 1
+        with mock.patch.multiple('os.path',
+                                 isdir=lambda x: False,
+                                 isfile=lambda x: False):
+            with mock.patch.multiple('subprocess',
+                                     call=mock_call_with_upstart):
+                self.assertEqual('upstart', debian.choose_init())
+        with mock.patch.multiple('os.path',
+                                 isdir=lambda x: False,
+                                 isfile=lambda x: x == '/sbin/init',
+                                 islink=lambda x: x != '/sbin/init'):
+            with mock.patch.multiple('subprocess',
+                                     call=lambda *args, **kwargs: 1):
+                self.assertEqual('sysvinit', debian.choose_init())
+        with mock.patch.multiple('os.path',
+                                 isdir=lambda x: False,
+                                 isfile=lambda x: False):
+            with mock.patch.multiple('subprocess',
+                                     call=lambda *args, **kwargs: 1):
+                self.assertIs(None, debian.choose_init())
 
     def test_fedora(self):
         with mock.patch('ceph_detect_init.fedora.release',
@@ -115,7 +120,6 @@ class TestCephDetectInit(testtools.TestCase):
             self.assertEqual(False, distro.is_el)
             self.assertEqual('6.0', distro.release)
             self.assertEqual('squeeze', distro.codename)
-            self.assertEqual('sysvinit', distro.init)
 
     def test_get_distro(self):
         g = ceph_detect_init._get_distro