@@ -16,6 +16,7 @@ import (
16
16
"golang.org/x/oauth2"
17
17
18
18
"github.com/docker/go-plugins-helpers/volume"
19
+ metadata "github.com/linode/go-metadata"
19
20
"github.com/linode/linodego"
20
21
log "github.com/sirupsen/logrus"
21
22
)
@@ -84,10 +85,30 @@ func setupLinodeAPI(token string) *linodego.Client {
84
85
return & api
85
86
}
86
87
88
+ func metadataServicesAvailable () bool {
89
+ conn , err := net .DialTimeout ("tcp" , fmt .Sprintf ("%s:80" , metadata .APIHost ), 2 * time .Second )
90
+ if err != nil {
91
+ return false
92
+ }
93
+
94
+ conn .Close ()
95
+ return true
96
+ }
97
+
87
98
func (driver * linodeVolumeDriver ) determineLinodeID () error {
99
+ if metadataServicesAvailable () {
100
+ err := driver .determineLinodeIDFromMetadata ()
101
+ if err != nil {
102
+ log .Error (
103
+ "Failed to get linode info from Linode metadata service. " +
104
+ "Other methods will be used." ,
105
+ )
106
+ }
107
+ }
108
+
88
109
if driver .linodeLabel == "" {
89
110
// If the label isn't defined, we should determine the IP through the network interface
90
- log .Infof ("Using network interface to determine Linode ID" )
111
+ log .Info ("Using network interface to determine Linode ID" )
91
112
92
113
if err := driver .determineLinodeIDFromNetworking (); err != nil {
93
114
return fmt .Errorf ("Failed to determine Linode ID from networking: %s\n " +
@@ -98,6 +119,28 @@ func (driver *linodeVolumeDriver) determineLinodeID() error {
98
119
return nil
99
120
}
100
121
122
+ return driver .determineLinodeIDFromLabel ()
123
+ }
124
+
125
+ func (driver * linodeVolumeDriver ) determineLinodeIDFromMetadata () error {
126
+ client , err := metadata .NewClient (context .Background ())
127
+ if err != nil {
128
+ return err
129
+ }
130
+
131
+ instanceInfo , err := client .GetInstance (context .Background ())
132
+ if err != nil {
133
+ return err
134
+ }
135
+
136
+ driver .instanceID = instanceInfo .ID
137
+ driver .region = instanceInfo .Region
138
+ driver .linodeLabel = instanceInfo .Label
139
+
140
+ return nil
141
+ }
142
+
143
+ func (driver * linodeVolumeDriver ) determineLinodeIDFromLabel () error {
101
144
jsonFilter , _ := json .Marshal (map [string ]string {"label" : driver .linodeLabel })
102
145
listOpts := linodego .NewListOptions (0 , string (jsonFilter ))
103
146
linodes , lErr := driver .linodeAPIPtr .ListInstances (context .Background (), listOpts )
@@ -292,7 +335,6 @@ func (driver *linodeVolumeDriver) Create(req *volume.CreateRequest) error {
292
335
293
336
// Remove implementation
294
337
func (driver * linodeVolumeDriver ) Remove (req * volume.RemoveRequest ) error {
295
-
296
338
driver .mutex .Lock ()
297
339
defer driver .mutex .Unlock ()
298
340
@@ -374,7 +416,7 @@ func (driver *linodeVolumeDriver) Mount(req *volume.MountRequest) (*volume.Mount
374
416
mp := driver .labelToMountPoint (linVol .Label )
375
417
if _ , err := os .Stat (mp ); os .IsNotExist (err ) {
376
418
log .Infof ("Creating mountpoint directory: %s" , mp )
377
- if err = os .MkdirAll (mp , 0755 ); err != nil {
419
+ if err = os .MkdirAll (mp , 0o755 ); err != nil {
378
420
return nil , fmt .Errorf ("Error creating mountpoint directory(%s): %s" , mp , err )
379
421
}
380
422
}
@@ -556,7 +598,6 @@ func waitForVolumeNotBusy(api *linodego.Client, volumeID int) error {
556
598
filter .Order = "desc"
557
599
558
600
detachFilterStr , err := filter .MarshalJSON ()
559
-
560
601
if err != nil {
561
602
return err
562
603
}
0 commit comments