@@ -41,6 +41,7 @@ type Driver struct {
41
41
volumes []string
42
42
networks []string
43
43
UsePrivateNetwork bool
44
+ firewalls []string
44
45
cachedServer * hcloud.Server
45
46
serverLabels map [string ]string
46
47
@@ -64,6 +65,7 @@ const (
64
65
flagVolumes = "hetzner-volumes"
65
66
flagNetworks = "hetzner-networks"
66
67
flagUsePrivateNetwork = "hetzner-use-private-network"
68
+ flagFirewalls = "hetzner-firewalls"
67
69
flagAdditionalKeys = "hetzner-additional-key"
68
70
flagServerLabel = "hetzner-server-label"
69
71
)
@@ -151,6 +153,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
151
153
Name : flagUsePrivateNetwork ,
152
154
Usage : "Use private network" ,
153
155
},
156
+ mcnflag.StringSliceFlag {
157
+ EnvVar : "HETZNER_FIREWALLS" ,
158
+ Name : flagFirewalls ,
159
+ Usage : "Firewall IDs or names which should be applied on the server" ,
160
+ Value : []string {},
161
+ },
154
162
mcnflag.StringSliceFlag {
155
163
EnvVar : "HETZNER_ADDITIONAL_KEYS" ,
156
164
Name : flagAdditionalKeys ,
@@ -179,6 +187,7 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
179
187
d .volumes = opts .StringSlice (flagVolumes )
180
188
d .networks = opts .StringSlice (flagNetworks )
181
189
d .UsePrivateNetwork = opts .Bool (flagUsePrivateNetwork )
190
+ d .firewalls = opts .StringSlice (flagFirewalls )
182
191
d .additionalKeys = opts .StringSlice (flagAdditionalKeys )
183
192
184
193
err := d .setLabelsFromFlags (opts )
@@ -327,6 +336,7 @@ func (d *Driver) Create() error {
327
336
UserData : d .userData ,
328
337
Labels : d .serverLabels ,
329
338
}
339
+
330
340
networks := []* hcloud.Network {}
331
341
for _ , networkIDorName := range d .networks {
332
342
network , _ , err := d .getClient ().Network .Get (context .Background (), networkIDorName )
@@ -340,6 +350,19 @@ func (d *Driver) Create() error {
340
350
}
341
351
srvopts .Networks = networks
342
352
353
+ firewalls := []* hcloud.ServerCreateFirewall {}
354
+ for _ , firewallIDorName := range d .firewalls {
355
+ firewall , _ , err := d .getClient ().Firewall .Get (context .Background (), firewallIDorName )
356
+ if err != nil {
357
+ return errors .Wrap (err , "could not get firewall by ID or name" )
358
+ }
359
+ if firewall == nil {
360
+ return errors .Errorf ("firewall '%s' not found" , firewallIDorName )
361
+ }
362
+ firewalls = append (firewalls , & hcloud.ServerCreateFirewall {Firewall : * firewall })
363
+ }
364
+ srvopts .Firewalls = firewalls
365
+
343
366
volumes := []* hcloud.Volume {}
344
367
for _ , volumeIDorName := range d .volumes {
345
368
volume , _ , err := d .getClient ().Volume .Get (context .Background (), volumeIDorName )
0 commit comments