| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package metadata
- import (
- "net/http"
- klog "github.com/sirupsen/logrus"
- "gopkg.in/yaml.v2"
- )
- const hetznerInstanceMetadataURL = "http://169.254.169.254/hetzner/v1/metadata"
- type hetznerInstanceMetadata struct {
- AvailabilityZone string `yaml:"availability-zone"`
- InstanceId string `yaml:"instance-id"`
- PublicIPv4 string `yaml:"public-ipv4"`
- LocalIPv4 string `yaml:"local-ipv4"`
- Region string `yaml:"region"`
- }
- func getHetznerMetadata() *CloudMetadata {
- r, _ := http.NewRequest(http.MethodGet, hetznerInstanceMetadataURL, nil)
- resp, err := httpCallWithTimeout(r)
- if err != nil {
- klog.Errorln(err)
- return nil
- }
- defer resp.Body.Close()
- md := &hetznerInstanceMetadata{}
- decoder := yaml.NewDecoder(resp.Body)
- if err := decoder.Decode(md); err != nil {
- klog.Errorln("failed to unmarshall response of Hetzner metadata service:", err)
- return nil
- }
- res := &CloudMetadata{
- Provider: CloudProviderHetzner,
- InstanceId: md.InstanceId,
- Region: md.Region,
- AvailabilityZone: md.AvailabilityZone,
- LocalIPv4: md.LocalIPv4,
- PublicIPv4: md.PublicIPv4,
- }
- return res
- }
|