From f32f790b95122f5c247f1a4be5484407acaad61f Mon Sep 17 00:00:00 2001
From: JonasS <jonass@dev.jsje.de>
Date: Fri, 22 Oct 2021 19:28:55 +0200
Subject: [PATCH] refactor: incorporate changes from #73

---
 README.md | 20 ++++++++++----------
 driver.go | 31 ++++++++++++++++---------------
 2 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/README.md b/README.md
index 0aebe6e..35f9bd8 100644
--- a/README.md
+++ b/README.md
@@ -128,22 +128,22 @@ was used during creation.
 
 | CLI option                          | Environment variable              | Default                    |
 | ----------------------------------- | --------------------------------- | -------------------------- |
-| **`--hetzner-api-token`**           | `HETZNER_API_TOKEN`               | -                          |
+| **`--hetzner-api-token`**           | `HETZNER_API_TOKEN`               |                            |
 | `--hetzner-image`                   | `HETZNER_IMAGE`                   | `ubuntu-18.04`             |
-| `--hetzner-image-id`                | `HETZNER_IMAGE_ID`                | -                          |
+| `--hetzner-image-id`                | `HETZNER_IMAGE_ID`                |                            |
 | `--hetzner-server-type`             | `HETZNER_TYPE`                    | `cx11`                     |
-| `--hetzner-server-location`         | `HETZNER_LOCATION`                | - *(let Hetzner choose)*   |
-| `--hetzner-existing-key-path`       | `HETZNER_EXISTING_KEY_PATH`       | - *(generate new keypair)* |
+| `--hetzner-server-location`         | `HETZNER_LOCATION`                | *(let Hetzner choose)*     |
+| `--hetzner-existing-key-path`       | `HETZNER_EXISTING_KEY_PATH`       | *(generate new keypair)*   |
 | `--hetzner-existing-key-id`         | `HETZNER_EXISTING_KEY_ID`         | 0 *(upload new key)*       |
-| `--hetzner-additional-key`          | `HETZNER_ADDITIONAL_KEYS`         | -                          |
-| `--hetzner-user-data`               | `HETZNER_USER_DATA`               | -                          |
-| `--hetzner-networks`                | `HETZNER_NETWORKS`                | -                          |
-| `--hetzner-firewalls`               | `HETZNER_FIREWALLS`               | -                          |
-| `--hetzner-volumes`                 | `HETZNER_VOLUMES`                 | -                          |
+| `--hetzner-additional-key`          | `HETZNER_ADDITIONAL_KEYS`         |                            |
+| `--hetzner-user-data`               | `HETZNER_USER_DATA`               |                            |
+| `--hetzner-networks`                | `HETZNER_NETWORKS`                |                            |
+| `--hetzner-firewalls`               | `HETZNER_FIREWALLS`               |                            |
+| `--hetzner-volumes`                 | `HETZNER_VOLUMES`                 |                            |
 | `--hetzner-use-private-network`     | `HETZNER_USE_PRIVATE_NETWORK`     | false                      |
 | `--hetzner-server-label`            | (inoperative)                     | `[]`                       |
 | `--hetzner-key-label`               | (inoperative)                     | `[]`                       |
-| `--hetzner-placement-group`         | `HETZNER_PLACEMENT_GROUP`         | -                          |
+| `--hetzner-placement-group`         | `HETZNER_PLACEMENT_GROUP`         |                            |
 | `--hetzner-auto-spread`             | `HETZNER_AUTO_SPREAD`             | false                      |
 
 ## Building from source
diff --git a/driver.go b/driver.go
index 432a51f..8d9acfb 100644
--- a/driver.go
+++ b/driver.go
@@ -657,29 +657,30 @@ func (d *Driver) Remove() error {
 				return errors.Wrap(err, "could not delete server")
 			}
 
-			err = d.removeEmptyServerPlacementGroup(srv)
-			if err != nil {
-				log.Error(err) // not a hard failure
+			// failure to remove a placement group is not a hard error
+			if softErr := d.removeEmptyServerPlacementGroup(srv); softErr != nil {
+				log.Error(softErr)
 			}
 		}
 	}
 
-	// Failing to remove these is just a soft error
+	// failure to remove a key is not ha hard error
 	for i, id := range d.AdditionalKeyIDs {
 		log.Infof(" -> Destroying additional key #%d (%d)", i, id)
-		key, _, err := d.getClient().SSHKey.GetByID(context.Background(), id)
-		if err != nil {
-			log.Warnf(" ->  -> could not retrieve key %v", err)
+		key, _, softErr := d.getClient().SSHKey.GetByID(context.Background(), id)
+		if softErr != nil {
+			log.Warnf(" ->  -> could not retrieve key %v", softErr)
 		} else if key == nil {
 			log.Warnf(" ->  -> %d no longer exists", id)
 		}
 
-		_, err = d.getClient().SSHKey.Delete(context.Background(), key)
-		if err != nil {
-			log.Warnf(" ->  -> could not remove key: %v", err)
+		_, softErr = d.getClient().SSHKey.Delete(context.Background(), key)
+		if softErr != nil {
+			log.Warnf(" ->  -> could not remove key: %v", softErr)
 		}
 	}
 
+	// failure to remove a server-specific key is a hard error
 	if !d.IsExistingKey && d.KeyID != 0 {
 		key, err := d.getKey()
 		if err != nil {
@@ -953,16 +954,16 @@ func (d *Driver) makePlacementGroup(name string, labels map[string]string) (*hcl
 		d.dangling = append(d.dangling, func() {
 			_, err := d.getClient().PlacementGroup.Delete(context.Background(), grp.PlacementGroup)
 			if err != nil {
-				log.Error(fmt.Errorf("could not delete placement group: %w", err))
+				log.Errorf("could not delete placement group: %v", err)
 			}
 		})
 	}
 
 	if err != nil {
-		err = fmt.Errorf("could not create placement group: %w", err)
+		return nil, fmt.Errorf("could not create placement group: %w", err)
 	}
 
-	return grp.PlacementGroup, err
+	return grp.PlacementGroup, nil
 }
 
 func (d *Driver) getPlacementGroup() (*hcloud.PlacementGroup, error) {
@@ -1006,9 +1007,9 @@ func (d *Driver) removeEmptyServerPlacementGroup(srv *hcloud.Server) error {
 	if auto, exists := pg.Labels[d.labelName(labelAutoCreated)]; exists && auto == "true" {
 		_, err := d.getClient().PlacementGroup.Delete(context.Background(), pg)
 		if err != nil {
-			err = fmt.Errorf("could not remove placement group: %w", err)
+			return fmt.Errorf("could not remove placement group: %w", err)
 		}
-		return err
+		return nil
 	} else {
 		log.Debugf("group not auto-created, ignoring: %v", pg)
 		return nil
-- 
GitLab