diff --git a/README.md b/README.md index 7afdf44..0bf26be 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Currently, this tool supports four cloud providers: * `azure`: Microsoft Azure Cloud * `do`: Digital Ocean * `gcp`: Google Cloud Platform + * `aliyun`: Alibaba Cloud * ``: general discovery (baremetal) Not all providers support all network details. General discovery should be used diff --git a/discover/aliyun.go b/discover/aliyun.go new file mode 100644 index 0000000..93dba67 --- /dev/null +++ b/discover/aliyun.go @@ -0,0 +1,33 @@ +package discover + +import ( + "net" +) + +const ( + aliPrivateIPv4URL = "http://100.100.100.200/latest/meta-data/private-ipv4" + aliPublicIPv4URL = "http://100.100.100.200/latest/meta-data/eipv4" + aliHostnameURL = "http://100.100.100.200/latest/meta-data/hostname" +) + +// NewAliYunDiscoverer returns a new Alibaba Cloud Services network discoverer +func NewAliYunDiscoverer() Discoverer { + return NewDiscoverer( + PrivateIPv4DiscovererOption(aliPrivateIPv4), + PublicIPv4DiscovererOption(aliPublicIPv4), + PublicHostnameDiscovererOption(aliHostname), + ) + +} + +func aliPrivateIPv4() (net.IP, error) { + return StandardIPFromHTTP(aliPrivateIPv4URL, nil) +} + +func aliPublicIPv4() (net.IP, error) { + return StandardIPFromHTTP(aliPublicIPv4URL, nil) +} + +func aliHostname() (string, error) { + return StandardHostnameFromHTTP(aliHostnameURL, nil) +} diff --git a/main.go b/main.go index 30f8dac..d8478cb 100644 --- a/main.go +++ b/main.go @@ -18,7 +18,7 @@ var ( func init() { flag.BoolVar(&debug, "debug", false, `debug mode`) - flag.StringVar(&provider, "provider", "", `provider type. Options are: "aws", "azure", "do", gcp"`) + flag.StringVar(&provider, "provider", "", `provider type. Options are: "aws", "azure", "do", "gcp", "aliyun"`) flag.StringVar(&retField, "field", "", `return only a single field. Options are: "hostname", "publicv4", publicv6", "privatev4"`) } @@ -55,6 +55,8 @@ func main() { discoverer = discover.NewDigitalOceanDiscoverer() case "gcp": discoverer = discover.NewGCPDiscoverer() + case "aliyun": + discoverer = discover.NewAliYunDiscoverer() default: discoverer = discover.NewDiscoverer() }