...
1
18
19
20 package googlecloud
21
22 import (
23 "runtime"
24 "strings"
25 "sync"
26
27 "google.golang.org/grpc/grpclog"
28 internalgrpclog "google.golang.org/grpc/internal/grpclog"
29 )
30
31 const logPrefix = "[googlecloud]"
32
33 var (
34 vmOnGCEOnce sync.Once
35 vmOnGCE bool
36
37 logger = internalgrpclog.NewPrefixLogger(grpclog.Component("googlecloud"), logPrefix)
38 )
39
40
41
42
43
44 func OnGCE() bool {
45 vmOnGCEOnce.Do(func() {
46 mf, err := manufacturer()
47 if err != nil {
48 logger.Infof("failed to read manufacturer, setting onGCE=false: %v")
49 return
50 }
51 vmOnGCE = isRunningOnGCE(mf, runtime.GOOS)
52 })
53 return vmOnGCE
54 }
55
56
57
58 func isRunningOnGCE(manufacturer []byte, goos string) bool {
59 name := string(manufacturer)
60 switch goos {
61 case "linux":
62 name = strings.TrimSpace(name)
63 return name == "Google" || name == "Google Compute Engine"
64 case "windows":
65 name = strings.Replace(name, " ", "", -1)
66 name = strings.Replace(name, "\n", "", -1)
67 name = strings.Replace(name, "\r", "", -1)
68 return name == "Google"
69 default:
70 return false
71 }
72 }
73
View as plain text