@@ -43,6 +43,8 @@ type Driver struct {
43
43
Volumes []string
44
44
Networks []string
45
45
UsePrivateNetwork bool
46
+ DisablePublic4 bool
47
+ DisablePublic6 bool
46
48
Firewalls []string
47
49
ServerLabels map [string ]string
48
50
keyLabels map [string ]string
@@ -69,6 +71,9 @@ const (
69
71
flagVolumes = "hetzner-volumes"
70
72
flagNetworks = "hetzner-networks"
71
73
flagUsePrivateNetwork = "hetzner-use-private-network"
74
+ flagDisablePublic4 = "hetzner-disable-public-4"
75
+ flagDisablePublic6 = "hetzner-disable-public-6"
76
+ flagDisablePublic = "hetzner-disable-public"
72
77
flagFirewalls = "hetzner-firewalls"
73
78
flagAdditionalKeys = "hetzner-additional-key"
74
79
flagServerLabel = "hetzner-server-label"
@@ -171,6 +176,21 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
171
176
Name : flagUsePrivateNetwork ,
172
177
Usage : "Use private network" ,
173
178
},
179
+ mcnflag.BoolFlag {
180
+ EnvVar : "HETZNER_DISABLE_PUBLIC_4" ,
181
+ Name : flagDisablePublic4 ,
182
+ Usage : "Disable public ipv4" ,
183
+ },
184
+ mcnflag.BoolFlag {
185
+ EnvVar : "HETZNER_DISABLE_PUBLIC_6" ,
186
+ Name : flagDisablePublic6 ,
187
+ Usage : "Disable public ipv6" ,
188
+ },
189
+ mcnflag.BoolFlag {
190
+ EnvVar : "HETZNER_DISABLE_PUBLIC" ,
191
+ Name : flagDisablePublic ,
192
+ Usage : "Disable public ip (v4 & v6)" ,
193
+ },
174
194
mcnflag.StringSliceFlag {
175
195
EnvVar : "HETZNER_FIREWALLS" ,
176
196
Name : flagFirewalls ,
@@ -235,7 +255,10 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
235
255
d .userData = opts .String (flagUserData )
236
256
d .Volumes = opts .StringSlice (flagVolumes )
237
257
d .Networks = opts .StringSlice (flagNetworks )
238
- d .UsePrivateNetwork = opts .Bool (flagUsePrivateNetwork )
258
+ disablePublic := opts .Bool (flagDisablePublic )
259
+ d .UsePrivateNetwork = opts .Bool (flagUsePrivateNetwork ) || disablePublic
260
+ d .DisablePublic4 = opts .Bool (flagDisablePublic4 ) || disablePublic
261
+ d .DisablePublic6 = opts .Bool (flagDisablePublic6 ) || disablePublic
239
262
d .Firewalls = opts .StringSlice (flagFirewalls )
240
263
d .AdditionalKeys = opts .StringSlice (flagAdditionalKeys )
241
264
@@ -265,6 +288,11 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
265
288
return errors .Errorf ("--%v and --%v are mutually exclusive" , flagImage , flagImageID )
266
289
}
267
290
291
+ if d .DisablePublic4 && d .DisablePublic6 && ! d .UsePrivateNetwork {
292
+ return errors .Errorf ("--%v must be used if public networking is disabled (hint: implicitly set by --%v)" ,
293
+ flagUsePrivateNetwork , flagDisablePublic )
294
+ }
295
+
268
296
return nil
269
297
}
270
298
@@ -415,6 +443,18 @@ func (d *Driver) configureNetworkAccess(srv hcloud.ServerCreateResult) error {
415
443
}
416
444
time .Sleep (1 * time .Second )
417
445
}
446
+ } else if d .DisablePublic4 {
447
+ log .Infof ("Using public IPv6 network ..." )
448
+
449
+ pv6 := srv .Server .PublicNet .IPv6
450
+ ip := pv6 .IP
451
+ if ip .Mask (pv6 .Network .Mask ).Equal (pv6 .Network .IP ) { // no host given
452
+ ip [net .IPv6len - 1 ] |= 0x01 // TODO make this configurable
453
+ }
454
+
455
+ ips := ip .String ()
456
+ log .Infof (" -> resolved %v ..." , ips )
457
+ d .IPAddress = ips
418
458
} else {
419
459
log .Infof ("Using public network ..." )
420
460
d .IPAddress = srv .Server .PublicNet .IPv4 .IP .String ()
@@ -451,6 +491,13 @@ func (d *Driver) makeCreateServerOptions() (*hcloud.ServerCreateOpts, error) {
451
491
PlacementGroup : pgrp ,
452
492
}
453
493
494
+ if d .DisablePublic4 || d .DisablePublic6 {
495
+ srvopts .PublicNet = & hcloud.ServerCreatePublicNet {
496
+ EnableIPv4 : ! d .DisablePublic4 ,
497
+ EnableIPv6 : ! d .DisablePublic6 ,
498
+ }
499
+ }
500
+
454
501
networks , err := d .createNetworks ()
455
502
if err != nil {
456
503
return nil , err
0 commit comments