@@ -45,6 +45,7 @@ type Driver struct {
45
45
firewalls []string
46
46
cachedServer * hcloud.Server
47
47
serverLabels map [string ]string
48
+ keyLabels map [string ]string
48
49
49
50
additionalKeys []string
50
51
AdditionalKeyIDs []int
@@ -69,6 +70,7 @@ const (
69
70
flagFirewalls = "hetzner-firewalls"
70
71
flagAdditionalKeys = "hetzner-additional-key"
71
72
flagServerLabel = "hetzner-server-label"
73
+ flagKeyLabel = "hetzner-key-label"
72
74
)
73
75
74
76
// NewDriver initializes a new driver instance; see [drivers.Driver.NewDriver]
@@ -175,6 +177,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
175
177
Usage : "Key value pairs of additional labels to assign to the server" ,
176
178
Value : []string {},
177
179
},
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
+ },
178
186
}
179
187
}
180
188
@@ -223,6 +231,14 @@ func (d *Driver) setLabelsFromFlags(opts drivers.DriverOptions) error {
223
231
}
224
232
d .serverLabels [split [0 ]] = split [1 ]
225
233
}
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
+ }
226
242
return nil
227
243
}
228
244
@@ -465,7 +481,7 @@ func (d *Driver) createRemoteKeys() error {
465
481
if key == nil {
466
482
log .Infof ("SSH key not found in Hetzner. Uploading..." )
467
483
468
- key , err = d .makeKey (d .GetMachineName (), string (buf ))
484
+ key , err = d .makeKey (d .GetMachineName (), string (buf ), d . keyLabels )
469
485
if err != nil {
470
486
return err
471
487
}
@@ -483,7 +499,7 @@ func (d *Driver) createRemoteKeys() error {
483
499
}
484
500
if key == nil {
485
501
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 )
487
503
488
504
if err != nil {
489
505
return errors .Wrapf (err , "error creating new key for %v" , pubkey )
@@ -516,10 +532,11 @@ func (d *Driver) prepareLocalKey() error {
516
532
}
517
533
518
534
// 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 ) {
520
536
keyopts := hcloud.SSHKeyCreateOpts {
521
537
Name : name ,
522
538
PublicKey : pubkey ,
539
+ Labels : labels ,
523
540
}
524
541
525
542
key , _ , err := d .getClient ().SSHKey .Create (context .Background (), keyopts )
0 commit comments