dd1b4d78fa
These updates, on the master branch, are to support testing the caracal packages and support of the charms for caracal. They do NOT lock the charms down, and don't change the testing branches to stable branches. Update unit-test to deal with Py3.11 which is run on Debian Buster and doesn't have /etc/lsb/release file (incorrect mocking issue). Change-Id: Icddaf9f7b091a09ef4627384cd349e43b34b1325
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
import platform
|
|
import os
|
|
|
|
|
|
def get_platform():
|
|
"""Return the current OS platform.
|
|
|
|
For example: if current os platform is Ubuntu then a string "ubuntu"
|
|
will be returned (which is the name of the module).
|
|
This string is used to decide which platform module should be imported.
|
|
"""
|
|
current_platform = _get_current_platform()
|
|
|
|
if "Ubuntu" in current_platform:
|
|
return "ubuntu"
|
|
elif "CentOS" in current_platform:
|
|
return "centos"
|
|
elif "debian" in current_platform or "Debian" in current_platform:
|
|
# Stock Python does not detect Ubuntu and instead returns debian.
|
|
# Or at least it does in some build environments like Travis CI
|
|
return "ubuntu"
|
|
elif "elementary" in current_platform:
|
|
# ElementaryOS fails to run tests locally without this.
|
|
return "ubuntu"
|
|
elif "Pop!_OS" in current_platform:
|
|
# Pop!_OS also fails to run tests locally without this.
|
|
return "ubuntu"
|
|
else:
|
|
raise RuntimeError("This module is not supported on {}."
|
|
.format(current_platform))
|
|
|
|
|
|
def _get_current_platform():
|
|
"""Return the current platform information for the OS.
|
|
|
|
Attempts to lookup linux distribution information from the platform
|
|
module for releases of python < 3.7. For newer versions of python,
|
|
the platform is determined from the /etc/os-release file.
|
|
"""
|
|
# linux_distribution is deprecated and will be removed in Python 3.7
|
|
# Warnings *not* disabled, as we certainly need to fix this.
|
|
if hasattr(platform, 'linux_distribution'):
|
|
tuple_platform = platform.linux_distribution()
|
|
current_platform = tuple_platform[0]
|
|
else:
|
|
current_platform = _get_platform_from_fs()
|
|
|
|
return current_platform
|
|
|
|
|
|
def _get_platform_from_fs():
|
|
"""Get Platform from /etc/os-release."""
|
|
with open(os.path.join(os.sep, 'etc', 'os-release')) as fin:
|
|
content = dict(
|
|
line.split('=', 1)
|
|
for line in fin.read().splitlines()
|
|
if '=' in line
|
|
)
|
|
for k, v in content.items():
|
|
content[k] = v.strip('"')
|
|
return content["NAME"]
|