Make sure the WinRM communicator can reconnect
This commit is contained in:
parent
10aab86051
commit
9453308c78
|
@ -204,7 +204,7 @@ func Provisioner() terraform.ResourceProvisioner {
|
|||
"max_retries": &schema.Schema{
|
||||
Type: schema.TypeInt,
|
||||
Optional: true,
|
||||
Default: 1,
|
||||
Default: 0,
|
||||
},
|
||||
"no_proxy": &schema.Schema{
|
||||
Type: schema.TypeList,
|
||||
|
@ -392,6 +392,11 @@ func applyFn(ctx context.Context) error {
|
|||
o.Output("Starting initial Chef-Client run...")
|
||||
|
||||
for attempt := 0; attempt <= p.MaxRetries; attempt++ {
|
||||
// We need a new retry context for each attempt, to make sure
|
||||
// they all get the correct timeout.
|
||||
retryCtx, cancel := context.WithTimeout(ctx, comm.Timeout())
|
||||
defer cancel()
|
||||
|
||||
// Make sure to (re)connect before trying to run Chef-Client.
|
||||
if err := communicator.Retry(retryCtx, func() error {
|
||||
return comm.Connect(o)
|
||||
|
@ -795,7 +800,7 @@ func decodeConfig(d *schema.ResourceData) (*provisioner, error) {
|
|||
OSType: d.Get("os_type").(string),
|
||||
RecreateClient: d.Get("recreate_client").(bool),
|
||||
PreventSudo: d.Get("prevent_sudo").(bool),
|
||||
RetryOnExitCode: getIntListAsMap(d.Get("retry_on_exit_code")),
|
||||
RetryOnExitCode: getRetryOnExitCodes(d),
|
||||
RunList: getStringList(d.Get("run_list")),
|
||||
SecretKey: d.Get("secret_key").(string),
|
||||
ServerURL: d.Get("server_url").(string),
|
||||
|
@ -855,12 +860,19 @@ func decodeConfig(d *schema.ResourceData) (*provisioner, error) {
|
|||
return p, nil
|
||||
}
|
||||
|
||||
func getIntListAsMap(v interface{}) map[int]bool {
|
||||
func getRetryOnExitCodes(d *schema.ResourceData) map[int]bool {
|
||||
result := make(map[int]bool)
|
||||
|
||||
switch v := v.(type) {
|
||||
case nil:
|
||||
v, ok := d.GetOk("retry_on_exit_code")
|
||||
if !ok || v == nil {
|
||||
// Use default exit codes
|
||||
result[35] = true
|
||||
result[37] = true
|
||||
result[213] = true
|
||||
return result
|
||||
}
|
||||
|
||||
switch v := v.(type) {
|
||||
case []interface{}:
|
||||
for _, vv := range v {
|
||||
if vv, ok := vv.(int); ok {
|
||||
|
|
|
@ -52,9 +52,8 @@ func New(s *terraform.InstanceState) (*Communicator, error) {
|
|||
|
||||
// Connect implementation of communicator.Communicator interface
|
||||
func (c *Communicator) Connect(o terraform.UIOutput) error {
|
||||
if c.client != nil {
|
||||
return nil
|
||||
}
|
||||
// Set the client to nil since we'll (re)create it
|
||||
c.client = nil
|
||||
|
||||
params := winrm.DefaultParameters
|
||||
params.Timeout = formatDuration(c.Timeout())
|
||||
|
|
|
@ -112,7 +112,7 @@ The following arguments are supported:
|
|||
* `https_proxy (string)` - (Optional) The proxy server for Chef Client HTTPS connections.
|
||||
|
||||
* `max_retries (integer)` - (Optional) The number of times to retry the provisioning process
|
||||
after receiving an exit code in the `retry_on_error` list. Defaults to `1`
|
||||
after receiving an exit code in the `retry_on_error` list. Defaults to `0`
|
||||
|
||||
* `named_run_list (string)` - (Optional) The name of an alternate run-list to invoke during the
|
||||
initial Chef Client run. The run-list must already exist in the Policyfile that defines
|
||||
|
@ -136,9 +136,10 @@ The following arguments are supported:
|
|||
* `recreate_client (boolean)` - (Optional) If `true`, first delete any existing Chef Node and
|
||||
Client before registering the new Chef Client.
|
||||
|
||||
* `retry_on_error (list of integers)` - (Optional) The error codes upon which Terraform should
|
||||
* `retry_on_error (array)` - (Optional) The error codes upon which Terraform should
|
||||
gracefully retry the provisioning process. Intended for use with
|
||||
[Chef RFC062 codes](https://github.com/chef-boneyard/chef-rfc/blob/master/rfc062-exit-status.md).
|
||||
(Defaults to `[35, 37, 213]`)
|
||||
|
||||
* `run_list (array)` - (Optional) A list with recipes that will be invoked during the initial
|
||||
Chef Client run. The run-list will also be saved to the Chef Server after a successful
|
||||
|
|
Loading…
Reference in New Issue