from ceph_detect_init import suse
from ceph_detect_init import gentoo
from ceph_detect_init import freebsd
+from ceph_detect_init import docker
+import os
import logging
import platform
'funtoo': gentoo,
'exherbo': gentoo,
'freebsd': freebsd,
+ 'docker': docker,
}
if distro == 'redhat' and use_rhceph:
def platform_information():
"""detect platform information from remote host."""
+ try:
+ file_name = '/proc/self/cgroup'
+ with open(file_name, 'r') as f:
+ lines = f.readlines()
+ for line in lines:
+ if "docker" in line.split(':')[2]:
+ return ('docker', 'docker', 'docker')
+ except Exception as err:
+ logging.debug("platform_information: ",
+ "Error while opening %s : %s" % (file_name, err))
+
+ if os.path.isfile('/.dockerenv'):
+ return ('docker', 'docker', 'docker')
+
if platform.system() == 'Linux':
linux_distro = platform.linux_distribution(
supported_dists=platform._supported_dists + ('alpine', 'arch'))
from ceph_detect_init import suse
from ceph_detect_init import gentoo
from ceph_detect_init import freebsd
+from ceph_detect_init import docker
logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
level=logging.DEBUG)
def test_freebsd(self):
self.assertEqual('bsdrc', freebsd.choose_init())
+ def test_docker(self):
+ self.assertEqual('none', docker.choose_init())
+
def test_centos(self):
with mock.patch('ceph_detect_init.centos.release',
'7.0'):
self.assertEqual(('debian', 'sid/jessie', 'sid'),
ceph_detect_init.platform_information())
+ @mock.patch('platform.linux_distribution')
+ def test_platform_information_container(self, mock_linux_dist):
+ import sys
+ if sys.version_info >= (3, 0):
+ mocked_fn = 'builtins.open'
+ else:
+ mocked_fn = '__builtin__.open'
+
+ with mock.patch(mocked_fn,
+ mock.mock_open(read_data="""1:name=systemd:/system.slice \
+ /docker-39cc1fb.scope"""),
+ create=True) as m:
+ self.assertEqual(('docker',
+ 'docker',
+ 'docker'),
+ ceph_detect_init.platform_information(),)
+ m.assert_called_once_with('/proc/self/cgroup', 'r')
+
+ with mock.patch(mocked_fn, mock.mock_open(), create=True) as m:
+ m.side_effect = IOError()
+ mock_linux_dist.return_value = ('Red Hat Enterprise Linux Server',
+ '7.3', 'Maipo')
+ # Just run the code to validate the code won't raise IOError
+ ceph_detect_init.platform_information()
+
+ with mock.patch('os.path.isfile', mock.MagicMock()) as m:
+ m.return_value = True
+ self.assertEqual(('docker',
+ 'docker',
+ 'docker'),
+ ceph_detect_init.platform_information(),)
+ m.assert_called_once_with('/.dockerenv')
+
@mock.patch('platform.system', lambda: 'FreeBSD')
def test_platform_information_freebsd(self):
with mock.patch.multiple('platform',