From 95d1452eefadffaf1ec75dd0a8336bc2c387eb17 Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周六, 01 2月 2020 02:48:51 +0800 Subject: [PATCH] rename enums and further developments --- src/library/os/linux/execution_environment.cpp | 54 ++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/library/os/linux/execution_environment.cpp b/src/library/os/linux/execution_environment.cpp index 81c5b16..a69122a 100644 --- a/src/library/os/linux/execution_environment.cpp +++ b/src/library/os/linux/execution_environment.cpp @@ -7,6 +7,8 @@ #include <paths.h> #include <sys/stat.h> #include <unistd.h> +#include <fstream> +#include <iostream> #include <stdio.h> #include <string.h> #include <dirent.h> @@ -17,6 +19,7 @@ #include "../execution_environment.hpp" namespace license { +using namespace std; // 0=NO 1=Docker/2=Lxc static int checkContainerProc() { @@ -58,21 +61,44 @@ return result; } -// 0=NO 1=Docker/Lxc -static int checkLXC() { return (access("/var/run/systemd/container", F_OK) == 0) ? 1 : 0; } - -VIRTUALIZATION ExecutionEnvironment::getVirtualization() { - VIRTUALIZATION result = NONE; - CpuInfo cpuInfo; - int isContainer = checkContainerProc(); - if (isContainer == 1) { - result = CONTAINER; - } else if (isContainer == 2 || checkLXC()) { - result = CONTAINER; - } else if (cpuInfo.cpu_virtual()) { - result = VM; - } else { +// 0=NO 1=Docker/2=Lxc +static int checkSystemdContainer() { + ifstream systemd_container("/var/run/systemd/container"); + int result = 0; + if (systemd_container.good()) { + result = 1; + for (string line; getline(systemd_container, line);) { + if (line.find("docker") != string::npos) { + result = 1; + break; + } else if (line.find("lxc") != string::npos) { + result = 2; + break; + } + } } return result; } + +VIRTUALIZATION ExecutionEnvironment::getVirtualization() { + VIRTUALIZATION result; + CpuInfo cpuInfo; + bool isContainer = checkContainerProc() != 0 || checkSystemdContainer() != 0; + if (isContainer) { + result = CONTAINER; + } else if (cpuInfo.cpu_virtual() || is_cloud()) { + result = VM; + } else { + result = NONE; + } + return result; +} + +bool ExecutionEnvironment::is_cloud() { return getCloudProvider() == NONE; } + +bool ExecutionEnvironment::is_docker() { return (checkContainerProc() == 1 || checkSystemdContainer() == 1); } + +CLOUD_PROVIDER ExecutionEnvironment::getCloudProvider() {} + + } // namespace license -- Gitblit v1.9.1