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 }