diff --git a/CHANGELOG.md b/CHANGELOG.md index ebfd6dd..54edb2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [v3.2.0-SNAPSHOT] -- Added SecretManager thread local from authorization-utils [#22871] +- Added SecretManagerProvider thread local from authorization-utils [#22871] +- Added Linux distribution version [#22933] ## [v3.1.2-SNAPSHOT] - 2022-01-19 diff --git a/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java new file mode 100644 index 0000000..8fe8bc2 --- /dev/null +++ b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java @@ -0,0 +1,93 @@ +package org.gcube.smartgears.handlers.container.lifecycle; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI-CNR) + */ +public class LinuxDistributionInfo { + + private static final Logger logger = LoggerFactory.getLogger(LinuxDistributionInfo.class); + + public static final String LSB_RELEASE_COMMAND = "lsb_release -a"; + public static final String OS_RELEASE_FILE_PATH = "/etc/os-release"; + + protected Map info; + + protected Map getInfoViaLsbReleaseCommand() throws IOException { + logger.trace("Going to exec {}", LSB_RELEASE_COMMAND); + Process process = Runtime.getRuntime().exec(LSB_RELEASE_COMMAND); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); + Map map = parseBufferedReader(bufferedReader); + bufferedReader.close(); + return map; + } + + private Map parseBufferedReader(BufferedReader bufferedReader) throws IOException { + Map map = new HashMap<>(); + String line = ""; + while ((line = bufferedReader.readLine()) != null) { + String[] nameValue = parseLine(line); + map.put(nameValue[0], nameValue[1]); + } + return map; + } + + private String[] parseLine(String line) { + String[] splitted = line.split("="); + if (splitted.length < 2) { + splitted = line.split(":"); + } + String[] ret = new String[2]; + ret[0] = splitted[0].trim(); + ret[1] = splitted[1].trim().replace("\"", ""); + return ret; + } + + private Map getInfoViaFile(File file) throws IOException { + logger.trace("Going to read file {}", file.getAbsolutePath()); + BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); + Map map = parseBufferedReader(bufferedReader); + bufferedReader.close(); + return map; + + } + + protected Map getInfoViaOsReleaseFile() throws IOException { + File osReleaseFile = new File(OS_RELEASE_FILE_PATH); + return getInfoViaFile(osReleaseFile); + } + + private Map retriveInfo() { + try { + return getInfoViaLsbReleaseCommand(); + } catch (IOException e) { + + } + + try { + return getInfoViaOsReleaseFile(); + }catch (IOException e) { + + } + + return null; + } + + public Map getInfo() { + if (info == null) { + info = retriveInfo(); + } + return info; + } + +} diff --git a/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java index 05c5ec6..3f1ac67 100644 --- a/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java +++ b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java @@ -282,6 +282,15 @@ public class ProfileBuilder { */ + String osVersion = System.getProperty("os.name"); + if(osVersion.compareToIgnoreCase("Linux")==0) { + LinuxDistributionInfo linuxDistributionInfo = new LinuxDistributionInfo(); + Map info = linuxDistributionInfo.getInfo(); + for(String key : info.keySet()) { + variables.add().keyAndValue(key, info.get(key)); + } + } + variables.add().keyAndValue("Java", System.getProperty("java.version")); SmartGearsConfiguration config = ProviderFactory.provider().smartgearsConfiguration();