Skip to content

Commit ce52987

Browse files
committed
added support for gathering metadata from DigitalOcean droplets
1 parent 30be0a4 commit ce52987

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

node/metadata/digital_ocean.go

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package metadata
2+
3+
import (
4+
"io"
5+
"k8s.io/klog/v2"
6+
"net/http"
7+
)
8+
9+
const doInstanceMetadataURL = "http://169.254.169.254/metadata/v1/"
10+
11+
func getDigitalOceanMetadata() *CloudMetadata {
12+
var lastErr error
13+
getVar := func(path string) string {
14+
r, _ := http.NewRequest(http.MethodGet, doInstanceMetadataURL+path, nil)
15+
resp, err := httpGetWithTimeout(r)
16+
if err != nil {
17+
lastErr = err
18+
return ""
19+
}
20+
defer resp.Body.Close()
21+
data, err := io.ReadAll(resp.Body)
22+
if err != nil {
23+
lastErr = err
24+
return ""
25+
}
26+
return string(data)
27+
}
28+
res := &CloudMetadata{
29+
Provider: CloudProviderDigitalOcean,
30+
InstanceId: getVar("id"),
31+
Region: getVar("region"),
32+
}
33+
res.AvailabilityZone = res.Region
34+
if lastErr != nil {
35+
klog.Warningln(lastErr)
36+
return nil
37+
}
38+
return res
39+
}

node/metadata/metadata.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ const metadataServiceTimeout = 5 * time.Second
1414
type CloudProvider string
1515

1616
const (
17-
CloudProviderAWS CloudProvider = "AWS"
18-
CloudProviderGCP CloudProvider = "GCP"
19-
CloudProviderAzure CloudProvider = "Azure"
20-
CloudProviderHetzner CloudProvider = "Hetzner"
21-
CloudProviderUnknown CloudProvider = ""
17+
CloudProviderAWS CloudProvider = "AWS"
18+
CloudProviderGCP CloudProvider = "GCP"
19+
CloudProviderAzure CloudProvider = "Azure"
20+
CloudProviderHetzner CloudProvider = "Hetzner"
21+
CloudProviderDigitalOcean CloudProvider = "DigitalOcean"
22+
CloudProviderUnknown CloudProvider = ""
2223
)
2324

2425
type CloudMetadata struct {
@@ -48,6 +49,8 @@ func getCloudProvider() CloudProvider {
4849
return CloudProviderGCP
4950
case "Microsoft Corporation":
5051
return CloudProviderAzure
52+
case "DigitalOcean":
53+
return CloudProviderDigitalOcean
5154
}
5255
}
5356
if vendor, err := os.ReadFile("/sys/class/dmi/id/sys_vendor"); err == nil {
@@ -70,6 +73,8 @@ func GetInstanceMetadata() *CloudMetadata {
7073
return getAzureMetadata()
7174
case CloudProviderHetzner:
7275
return getHetznerMetadata()
76+
case CloudProviderDigitalOcean:
77+
return getDigitalOceanMetadata()
7378
}
7479
return nil
7580
}

0 commit comments

Comments
 (0)