1
1
package metadata
2
2
3
3
import (
4
+ "fmt"
4
5
"github.com/Sirupsen/logrus"
5
6
"github.com/rancher/external-dns/dns"
6
7
"github.com/rancher/go-rancher-metadata/metadata"
8
+ "time"
7
9
)
8
10
9
11
const (
@@ -15,19 +17,36 @@ type MetadataClient struct {
15
17
EnvironmentName string
16
18
}
17
19
20
+ func getEnvironmentName (m * metadata.Client ) (string , error ) {
21
+ timeout := 30 * time .Second
22
+ var err error
23
+ var stack metadata.Stack
24
+ for i := 1 * time .Second ; i < timeout ; i *= time .Duration (2 ) {
25
+ stack , err = m .GetSelfStack ()
26
+ if err != nil {
27
+ logrus .Errorf ("Error reading stack info: %v...will retry" , err )
28
+ time .Sleep (i )
29
+ } else {
30
+ return stack .EnvironmentName , nil
31
+ }
32
+ }
33
+ return "" , fmt .Errorf ("Error reading stack info: %v" , err )
34
+ }
35
+
18
36
func NewMetadataClient () (* MetadataClient , error ) {
19
37
m , err := metadata .NewClientAndWait (metadataUrl )
20
38
if err != nil {
21
39
logrus .Fatalf ("Failed to configure rancher-metadata: %v" , err )
22
40
}
23
- selfStack , err := m .GetSelfStack ()
41
+
42
+ envName , err := getEnvironmentName (m )
24
43
if err != nil {
25
44
logrus .Fatalf ("Error reading stack info: %v" , err )
26
45
}
27
46
28
47
return & MetadataClient {
29
48
MetadataClient : m ,
30
- EnvironmentName : selfStack . EnvironmentName ,
49
+ EnvironmentName : envName ,
31
50
}, nil
32
51
}
33
52
0 commit comments