From 107e2729b497cc82db29dda17b4d96d47e08dad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Malerba?= <inaki@malerba.space> Date: Wed, 14 Jun 2023 20:08:57 +0200 Subject: [PATCH] Allow customizing polling period MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 <inaki@malerba.space> --- README.md | 1 + driver/driver.go | 14 ++++++++++++-- driver/hetzner_query.go | 2 +- driver/networking.go | 2 +- driver/setup.go | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f02ee1b..94cebce 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ $ docker-machine create \ - `--hetzner-ssh-port`: Change the default SSH-Port - `--hetzner-primary-ipv4/6`: Sets an existing primary IP (v4 or v6 respectively) for the server, as documented in [Networking](#networking) - `--hetzner-wait-on-error`: Amount of seconds to wait on server creation failure (0/no wait by default) +- `--hetzner-wait-on-polling`: Amount of seconds to wait between requests when waiting for some state to change. (Default: 1 second) #### Image selection diff --git a/driver/driver.go b/driver/driver.go index 9a074b4..8ff0e97 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -56,6 +56,7 @@ type Driver struct { cachedAdditionalKeys []*hcloud.SSHKey WaitOnError int + WaitOnPolling int // internal housekeeping version string @@ -97,8 +98,10 @@ const ( defaultSSHPort = 22 defaultSSHUser = "root" - flagWaitOnError = "hetzner-wait-on-error" - defaultWaitOnError = 0 + flagWaitOnError = "hetzner-wait-on-error" + defaultWaitOnError = 0 + flagWaitOnPolling = "hetzner-wait-on-polling" + defaultWaitOnPolling = 1 legacyFlagUserDataFromFile = "hetzner-user-data-from-file" legacyFlagDisablePublic4 = "hetzner-disable-public-4" @@ -298,6 +301,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { Usage: "Wait if an error happens while creating the server", Value: defaultWaitOnError, }, + mcnflag.IntFlag{ + EnvVar: "HETZNER_WAIT_ON_POLLING", + Name: flagWaitOnPolling, + Usage: "Period for waiting between requests when waiting for some state to change", + Value: defaultWaitOnPolling, + }, } } @@ -339,6 +348,7 @@ func (d *Driver) setConfigFromFlagsImpl(opts drivers.DriverOptions) error { d.SSHPort = opts.Int(flagSshPort) d.WaitOnError = opts.Int(flagWaitOnError) + d.WaitOnPolling = opts.Int(flagWaitOnPolling) d.placementGroup = opts.String(flagPlacementGroup) if opts.Bool(flagAutoSpread) { diff --git a/driver/hetzner_query.go b/driver/hetzner_query.go index 1064574..4b2b87b 100644 --- a/driver/hetzner_query.go +++ b/driver/hetzner_query.go @@ -144,7 +144,7 @@ func (d *Driver) waitForAction(a *hcloud.Action) error { return act.Error() } - time.Sleep(1 * time.Second) + time.Sleep(time.Duration(d.WaitOnPolling) * time.Second) } return nil } diff --git a/driver/networking.go b/driver/networking.go index 41777b8..acc4e06 100644 --- a/driver/networking.go +++ b/driver/networking.go @@ -93,7 +93,7 @@ func (d *Driver) configureNetworkAccess(srv hcloud.ServerCreateResult) error { d.IPAddress = server.PrivateNet[0].IP.String() break } - time.Sleep(1 * time.Second) + time.Sleep(time.Duration(d.WaitOnPolling) * time.Second) } } else if d.DisablePublic4 { log.Infof("Using public IPv6 network ...") diff --git a/driver/setup.go b/driver/setup.go index f66e2c2..24362e4 100644 --- a/driver/setup.go +++ b/driver/setup.go @@ -20,7 +20,7 @@ func (d *Driver) waitForRunningServer() error { break } - time.Sleep(1 * time.Second) + time.Sleep(time.Duration(d.WaitOnPolling) * time.Second) } return nil } -- GitLab