in agent/platform/platform_unix.go [80:255]
func getPlatformDetails(log log.T) (name string, version string, err error) {
log.Debugf(gettingPlatformDetailsMessage)
contents := ""
var contentsBytes []byte
name = notAvailableMessage
version = notAvailableMessage
if fileExists(centosReleaseFile) {
// CentOS has incomplete information in the osReleaseFile
// and there fore needs to be before osReleaseFile exist check
log.Debugf(fetchingDetailsMessage, centosReleaseFile)
contents, err = fileutil.ReadAllText(centosReleaseFile)
log.Debugf(commandOutputMessage, contents)
if err != nil {
log.Debugf(errorOccurredMessage, centosReleaseFile, err)
return
}
if strings.Contains(contents, "CentOS") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
versionData := strings.Split(data[1], "(")
version = strings.TrimSpace(versionData[0])
}
}
}
if !(strings.EqualFold(name, notAvailableMessage)) || !(strings.EqualFold(version, notAvailableMessage)) {
return
} else if fileExists(bottlerocketReleaseFile) {
// Bottlerocket's osReleaseFile contains information from its
// control container's base OS, with the Bottlerocket data
// stored in a separate bottlerocketReleasefile and therefore
// needs to be before osReleaseFile exist check
log.Debugf(fetchingDetailsMessage, bottlerocketReleaseFile)
contents := new(osRelease)
err = ini.MapTo(contents, bottlerocketReleaseFile)
log.Debugf(commandOutputMessage, contents)
if err != nil {
log.Debugf(errorOccurredMessage, bottlerocketReleaseFile, err)
return
}
name = contents.NAME
version = contents.VERSION_ID
} else if fileExists(osReleaseFile) {
log.Debugf(fetchingDetailsMessage, osReleaseFile)
contents := new(osRelease)
err = ini.MapTo(contents, osReleaseFile)
log.Debugf(commandOutputMessage, contents)
if err != nil {
log.Debugf(errorOccurredMessage, osReleaseFile, err)
return
}
name = contents.NAME
version = contents.VERSION_ID
} else if fileExists(systemReleaseFile) {
// We want to fall back to legacy behaviour in case some older versions of
// linux distributions do not have the or-release file
log.Debugf(fetchingDetailsMessage, systemReleaseFile)
contents, err = readAllText(systemReleaseFile)
log.Debugf(commandOutputMessage, contents)
if err != nil {
log.Debugf(errorOccurredMessage, systemReleaseFile, err)
return
}
if strings.Contains(contents, "Amazon") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
} else if strings.Contains(contents, "Red Hat") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
versionData := strings.Split(data[1], "(")
version = strings.TrimSpace(versionData[0])
}
} else if strings.Contains(contents, "CentOS") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
} else if strings.Contains(contents, "SLES") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
} else if strings.Contains(contents, "Raspbian") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
} else if strings.Contains(contents, "Oracle") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
} else if strings.Contains(contents, "Rocky") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
}
} else if fileExists(redhatReleaseFile) {
log.Debugf(fetchingDetailsMessage, redhatReleaseFile)
contents, err = readAllText(redhatReleaseFile)
log.Debugf(commandOutputMessage, contents)
if err != nil {
log.Debugf(errorOccurredMessage, redhatReleaseFile, err)
return
}
if strings.Contains(contents, "Red Hat") {
data := strings.Split(contents, "release")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
versionData := strings.Split(data[1], "(")
version = strings.TrimSpace(versionData[0])
}
}
} else if runtime.GOOS == "freebsd" {
log.Debugf(fetchingDetailsMessage, unameCommand)
if contentsBytes, err = exec.Command(unameCommand, "-sr").Output(); err != nil {
log.Debugf(fetchingDetailsMessage, unameCommand, err)
return
}
log.Debugf(commandOutputMessage, contentsBytes)
data := strings.Split(string(contentsBytes), " ")
name = strings.TrimSpace(data[0])
if len(data) >= 2 {
version = strings.TrimSpace(data[1])
}
} else {
log.Debugf(fetchingDetailsMessage, lsbReleaseCommand)
// platform name
if contentsBytes, err = exec.Command(lsbReleaseCommand, "-i").Output(); err != nil {
log.Debugf(fetchingDetailsMessage, lsbReleaseCommand, err)
return
}
name = strings.TrimSpace(string(contentsBytes))
log.Debugf(commandOutputMessage, name)
name = strings.TrimSpace(string(contentsBytes))
name = strings.TrimLeft(name, "Distributor ID:")
name = strings.TrimSpace(name)
log.Debugf("platform name %v", name)
// platform version
if contentsBytes, err = exec.Command(lsbReleaseCommand, "-r").Output(); err != nil {
log.Debugf(errorOccurredMessage, lsbReleaseCommand, err)
return
}
version = strings.TrimSpace(string(contentsBytes))
log.Debugf(commandOutputMessage, version)
version = strings.TrimLeft(version, "Release:")
version = strings.TrimSpace(version)
log.Debugf("platform version %v", version)
}
return
}