github.com/kikitux/packer@v0.10.1-0.20160322154024-6237df566f9f/builder/azure/arm/deployment_poller.go (about)

     1  // Copyright (c) Microsoft Corporation. All rights reserved.
     2  // Licensed under the MIT License. See the LICENSE file in builder/azure for license information.
     3  
     4  package arm
     5  
     6  import (
     7  	"time"
     8  )
     9  
    10  const (
    11  	DeployCanceled  = "Canceled"
    12  	DeployFailed    = "Failed"
    13  	DeployDeleted   = "Deleted"
    14  	DeploySucceeded = "Succeeded"
    15  )
    16  
    17  type DeploymentPoller struct {
    18  	getProvisioningState func() (string, error)
    19  	pause                func()
    20  }
    21  
    22  func NewDeploymentPoller(getProvisioningState func() (string, error)) *DeploymentPoller {
    23  	pollDuration := time.Second * 15
    24  
    25  	return &DeploymentPoller{
    26  		getProvisioningState: getProvisioningState,
    27  		pause:                func() { time.Sleep(pollDuration) },
    28  	}
    29  }
    30  
    31  func (t *DeploymentPoller) PollAsNeeded() (string, error) {
    32  	for {
    33  		res, err := t.getProvisioningState()
    34  
    35  		if err != nil {
    36  			return res, err
    37  		}
    38  
    39  		switch res {
    40  		case DeployCanceled, DeployDeleted, DeployFailed, DeploySucceeded:
    41  			return res, nil
    42  		default:
    43  			break
    44  		}
    45  
    46  		t.pause()
    47  	}
    48  }