Skip to content

Commit 4f95b6b

Browse files
authored
Merge pull request #167 from coroot/alibaba_metadata
instance metadata: add support for Alibaba Cloud
2 parents 67a13bb + c8449aa commit 4f95b6b

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

node/metadata/alibaba.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package metadata
2+
3+
import (
4+
"io"
5+
"net/http"
6+
7+
"k8s.io/klog/v2"
8+
)
9+
10+
const alibabaInstanceMetadataURL = "http://100.100.100.200/latest/meta-data/"
11+
12+
func getAlibabaMetadata() *CloudMetadata {
13+
var lastErr error
14+
getVar := func(path string) string {
15+
r, _ := http.NewRequest(http.MethodGet, alibabaInstanceMetadataURL+path, nil)
16+
resp, err := httpCallWithTimeout(r)
17+
if err != nil {
18+
lastErr = err
19+
return ""
20+
}
21+
defer resp.Body.Close()
22+
data, err := io.ReadAll(resp.Body)
23+
if err != nil {
24+
lastErr = err
25+
return ""
26+
}
27+
return string(data)
28+
}
29+
res := &CloudMetadata{
30+
Provider: CloudProviderAlibaba,
31+
InstanceId: getVar("instance-id"),
32+
Region: getVar("region-id"),
33+
AvailabilityZone: getVar("zone-id"),
34+
AccountId: getVar("owner-account-id"),
35+
InstanceType: getVar("instance/instance-type"),
36+
LocalIPv4: getVar("private-ipv4"),
37+
}
38+
if lastErr != nil {
39+
klog.Warningln(lastErr)
40+
return nil
41+
}
42+
return res
43+
}

node/metadata/metadata.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const (
2020
CloudProviderAzure CloudProvider = "Azure"
2121
CloudProviderHetzner CloudProvider = "Hetzner"
2222
CloudProviderDigitalOcean CloudProvider = "DigitalOcean"
23+
CloudProviderAlibaba CloudProvider = "Alibaba"
2324
CloudProviderUnknown CloudProvider = ""
2425
)
2526

@@ -55,8 +56,11 @@ func getCloudProvider() CloudProvider {
5556
}
5657
}
5758
if vendor, err := os.ReadFile("/sys/class/dmi/id/sys_vendor"); err == nil {
58-
if strings.TrimSpace(string(vendor)) == "Hetzner" {
59+
switch strings.TrimSpace(string(vendor)) {
60+
case "Hetzner":
5961
return CloudProviderHetzner
62+
case "Alibaba Cloud":
63+
return CloudProviderAlibaba
6064
}
6165
}
6266
return CloudProviderUnknown
@@ -76,6 +80,8 @@ func GetInstanceMetadata() *CloudMetadata {
7680
return getHetznerMetadata()
7781
case CloudProviderDigitalOcean:
7882
return getDigitalOceanMetadata()
83+
case CloudProviderAlibaba:
84+
return getAlibabaMetadata()
7985
}
8086
return nil
8187
}

0 commit comments

Comments
 (0)