From 85653447e7737e93c08c3cb1e4887823f88578ce Mon Sep 17 00:00:00 2001 From: JonasS <jonass@dev.jsje.de> Date: Fri, 1 Jan 2021 15:04:02 +0100 Subject: [PATCH] 3.2.0 - added --hetzner-server-label option, closes #56 --- README.md | 6 ++++-- driver.go | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f1d83ac..9e88066 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ You can find sources and pre-compiled binaries [here](https://github.com/JonasPr ```bash # Download the binary (this example downloads the binary for linux amd64) -$ wget https://github.com/JonasProgrammer/docker-machine-driver-hetzner/releases/download/3.1.1/docker-machine-driver-hetzner_3.1.1_linux_amd64.tar.gz -$ tar -xvf docker-machine-driver-hetzner_3.1.1_linux_amd64.tar.gz +$ wget https://github.com/JonasProgrammer/docker-machine-driver-hetzner/releases/download/3.2.0/docker-machine-driver-hetzner_3.2.0_linux_amd64.tar.gz +$ tar -xvf docker-machine-driver-hetzner_3.2.0_linux_amd64.tar.gz # Make it executable and copy the binary in a directory accessible with your $PATH $ chmod +x docker-machine-driver-hetzner @@ -103,6 +103,7 @@ $ docker-machine create \ - `--hetzner-volumes`: Volume IDs or names which should be attached to the server - `--hetzner-networks`: Network IDs or names which should be attached to the server private network interface - `--hetzner-use-private-network`: Use private network +- `--hetzner-server-label`: `key=value` pairs of additional metadata to assign to the server. #### Existing SSH keys @@ -135,6 +136,7 @@ was used during creation. | `--hetzner-networks` | `HETZNER_NETWORKS` | - | | `--hetzner-volumes` | `HETZNER_VOLUMES` | - | | `--hetzner-use-private-network` | `HETZNER_USE_PRIVATE_NETWORK` | false | +| `--hetzner-server-label` | `HETZNER_SERVER_LABELS` | `[]` | ## Building from source diff --git a/driver.go b/driver.go index d4d975e..48cd509 100644 --- a/driver.go +++ b/driver.go @@ -6,6 +6,7 @@ import ( "io/ioutil" "net" "os" + "strings" "time" "github.com/docker/machine/libmachine/drivers" @@ -41,6 +42,7 @@ type Driver struct { networks []string UsePrivateNetwork bool cachedServer *hcloud.Server + serverLabels map[string]string additionalKeys []string AdditionalKeyIDs []int @@ -63,6 +65,7 @@ const ( flagNetworks = "hetzner-networks" flagUsePrivateNetwork = "hetzner-use-private-network" flagAdditionalKeys = "hetzner-additional-key" + flagServerLabel = "hetzner-server-label" ) func NewDriver() *Driver { @@ -154,6 +157,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { Usage: "Additional public keys to be attached to the server", Value: []string{}, }, + mcnflag.StringSliceFlag{ + EnvVar: "HETZNER_SERVER_LABELS", + Name: flagServerLabel, + Usage: "Key value pairs of additional labels to assign to the server", + Value: []string{}, + }, } } @@ -172,6 +181,11 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error { d.UsePrivateNetwork = opts.Bool(flagUsePrivateNetwork) d.additionalKeys = opts.StringSlice(flagAdditionalKeys) + err := d.setLabelsFromFlags(opts) + if err != nil { + return err + } + d.SetSwarmConfigFromFlags(opts) if d.AccessToken == "" { @@ -185,6 +199,18 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error { return nil } +func (d *Driver) setLabelsFromFlags(opts drivers.DriverOptions) error { + d.serverLabels = make(map[string]string) + for _, label := range opts.StringSlice(flagServerLabel) { + split := strings.SplitN(label, "=", 2) + if len(split) != 2 { + return errors.Errorf("server label %v is not in key=value format", label) + } + d.serverLabels[split[0]] = split[1] + } + return nil +} + func (d *Driver) PreCreateCheck() error { if d.IsExistingKey { if d.originalKey == "" { @@ -299,6 +325,7 @@ func (d *Driver) Create() error { srvopts := hcloud.ServerCreateOpts{ Name: d.GetMachineName(), UserData: d.userData, + Labels: d.serverLabels, } networks := []*hcloud.Network{} for _, networkIDorName := range d.networks { -- GitLab