digital_ocean.go 803 B

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