hetzner.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package metadata
  2. import (
  3. "gopkg.in/yaml.v2"
  4. "k8s.io/klog/v2"
  5. "net/http"
  6. )
  7. const hetznerInstanceMetadataURL = "http://169.254.169.254/hetzner/v1/metadata"
  8. type hetznerInstanceMetadata struct {
  9. AvailabilityZone string `yaml:"availability-zone"`
  10. InstanceId string `yaml:"instance-id"`
  11. PublicIPv4 string `yaml:"public-ipv4"`
  12. LocalIPv4 string `yaml:"local-ipv4"`
  13. Region string `yaml:"region"`
  14. }
  15. func getHetznerMetadata() *CloudMetadata {
  16. r, _ := http.NewRequest(http.MethodGet, hetznerInstanceMetadataURL, nil)
  17. resp, err := httpGetWithTimeout(r)
  18. if err != nil {
  19. klog.Errorln(err)
  20. return nil
  21. }
  22. defer resp.Body.Close()
  23. md := &hetznerInstanceMetadata{}
  24. decoder := yaml.NewDecoder(resp.Body)
  25. if err := decoder.Decode(md); err != nil {
  26. klog.Errorln("failed to unmarshall response of Hetzner metadata service:", err)
  27. return nil
  28. }
  29. res := &CloudMetadata{
  30. Provider: CloudProviderHetzner,
  31. InstanceId: md.InstanceId,
  32. Region: md.Region,
  33. AvailabilityZone: md.AvailabilityZone,
  34. LocalIPv4: md.LocalIPv4,
  35. PublicIPv4: md.PublicIPv4,
  36. }
  37. return res
  38. }