Skip to content

Commit 5415602

Browse files
Merge pull request #70 from JanKoppe/feature-define-key-labels
Resolve #69: add flag to define key labels
2 parents 1d32c6c + 05dcd5e commit 5415602

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

driver.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type Driver struct {
4545
firewalls []string
4646
cachedServer *hcloud.Server
4747
serverLabels map[string]string
48+
keyLabels map[string]string
4849

4950
additionalKeys []string
5051
AdditionalKeyIDs []int
@@ -69,6 +70,7 @@ const (
6970
flagFirewalls = "hetzner-firewalls"
7071
flagAdditionalKeys = "hetzner-additional-key"
7172
flagServerLabel = "hetzner-server-label"
73+
flagKeyLabel = "hetzner-key-label"
7274
)
7375

7476
// NewDriver initializes a new driver instance; see [drivers.Driver.NewDriver]
@@ -175,6 +177,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
175177
Usage: "Key value pairs of additional labels to assign to the server",
176178
Value: []string{},
177179
},
180+
mcnflag.StringSliceFlag{
181+
EnvVar: "HETZNER_KEY_LABELS",
182+
Name: flagKeyLabel,
183+
Usage: "Key value pairs of additional labels to assign to the SSH key",
184+
Value: []string{},
185+
},
178186
}
179187
}
180188

@@ -223,6 +231,14 @@ func (d *Driver) setLabelsFromFlags(opts drivers.DriverOptions) error {
223231
}
224232
d.serverLabels[split[0]] = split[1]
225233
}
234+
d.keyLabels = make(map[string]string)
235+
for _, label := range opts.StringSlice(flagKeyLabel) {
236+
split := strings.SplitN(label, "=", 2)
237+
if len(split) != 2 {
238+
return errors.Errorf("key label %v is not in key=value format", label)
239+
}
240+
d.keyLabels[split[0]] = split[1]
241+
}
226242
return nil
227243
}
228244

@@ -465,7 +481,7 @@ func (d *Driver) createRemoteKeys() error {
465481
if key == nil {
466482
log.Infof("SSH key not found in Hetzner. Uploading...")
467483

468-
key, err = d.makeKey(d.GetMachineName(), string(buf))
484+
key, err = d.makeKey(d.GetMachineName(), string(buf), d.keyLabels)
469485
if err != nil {
470486
return err
471487
}
@@ -483,7 +499,7 @@ func (d *Driver) createRemoteKeys() error {
483499
}
484500
if key == nil {
485501
log.Infof("Creating new key for %v...", pubkey)
486-
key, err = d.makeKey(fmt.Sprintf("%v-additional-%d", d.GetMachineName(), i), pubkey)
502+
key, err = d.makeKey(fmt.Sprintf("%v-additional-%d", d.GetMachineName(), i), pubkey, d.keyLabels)
487503

488504
if err != nil {
489505
return errors.Wrapf(err, "error creating new key for %v", pubkey)
@@ -516,10 +532,11 @@ func (d *Driver) prepareLocalKey() error {
516532
}
517533

518534
// Creates a new key for the machine and appends it to the dangling key list
519-
func (d *Driver) makeKey(name string, pubkey string) (*hcloud.SSHKey, error) {
535+
func (d *Driver) makeKey(name string, pubkey string, labels map[string]string) (*hcloud.SSHKey, error) {
520536
keyopts := hcloud.SSHKeyCreateOpts{
521537
Name: name,
522538
PublicKey: pubkey,
539+
Labels: labels,
523540
}
524541

525542
key, _, err := d.getClient().SSHKey.Create(context.Background(), keyopts)

0 commit comments

Comments
 (0)