@@ -37,6 +37,8 @@ type Driver struct {
37
37
danglingKey bool
38
38
ServerID int
39
39
userData string
40
+ volumes []string
41
+ networks []string
40
42
cachedServer * hcloud.Server
41
43
}
42
44
@@ -52,6 +54,8 @@ const (
52
54
flagExKeyID = "hetzner-existing-key-id"
53
55
flagExKeyPath = "hetzner-existing-key-path"
54
56
flagUserData = "hetzner-user-data"
57
+ flagVolumes = "hetzner-volumes"
58
+ flagNetworks = "hetzner-networks"
55
59
)
56
60
57
61
func NewDriver () * Driver {
@@ -120,6 +124,18 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
120
124
Usage : "Cloud-init based User data" ,
121
125
Value : "" ,
122
126
},
127
+ mcnflag.StringSliceFlag {
128
+ EnvVar : "HETZNER_VOLUMES" ,
129
+ Name : flagVolumes ,
130
+ Usage : "Volume IDs or names which should be attached to the server" ,
131
+ Value : []string {},
132
+ },
133
+ mcnflag.StringSliceFlag {
134
+ EnvVar : "HETZNER_NETWORKS" ,
135
+ Name : flagNetworks ,
136
+ Usage : "Network IDs or names which should be attached to the server private network interface" ,
137
+ Value : []string {},
138
+ },
123
139
}
124
140
}
125
141
@@ -133,6 +149,8 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
133
149
d .IsExistingKey = d .KeyID != 0
134
150
d .originalKey = opts .String (flagExKeyPath )
135
151
d .userData = opts .String (flagUserData )
152
+ d .volumes = opts .StringSlice (flagVolumes )
153
+ d .networks = opts .StringSlice (flagNetworks )
136
154
137
155
d .SetSwarmConfigFromFlags (opts )
138
156
@@ -233,6 +251,25 @@ func (d *Driver) Create() error {
233
251
Name : d .GetMachineName (),
234
252
UserData : d .userData ,
235
253
}
254
+ networks := []* hcloud.Network {}
255
+ for _ , networkIDorName := range d .networks {
256
+ network , _ , err := d .getClient ().Network .Get (context .Background (), networkIDorName )
257
+ if err != nil {
258
+ return errors .Wrap (err , "could not get network by ID or name" )
259
+ }
260
+ networks = append (networks , network )
261
+ }
262
+ srvopts .Networks = networks
263
+
264
+ volumes := []* hcloud.Volume {}
265
+ for _ , volumeIDorName := range d .volumes {
266
+ volume , _ , err := d .getClient ().Volume .Get (context .Background (), volumeIDorName )
267
+ if err != nil {
268
+ return errors .Wrap (err , "could not get volume by ID or name" )
269
+ }
270
+ volumes = append (volumes , volume )
271
+ }
272
+ srvopts .Volumes = volumes
236
273
237
274
var err error
238
275
if srvopts .Location , err = d .getLocation (); err != nil {
0 commit comments