Skip to content

Commit a501fe7

Browse files
committed
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.
1 parent 475d0ba commit a501fe7

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

driver.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,9 @@ func (d *Driver) GetState() (state.State, error) {
322322
if err != nil {
323323
return state.None, errors.Wrap(err, "could not get server by ID")
324324
}
325+
if srv == nil {
326+
return state.None, errors.New("server not found")
327+
}
325328

326329
switch srv.Status {
327330
case hcloud.ServerStatusInitializing:
@@ -357,6 +360,10 @@ func (d *Driver) Remove() error {
357360
if err != nil {
358361
return errors.Wrap(err, "could not get ssh key")
359362
}
363+
if key == nil {
364+
log.Infof(" -> SSH key does not exist anymore")
365+
return nil
366+
}
360367

361368
log.Infof(" -> Destroying SSHKey %s[%d]...", key.Name, key.ID)
362369

@@ -373,6 +380,9 @@ func (d *Driver) Restart() error {
373380
if err != nil {
374381
return errors.Wrap(err, "could not get server handle")
375382
}
383+
if srv == nil {
384+
return errors.New("server not found")
385+
}
376386

377387
act, _, err := d.getClient().Server.Reboot(context.Background(), srv)
378388
if err != nil {
@@ -389,6 +399,9 @@ func (d *Driver) Start() error {
389399
if err != nil {
390400
return errors.Wrap(err, "could not get server handle")
391401
}
402+
if srv == nil {
403+
return errors.New("server not found")
404+
}
392405

393406
act, _, err := d.getClient().Server.Poweron(context.Background(), srv)
394407
if err != nil {
@@ -405,6 +418,9 @@ func (d *Driver) Stop() error {
405418
if err != nil {
406419
return errors.Wrap(err, "could not get server handle")
407420
}
421+
if srv == nil {
422+
return errors.New("server not found")
423+
}
408424

409425
act, _, err := d.getClient().Server.Shutdown(context.Background(), srv)
410426
if err != nil {
@@ -421,6 +437,9 @@ func (d *Driver) Kill() error {
421437
if err != nil {
422438
return errors.Wrap(err, "could not get server handle")
423439
}
440+
if srv == nil {
441+
return errors.New("server not found")
442+
}
424443

425444
act, _, err := d.getClient().Server.Poweroff(context.Background(), srv)
426445
if err != nil {

0 commit comments

Comments
 (0)