Skip to content

Commit

Permalink
fix: improve handling of metadata service connectivity (#466)
Browse files Browse the repository at this point in the history
* fix(controller): properly handle error on init

* refactor: simplify error generation

* fix: check for hcloud server

We had some issues where the container could not access the metadata
service and debugging this was hard. By validating this on startup and
logging a warning we can help guide users to fix the issue themselves.
  • Loading branch information
apricote committed Jul 21, 2023
1 parent 3622bcc commit 8ffa5fe
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 8 deletions.
11 changes: 7 additions & 4 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func CreateListener() (net.Listener, error) {
endpoint = endpoint[7:] // strip unix://

if err := os.Remove(endpoint); err != nil && !os.IsNotExist(err) {
return nil, errors.New(fmt.Sprintf("failed to remove socket file at %s: %s", endpoint, err))
return nil, fmt.Errorf("failed to remove socket file at %s: %s", endpoint, err)
}

return net.Listen("unix", endpoint)
Expand Down Expand Up @@ -145,6 +145,9 @@ func CreateHcloudClient(metricsRegistry *prometheus.Registry, logger log.Logger)
// GetServer retrieves the hcloud server the application is running on.
func GetServer(logger log.Logger, hcloudClient *hcloud.Client, metadataClient *metadata.Client) (*hcloud.Server, error) {
hcloudServerID, err := getServerID(logger, hcloudClient, metadataClient)
if err != nil {
return nil, err
}
level.Debug(logger).Log("msg", "fetching server")
server, _, err := hcloudClient.Server.GetByID(context.Background(), hcloudServerID)
if err != nil {
Expand All @@ -167,7 +170,7 @@ func getServerID(logger log.Logger, hcloudClient *hcloud.Client, metadataClient
if s := os.Getenv("HCLOUD_SERVER_ID"); s != "" {
id, err := strconv.ParseInt(s, 10, 64)
if err != nil {
return 0, errors.New(fmt.Sprintf("invalid server id in HCLOUD_SERVER_ID env var: %s", err))
return 0, fmt.Errorf("invalid server id in HCLOUD_SERVER_ID env var: %s", err)
}
level.Debug(logger).Log(
"msg", "using server id from HCLOUD_SERVER_ID env var",
Expand All @@ -179,7 +182,7 @@ func getServerID(logger log.Logger, hcloudClient *hcloud.Client, metadataClient
if s := os.Getenv("KUBE_NODE_NAME"); s != "" {
server, _, err := hcloudClient.Server.GetByName(context.Background(), s)
if err != nil {
return 0, errors.New(fmt.Sprintf("error while getting server through node name: %s", err))
return 0, fmt.Errorf("error while getting server through node name: %s", err)
}
if server != nil {
level.Debug(logger).Log(
Expand All @@ -199,7 +202,7 @@ func getServerID(logger log.Logger, hcloudClient *hcloud.Client, metadataClient
)
id, err := metadataClient.InstanceID()
if err != nil {
return 0, errors.New(fmt.Sprintf("failed to get instance id from metadata service: %s", err))
return 0, fmt.Errorf("failed to get instance id from metadata service: %s", err)
}
return id, nil
}
Expand Down
4 changes: 4 additions & 0 deletions cmd/aio/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ func main() {

metadataClient := metadata.NewClient(metadata.WithInstrumentation(m.Registry()))

if !metadataClient.IsHcloudServer() {
level.Warn(logger).Log("msg", "unable to connect to metadata service, are you sure this is running on a Hetzner Cloud server?")
}

// node
serverID, err := metadataClient.InstanceID()
if err != nil {
Expand Down
6 changes: 6 additions & 0 deletions cmd/controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ func main() {
} else {
metadataClient := metadata.NewClient(metadata.WithInstrumentation(m.Registry()))

if !metadataClient.IsHcloudServer() {
level.Warn(logger).Log("msg", "Unable to connect to metadata service. "+
"In the current configuration the controller is required to run on a Hetzner Cloud server. "+
"You can set HCLOUD_VOLUME_DEFAULT_LOCATION if you want to run it somewhere else.")
}

server, err := app.GetServer(logger, hcloudClient, metadataClient)
if err != nil {
level.Error(logger).Log(
Expand Down
4 changes: 4 additions & 0 deletions cmd/node/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ func main() {

metadataClient := metadata.NewClient(metadata.WithInstrumentation(m.Registry()))

if !metadataClient.IsHcloudServer() {
level.Warn(logger).Log("msg", "unable to connect to metadata service, are you sure this is running on a Hetzner Cloud server?")
}

serverID, err := metadataClient.InstanceID()
if err != nil {
level.Error(logger).Log("msg", "failed to fetch server ID from metadata service", "err", err)
Expand Down
3 changes: 1 addition & 2 deletions volumes/mount.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package volumes

import (
"errors"
"fmt"
"os"
"path/filepath"
Expand Down Expand Up @@ -163,7 +162,7 @@ func (s *LinuxMountService) Publish(targetPath string, devicePath string, opts M
func (s *LinuxMountService) Unpublish(targetPath string) error {
devicePath, _, err := mount.GetDeviceNameFromMount(mount.New(""), targetPath)
if err != nil {
return errors.New(fmt.Sprintf("failed to determine mount path for %s: %s", targetPath, err))
return fmt.Errorf("failed to determine mount path for %s: %s", targetPath, err)
}

level.Info(s.logger).Log(
Expand Down
3 changes: 1 addition & 2 deletions volumes/resize.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package volumes

import (
"errors"
"fmt"

"github.com/go-kit/kit/log"
Expand Down Expand Up @@ -36,7 +35,7 @@ func NewLinuxResizeService(logger log.Logger) *LinuxResizeService {
func (l *LinuxResizeService) Resize(volumePath string) error {
devicePath, _, err := mount.GetDeviceNameFromMount(mount.New(""), volumePath)
if err != nil {
return errors.New(fmt.Sprintf("failed to determine mount path for %s: %s", volumePath, err))
return fmt.Errorf("failed to determine mount path for %s: %s", volumePath, err)
}

level.Info(l.logger).Log(
Expand Down

0 comments on commit 8ffa5fe

Please sign in to comment.