...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package internal
16
17 import (
18 "io/ioutil"
19 "net"
20 "net/http"
21 "os"
22 "strings"
23 "time"
24
25 "cloud.google.com/go/compute/metadata"
26 )
27
28
29 type ResourceAttributesGetter interface {
30 EnvVar(name string) string
31 Metadata(path string) string
32 ReadAll(path string) string
33 }
34
35 var getter ResourceAttributesGetter = &defaultResourceGetter{
36 metaClient: metadata.NewClient(&http.Client{
37 Transport: &http.Transport{
38 Dial: (&net.Dialer{
39 Timeout: 1 * time.Second,
40 KeepAlive: 10 * time.Second,
41 }).Dial,
42 },
43 })}
44
45
46 func ResourceAttributes() ResourceAttributesGetter {
47 return getter
48 }
49
50 type defaultResourceGetter struct {
51 metaClient *metadata.Client
52 }
53
54
55 func (g *defaultResourceGetter) EnvVar(name string) string {
56 return os.Getenv(name)
57 }
58
59
60 func (g *defaultResourceGetter) Metadata(path string) string {
61 val, err := g.metaClient.Get(path)
62 if err != nil {
63 return ""
64 }
65 return strings.TrimSpace(val)
66 }
67
68
69 func (g *defaultResourceGetter) ReadAll(path string) string {
70 bytes, err := ioutil.ReadFile(path)
71 if err != nil {
72 return ""
73 }
74 return string(bytes)
75 }
76
View as plain text