+++ /dev/null
-# Copyright (C) 2015 <contact@redhat.com>
-#
-# Author: Alfredo Deza <adeza@redhat.com>
-# Author: Loic Dachary <loic@dachary.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Library Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Library Public License for more details.
-#
-from ceph_detect_init import alpine
-from ceph_detect_init import arch
-from ceph_detect_init import centos
-from ceph_detect_init import debian
-from ceph_detect_init import exc
-from ceph_detect_init import fedora
-from ceph_detect_init import rhel
-from ceph_detect_init import suse
-from ceph_detect_init import gentoo
-from ceph_detect_init import freebsd
-from ceph_detect_init import docker
-from ceph_detect_init import oraclevms
-import os
-import logging
-import platform
-
-
-def get(use_rhceph=False):
- distro_name, release, codename = platform_information()
- # Not all distributions have a concept that maps to codenames
- # (or even releases really)
- if not codename and not _get_distro(distro_name):
- raise exc.UnsupportedPlatform(
- distro=distro_name,
- codename=codename,
- release=release)
-
- module = _get_distro(distro_name, use_rhceph=use_rhceph)
- module.name = distro_name
- module.normalized_name = _normalized_distro_name(distro_name)
- module.distro = module.normalized_name
- module.is_el = module.normalized_name in ['redhat', 'centos',
- 'fedora', 'scientific',
- 'oraclel']
- module.release = release
- module.codename = codename
- module.init = module.choose_init()
- return module
-
-
-def _get_distro(distro, use_rhceph=False):
- if not distro:
- return
-
- distro = _normalized_distro_name(distro)
- distributions = {
- 'alpine': alpine,
- 'arch': arch,
- 'debian': debian,
- 'ubuntu': debian,
- 'linuxmint': debian,
- 'centos': centos,
- 'scientific': centos,
- 'oraclel': centos,
- 'oraclevms': oraclevms,
- 'redhat': centos,
- 'fedora': fedora,
- 'suse': suse,
- 'gentoo': gentoo,
- 'funtoo': gentoo,
- 'exherbo': gentoo,
- 'freebsd': freebsd,
- 'docker': docker,
- 'virtuozzo': centos,
- }
-
- if distro == 'redhat' and use_rhceph:
- return rhel
- else:
- return distributions.get(distro)
-
-
-def _normalized_distro_name(distro):
- distro = distro.lower()
- if distro.startswith(('redhat', 'red hat')):
- return 'redhat'
- elif distro.startswith(('scientific', 'scientific linux')):
- return 'scientific'
- elif distro.startswith(('suse', 'opensuse')):
- return 'suse'
- elif distro.startswith('centos'):
- return 'centos'
- elif distro.startswith('oracle linux'):
- return 'oraclel'
- elif distro.startswith('oracle vm'):
- return 'oraclevms'
- elif distro.startswith(('gentoo', 'funtoo', 'exherbo')):
- return 'gentoo'
- elif distro.startswith('virtuozzo'):
- return 'virtuozzo'
- return distro
-
-
-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'))
- logging.debug('platform_information: linux_distribution = ' +
- str(linux_distro))
- distro, release, codename = linux_distro
- elif platform.system() == 'FreeBSD':
- distro = 'freebsd'
- release = platform.release()
- codename = platform.version().split(' ')[3].split(':')[0]
- logging.debug(
- 'platform_information: release = {}, version = {}'.format(
- platform.release(), platform.version()))
- else:
- raise exc.UnsupportedPlatform(platform.system(), '', '')
-
- distro_lower = distro.lower()
- # this could be an empty string in Debian
- if not codename and 'debian' in distro_lower:
- pass
- # this is an empty string in Oracle
- elif distro_lower.startswith('oracle linux'):
- codename = 'OL' + release
- elif distro_lower.startswith('oracle vm'):
- codename = 'OVS' + release
- # this could be an empty string in Virtuozzo linux
- elif distro_lower.startswith('virtuozzo linux'):
- codename = 'virtuozzo'
-
- return (
- str(distro).rstrip(),
- str(release).rstrip(),
- str(codename).rstrip()
- )