mirror of
https://github.com/minio/minio.git
synced 2025-01-11 15:03:22 -05:00
Add support for helm package info in useragent (#4592)
This commit is contained in:
parent
ba6d997d18
commit
7bd1f44491
@ -17,6 +17,7 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -140,6 +141,30 @@ func IsKubernetes() bool {
|
|||||||
return os.Getenv("KUBERNETES_SERVICE_HOST") != ""
|
return os.Getenv("KUBERNETES_SERVICE_HOST") != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Minio Helm chart uses DownwardAPIFile to write pod label info to /podinfo/labels
|
||||||
|
// More info: https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/#store-pod-fields
|
||||||
|
// Check if this is Helm package installation and report helm chart version
|
||||||
|
func getHelmVersion(helmInfoFilePath string) string {
|
||||||
|
// Read the file exists.
|
||||||
|
helmInfoFile, err := os.Open(helmInfoFilePath)
|
||||||
|
// Log errors and return "" as Minio can be deployed without Helm charts as well.
|
||||||
|
if err != nil && !os.IsNotExist(err) {
|
||||||
|
errorIf(err, "Unable to read %s", helmInfoFilePath)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(helmInfoFile)
|
||||||
|
for scanner.Scan() {
|
||||||
|
if strings.Contains(scanner.Text(), "chart=") {
|
||||||
|
helmChartVersion := strings.TrimPrefix(scanner.Text(), "chart=")
|
||||||
|
// remove quotes from the chart version
|
||||||
|
return strings.Trim(helmChartVersion, `"`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func isSourceBuild(minioVersion string) bool {
|
func isSourceBuild(minioVersion string) bool {
|
||||||
_, err := time.Parse(time.RFC3339, minioVersion)
|
_, err := time.Parse(time.RFC3339, minioVersion)
|
||||||
return err != nil
|
return err != nil
|
||||||
@ -182,6 +207,15 @@ func getUserAgent(mode string) string {
|
|||||||
userAgent += " Minio/" + "universe-" + universePkgVersion
|
userAgent += " Minio/" + "universe-" + universePkgVersion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if IsKubernetes() {
|
||||||
|
// In Kubernetes environment, try to fetch the helm package version
|
||||||
|
helmChartVersion := getHelmVersion("/podinfo/labels")
|
||||||
|
if helmChartVersion != "" {
|
||||||
|
userAgent += " Minio/" + "helm-" + helmChartVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return userAgent
|
return userAgent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,6 +235,48 @@ func TestIsKubernetes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tests if the environment we are running is Helm chart.
|
||||||
|
func TestGetHelmVersion(t *testing.T) {
|
||||||
|
createTempFile := func(content string) string {
|
||||||
|
tmpfile, err := ioutil.TempFile("", "helm-testfile-")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unable to create temporary file. %s", err)
|
||||||
|
}
|
||||||
|
if _, err = tmpfile.Write([]byte(content)); err != nil {
|
||||||
|
t.Fatalf("Unable to create temporary file. %s", err)
|
||||||
|
}
|
||||||
|
if err = tmpfile.Close(); err != nil {
|
||||||
|
t.Fatalf("Unable to create temporary file. %s", err)
|
||||||
|
}
|
||||||
|
return tmpfile.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
filename := createTempFile(
|
||||||
|
`app="virtuous-rat-minio"
|
||||||
|
chart="minio-0.1.3"
|
||||||
|
heritage="Tiller"
|
||||||
|
pod-template-hash="818089471"`)
|
||||||
|
|
||||||
|
defer os.Remove(filename)
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
filename string
|
||||||
|
expectedResult string
|
||||||
|
}{
|
||||||
|
{"", ""},
|
||||||
|
{"/tmp/non-existing-file", ""},
|
||||||
|
{filename, "minio-0.1.3"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, testCase := range testCases {
|
||||||
|
result := getHelmVersion(testCase.filename)
|
||||||
|
|
||||||
|
if testCase.expectedResult != result {
|
||||||
|
t.Fatalf("result: expected: %v, got: %v", testCase.expectedResult, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Tests if the environment we are running is in docker.
|
// Tests if the environment we are running is in docker.
|
||||||
func TestIsDocker(t *testing.T) {
|
func TestIsDocker(t *testing.T) {
|
||||||
createTempFile := func(content string) string {
|
createTempFile := func(content string) string {
|
||||||
|
Loading…
Reference in New Issue
Block a user