Skip to content

Commit 107e272

Browse files
committed
Allow customizing polling period
When having several machines trying to start at the same time, polling every one second consumes the API requests limit fairly easily. Add a new `--hetzner-wait-on-polling` flag, similar to `--wait-on-error` to change the time between requests. Default value is left at 1 second to keep the current behaviour. Signed-off-by: Iñaki Malerba <[email protected]>
1 parent 5c67918 commit 107e272

File tree

5 files changed

+16
-5
lines changed

5 files changed

+16
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ $ docker-machine create \
115115
- `--hetzner-ssh-port`: Change the default SSH-Port
116116
- `--hetzner-primary-ipv4/6`: Sets an existing primary IP (v4 or v6 respectively) for the server, as documented in [Networking](#networking)
117117
- `--hetzner-wait-on-error`: Amount of seconds to wait on server creation failure (0/no wait by default)
118+
- `--hetzner-wait-on-polling`: Amount of seconds to wait between requests when waiting for some state to change. (Default: 1 second)
118119

119120
#### Image selection
120121

driver/driver.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type Driver struct {
5656
cachedAdditionalKeys []*hcloud.SSHKey
5757

5858
WaitOnError int
59+
WaitOnPolling int
5960

6061
// internal housekeeping
6162
version string
@@ -97,8 +98,10 @@ const (
9798
defaultSSHPort = 22
9899
defaultSSHUser = "root"
99100

100-
flagWaitOnError = "hetzner-wait-on-error"
101-
defaultWaitOnError = 0
101+
flagWaitOnError = "hetzner-wait-on-error"
102+
defaultWaitOnError = 0
103+
flagWaitOnPolling = "hetzner-wait-on-polling"
104+
defaultWaitOnPolling = 1
102105

103106
legacyFlagUserDataFromFile = "hetzner-user-data-from-file"
104107
legacyFlagDisablePublic4 = "hetzner-disable-public-4"
@@ -298,6 +301,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
298301
Usage: "Wait if an error happens while creating the server",
299302
Value: defaultWaitOnError,
300303
},
304+
mcnflag.IntFlag{
305+
EnvVar: "HETZNER_WAIT_ON_POLLING",
306+
Name: flagWaitOnPolling,
307+
Usage: "Period for waiting between requests when waiting for some state to change",
308+
Value: defaultWaitOnPolling,
309+
},
301310
}
302311
}
303312

@@ -339,6 +348,7 @@ func (d *Driver) setConfigFromFlagsImpl(opts drivers.DriverOptions) error {
339348
d.SSHPort = opts.Int(flagSshPort)
340349

341350
d.WaitOnError = opts.Int(flagWaitOnError)
351+
d.WaitOnPolling = opts.Int(flagWaitOnPolling)
342352

343353
d.placementGroup = opts.String(flagPlacementGroup)
344354
if opts.Bool(flagAutoSpread) {

driver/hetzner_query.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (d *Driver) waitForAction(a *hcloud.Action) error {
144144
return act.Error()
145145
}
146146

147-
time.Sleep(1 * time.Second)
147+
time.Sleep(time.Duration(d.WaitOnPolling) * time.Second)
148148
}
149149
return nil
150150
}

driver/networking.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (d *Driver) configureNetworkAccess(srv hcloud.ServerCreateResult) error {
9393
d.IPAddress = server.PrivateNet[0].IP.String()
9494
break
9595
}
96-
time.Sleep(1 * time.Second)
96+
time.Sleep(time.Duration(d.WaitOnPolling) * time.Second)
9797
}
9898
} else if d.DisablePublic4 {
9999
log.Infof("Using public IPv6 network ...")

driver/setup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func (d *Driver) waitForRunningServer() error {
2020
break
2121
}
2222

23-
time.Sleep(1 * time.Second)
23+
time.Sleep(time.Duration(d.WaitOnPolling) * time.Second)
2424
}
2525
return nil
2626
}

0 commit comments

Comments
 (0)