Skip to content
Snippets Groups Projects
Unverified Commit a501fe75 authored by Manuel Hutter's avatar Manuel Hutter
Browse files

Avoid segfault when a resource is missing

In cases where a server or SSH key is removed from Hetzner Cloud
manually, the driver would segfault due to nil pointer references.

This commit handles cases where no resource is returned from the API.
parent 475d0ba4
Branches
Tags
No related merge requests found
......@@ -322,6 +322,9 @@ func (d *Driver) GetState() (state.State, error) {
if err != nil {
return state.None, errors.Wrap(err, "could not get server by ID")
}
if srv == nil {
return state.None, errors.New("server not found")
}
switch srv.Status {
case hcloud.ServerStatusInitializing:
......@@ -357,6 +360,10 @@ func (d *Driver) Remove() error {
if err != nil {
return errors.Wrap(err, "could not get ssh key")
}
if key == nil {
log.Infof(" -> SSH key does not exist anymore")
return nil
}
log.Infof(" -> Destroying SSHKey %s[%d]...", key.Name, key.ID)
......@@ -373,6 +380,9 @@ func (d *Driver) Restart() error {
if err != nil {
return errors.Wrap(err, "could not get server handle")
}
if srv == nil {
return errors.New("server not found")
}
act, _, err := d.getClient().Server.Reboot(context.Background(), srv)
if err != nil {
......@@ -389,6 +399,9 @@ func (d *Driver) Start() error {
if err != nil {
return errors.Wrap(err, "could not get server handle")
}
if srv == nil {
return errors.New("server not found")
}
act, _, err := d.getClient().Server.Poweron(context.Background(), srv)
if err != nil {
......@@ -405,6 +418,9 @@ func (d *Driver) Stop() error {
if err != nil {
return errors.Wrap(err, "could not get server handle")
}
if srv == nil {
return errors.New("server not found")
}
act, _, err := d.getClient().Server.Shutdown(context.Background(), srv)
if err != nil {
......@@ -421,6 +437,9 @@ func (d *Driver) Kill() error {
if err != nil {
return errors.Wrap(err, "could not get server handle")
}
if srv == nil {
return errors.New("server not found")
}
act, _, err := d.getClient().Server.Poweroff(context.Background(), srv)
if err != nil {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment