@@ -37,6 +37,8 @@ type Driver struct {
3737 danglingKey bool
3838 ServerID int
3939 userData string
40+ volumes []string
41+ networks []string
4042 cachedServer * hcloud.Server
4143}
4244
@@ -52,6 +54,8 @@ const (
5254 flagExKeyID = "hetzner-existing-key-id"
5355 flagExKeyPath = "hetzner-existing-key-path"
5456 flagUserData = "hetzner-user-data"
57+ flagVolumes = "hetzner-volumes"
58+ flagNetworks = "hetzner-networks"
5559)
5660
5761func NewDriver () * Driver {
@@ -120,6 +124,18 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
120124 Usage : "Cloud-init based User data" ,
121125 Value : "" ,
122126 },
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+ },
123139 }
124140}
125141
@@ -133,6 +149,8 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
133149 d .IsExistingKey = d .KeyID != 0
134150 d .originalKey = opts .String (flagExKeyPath )
135151 d .userData = opts .String (flagUserData )
152+ d .volumes = opts .StringSlice (flagVolumes )
153+ d .networks = opts .StringSlice (flagNetworks )
136154
137155 d .SetSwarmConfigFromFlags (opts )
138156
@@ -233,6 +251,25 @@ func (d *Driver) Create() error {
233251 Name : d .GetMachineName (),
234252 UserData : d .userData ,
235253 }
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
236273
237274 var err error
238275 if srvopts .Location , err = d .getLocation (); err != nil {
0 commit comments