@@ -22,40 +22,42 @@ import (
2222type Driver struct {
2323 * drivers.BaseDriver
2424
25- AccessToken string
26- Image string
27- ImageID int
28- cachedImage * hcloud.Image
29- Type string
30- cachedType * hcloud.ServerType
31- Location string
32- cachedLocation * hcloud.Location
33- KeyID int
34- cachedKey * hcloud.SSHKey
35- IsExistingKey bool
36- originalKey string
37- danglingKey bool
38- ServerID int
39- userData string
40- volumes []string
41- networks []string
42- cachedServer * hcloud.Server
25+ AccessToken string
26+ Image string
27+ ImageID int
28+ cachedImage * hcloud.Image
29+ Type string
30+ cachedType * hcloud.ServerType
31+ Location string
32+ cachedLocation * hcloud.Location
33+ KeyID int
34+ cachedKey * hcloud.SSHKey
35+ IsExistingKey bool
36+ originalKey string
37+ danglingKey bool
38+ ServerID int
39+ userData string
40+ volumes []string
41+ networks []string
42+ UsePrivateNetwork bool
43+ cachedServer * hcloud.Server
4344}
4445
4546const (
4647 defaultImage = "ubuntu-18.04"
4748 defaultType = "cx11"
4849
49- flagAPIToken = "hetzner-api-token"
50- flagImage = "hetzner-image"
51- flagImageID = "hetzner-image-id"
52- flagType = "hetzner-server-type"
53- flagLocation = "hetzner-server-location"
54- flagExKeyID = "hetzner-existing-key-id"
55- flagExKeyPath = "hetzner-existing-key-path"
56- flagUserData = "hetzner-user-data"
57- flagVolumes = "hetzner-volumes"
58- flagNetworks = "hetzner-networks"
50+ flagAPIToken = "hetzner-api-token"
51+ flagImage = "hetzner-image"
52+ flagImageID = "hetzner-image-id"
53+ flagType = "hetzner-server-type"
54+ flagLocation = "hetzner-server-location"
55+ flagExKeyID = "hetzner-existing-key-id"
56+ flagExKeyPath = "hetzner-existing-key-path"
57+ flagUserData = "hetzner-user-data"
58+ flagVolumes = "hetzner-volumes"
59+ flagNetworks = "hetzner-networks"
60+ flagUsePrivateNetwork = "hetzner-use-private-network"
5961)
6062
6163func NewDriver () * Driver {
@@ -136,6 +138,11 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
136138 Usage : "Network IDs or names which should be attached to the server private network interface" ,
137139 Value : []string {},
138140 },
141+ mcnflag.BoolFlag {
142+ EnvVar : "HETZNER_USE_PRIVATE_NETWORK" ,
143+ Name : flagUsePrivateNetwork ,
144+ Usage : "Use private network" ,
145+ },
139146 }
140147}
141148
@@ -151,6 +158,7 @@ func (d *Driver) SetConfigFromFlags(opts drivers.DriverOptions) error {
151158 d .userData = opts .String (flagUserData )
152159 d .volumes = opts .StringSlice (flagVolumes )
153160 d .networks = opts .StringSlice (flagNetworks )
161+ d .UsePrivateNetwork = opts .Bool (flagUsePrivateNetwork )
154162
155163 d .SetSwarmConfigFromFlags (opts )
156164
@@ -205,6 +213,10 @@ func (d *Driver) PreCreateCheck() error {
205213 return errors .Wrap (err , "could not get location" )
206214 }
207215
216+ if d .UsePrivateNetwork && len (d .networks ) == 0 {
217+ return errors .Errorf ("No private network attached." )
218+ }
219+
208220 return nil
209221}
210222
@@ -319,9 +331,26 @@ func (d *Driver) Create() error {
319331 time .Sleep (1 * time .Second )
320332 }
321333
322- log .Debugf (" -> Server %s[%d] ready" , srv .Server .Name , srv .Server .ID )
323- d .IPAddress = srv .Server .PublicNet .IPv4 .IP .String ()
334+ if d .UsePrivateNetwork {
335+ for {
336+ // we need to wait until network is attached
337+ log .Infof ("Wait until private network attached ..." )
338+ server , _ , err := d .getClient ().Server .GetByID (context .Background (), srv .Server .ID )
339+ if err != nil {
340+ return errors .Wrapf (err , "could not get newly created server [%d]" , srv .Server .ID )
341+ }
342+ if server .PrivateNet != nil {
343+ d .IPAddress = server .PrivateNet [0 ].IP .String ()
344+ break
345+ }
346+ time .Sleep (1 * time .Second )
347+ }
348+ } else {
349+ log .Infof ("Using public network ..." )
350+ d .IPAddress = srv .Server .PublicNet .IPv4 .IP .String ()
351+ }
324352
353+ log .Infof (" -> Server %s[%d] ready. Ip %s" , srv .Server .Name , srv .Server .ID , d .IPAddress )
325354 d .danglingKey = false
326355
327356 return nil
0 commit comments