6
6
"io/ioutil"
7
7
"net"
8
8
"os"
9
+ "strings"
9
10
"time"
10
11
11
12
"github.com/docker/machine/libmachine/drivers"
@@ -41,6 +42,7 @@ type Driver struct {
41
42
networks []string
42
43
UsePrivateNetwork bool
43
44
cachedServer * hcloud.Server
45
+ serverLabels map [string ]string
44
46
45
47
additionalKeys []string
46
48
AdditionalKeyIDs []int
@@ -63,6 +65,7 @@ const (
63
65
flagNetworks = "hetzner-networks"
64
66
flagUsePrivateNetwork = "hetzner-use-private-network"
65
67
flagAdditionalKeys = "hetzner-additional-key"
68
+ flagServerLabel = "hetzner-server-label"
66
69
)
67
70
68
71
func NewDriver () * Driver {
@@ -154,6 +157,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
154
157
Usage : "Additional public keys to be attached to the server" ,
155
158
Value : []string {},
156
159
},
160
+ mcnflag.StringSliceFlag {
161
+ EnvVar : "HETZNER_SERVER_LABELS" ,
162
+ Name : flagServerLabel ,
163
+ Usage : "Key value pairs of additional labels to assign to the server" ,
164
+ Value : []string {},
165
+ },
157
166
}
158
167
}
159
168
@@ -172,6 +181,11 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
172
181
d .UsePrivateNetwork = opts .Bool (flagUsePrivateNetwork )
173
182
d .additionalKeys = opts .StringSlice (flagAdditionalKeys )
174
183
184
+ err := d .setLabelsFromFlags (opts )
185
+ if err != nil {
186
+ return err
187
+ }
188
+
175
189
d .SetSwarmConfigFromFlags (opts )
176
190
177
191
if d .AccessToken == "" {
@@ -185,6 +199,18 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
185
199
return nil
186
200
}
187
201
202
+ func (d * Driver ) setLabelsFromFlags (opts drivers.DriverOptions ) error {
203
+ d .serverLabels = make (map [string ]string )
204
+ for _ , label := range opts .StringSlice (flagServerLabel ) {
205
+ split := strings .SplitN (label , "=" , 2 )
206
+ if len (split ) != 2 {
207
+ return errors .Errorf ("server label %v is not in key=value format" , label )
208
+ }
209
+ d .serverLabels [split [0 ]] = split [1 ]
210
+ }
211
+ return nil
212
+ }
213
+
188
214
func (d * Driver ) PreCreateCheck () error {
189
215
if d .IsExistingKey {
190
216
if d .originalKey == "" {
@@ -299,6 +325,7 @@ func (d *Driver) Create() error {
299
325
srvopts := hcloud.ServerCreateOpts {
300
326
Name : d .GetMachineName (),
301
327
UserData : d .userData ,
328
+ Labels : d .serverLabels ,
302
329
}
303
330
networks := []* hcloud.Network {}
304
331
for _ , networkIDorName := range d .networks {
0 commit comments