hetzner.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package metadata
  2. import (
  3. "net/http"
  4. "gopkg.in/yaml.v2"
  5. "k8s.io/klog/v2"
  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 := httpCallWithTimeout(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. }