From 952703c780939e503a49d92a320c9d01bcb8bf17 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 19 Oct 2022 12:32:08 +0200 Subject: [PATCH] Added the Linux distribution version in the HostingNode resource --- CHANGELOG.md | 4 + pom.xml | 12 ++- .../lifecycle/LinuxDistributionInfo.java | 93 +++++++++++++++++++ .../container/lifecycle/ProfileBuilder.java | 9 ++ 4 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c2c59b..43fc0a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for Common Smartgears +## [v3.1.6-SNAPSHOT] + +- Added Linux distribution version [#22933] + ## [v3.1.5] - 2022-04-20 - Added roles to ExternalService Info on request handler verification diff --git a/pom.xml b/pom.xml index 4b72490..5c7fb16 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.gcube.core common-smartgears - 3.1.5 + 3.1.6-SNAPSHOT SmartGears @@ -19,7 +19,7 @@ org.gcube.distribution gcube-bom - 2.0.1 + 2.1.0 pom import @@ -115,6 +115,14 @@ 3.0.1 provided + + + + javax.xml.bind + jaxb-api + provided + + 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();