diff --git a/builder/azure/arm/deployment_poller.go b/builder/azure/arm/deployment_poller.go deleted file mode 100644 index b98fd8404..000000000 --- a/builder/azure/arm/deployment_poller.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See the LICENSE file in builder/azure for license information. - -package arm - -import ( - "time" -) - -const ( - DeployCanceled = "Canceled" - DeployFailed = "Failed" - DeployDeleted = "Deleted" - DeploySucceeded = "Succeeded" -) - -type DeploymentPoller struct { - getProvisioningState func() (string, error) - pause func() -} - -func NewDeploymentPoller(getProvisioningState func() (string, error)) *DeploymentPoller { - pollDuration := time.Second * 15 - - return &DeploymentPoller{ - getProvisioningState: getProvisioningState, - pause: func() { time.Sleep(pollDuration) }, - } -} - -func (t *DeploymentPoller) PollAsNeeded() (string, error) { - for { - res, err := t.getProvisioningState() - - if err != nil { - return res, err - } - - switch res { - case DeployCanceled, DeployDeleted, DeployFailed, DeploySucceeded: - return res, nil - default: - break - } - - t.pause() - } -} diff --git a/builder/azure/arm/deployment_poller_test.go b/builder/azure/arm/deployment_poller_test.go deleted file mode 100644 index 7ec25c0dd..000000000 --- a/builder/azure/arm/deployment_poller_test.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See the LICENSE file in builder/azure for license information. - -package arm - -import ( - "fmt" - "testing" -) - -func TestCanceledShouldImmediatelyStopPolling(t *testing.T) { - var testSubject = NewDeploymentPoller(func() (string, error) { return "Canceled", nil }) - testSubject.pause = func() { t.Fatal("Did not expect this to be called!") } - - res, err := testSubject.PollAsNeeded() - if err != nil { - t.Errorf("Expected PollAsNeeded to not return an error, but got '%s'.", err) - } - - if res != "Canceled" { - t.Fatalf("Expected PollAsNeeded to return a result of 'Canceled', but got '%s' instead.", res) - } -} - -func TestFailedShouldImmediatelyStopPolling(t *testing.T) { - var testSubject = NewDeploymentPoller(func() (string, error) { return "Failed", nil }) - testSubject.pause = func() { t.Fatal("Did not expect this to be called!") } - - res, err := testSubject.PollAsNeeded() - if err != nil { - t.Fatalf("Expected PollAsNeeded to not return an error, but got '%s'.", err) - } - - if res != "Failed" { - t.Fatalf("Expected PollAsNeeded to return a result of 'Failed', but got '%s' instead.", res) - } -} - -func TestDeletedShouldImmediatelyStopPolling(t *testing.T) { - var testSubject = NewDeploymentPoller(func() (string, error) { return "Deleted", nil }) - testSubject.pause = func() { t.Fatal("Did not expect this to be called!") } - - res, err := testSubject.PollAsNeeded() - if err != nil { - t.Fatalf("Expected PollAsNeeded to not return an error, but got '%s'.", err) - } - - if res != "Deleted" { - t.Fatalf("Expected PollAsNeeded to return a result of 'Deleted', but got '%s' instead.", res) - } -} - -func TestSucceededShouldImmediatelyStopPolling(t *testing.T) { - var testSubject = NewDeploymentPoller(func() (string, error) { return "Succeeded", nil }) - testSubject.pause = func() { t.Fatal("Did not expect this to be called!") } - - res, err := testSubject.PollAsNeeded() - if err != nil { - t.Fatalf("Expected PollAsNeeded to not return an error, but got '%s'.", err) - } - - if res != "Succeeded" { - t.Fatalf("Expected PollAsNeeded to return a result of 'Succeeded', but got '%s' instead.", res) - } -} - -func TestPollerShouldPollOnNonStoppingStatus(t *testing.T) { - count := 0 - - var testSubject = NewDeploymentPoller(func() (string, error) { return "Succeeded", nil }) - testSubject.pause = func() { count += 1 } - testSubject.getProvisioningState = func() (string, error) { - count += 1 - switch count { - case 0, 1: - return "Working", nil - default: - return "Succeeded", nil - } - } - - res, err := testSubject.PollAsNeeded() - if err != nil { - t.Fatalf("Expected PollAsNeeded to not return an error, but got '%s'.", err) - } - - if res != "Succeeded" { - t.Fatalf("Expected PollAsNeeded to return a result of 'Succeeded', but got '%s' instead.", res) - } - - if count != 3 { - t.Fatal("Expected DeploymentPoller to poll until 'Succeeded', but it did not.") - } -} - -func TestPollerShouldReturnErrorImmediately(t *testing.T) { - var testSubject = NewDeploymentPoller(func() (string, error) { return "bad-bad-bad", fmt.Errorf("BOOM") }) - testSubject.pause = func() { t.Fatal("Did not expect this to be called!") } - - res, err := testSubject.PollAsNeeded() - if err == nil { - t.Fatal("Expected PollAsNeeded to return an error, but it did not.") - } - - if res != "bad-bad-bad" { - t.Fatalf("Expected PollAsNeeded to return a result of 'bad-bad-bad', but got '%s' instead.", res) - } -} diff --git a/builder/azure/arm/step_deploy_template.go b/builder/azure/arm/step_deploy_template.go index b41e199d0..9ad9d1ba9 100644 --- a/builder/azure/arm/step_deploy_template.go +++ b/builder/azure/arm/step_deploy_template.go @@ -41,29 +41,7 @@ func (s *StepDeployTemplate) deployTemplate(resourceGroupName string, deployment } _, err = s.client.DeploymentsClient.CreateOrUpdate(resourceGroupName, deploymentName, *deployment, cancelCh) - if err != nil { - return err - } - - poller := NewDeploymentPoller(func() (string, error) { - r, e := s.client.DeploymentsClient.Get(resourceGroupName, deploymentName) - if r.Properties != nil && r.Properties.ProvisioningState != nil { - return *r.Properties.ProvisioningState, e - } - - return "UNKNOWN", e - }) - - pollStatus, err := poller.PollAsNeeded() - if err != nil { - return err - } - - if pollStatus != DeploySucceeded { - return fmt.Errorf("Deployment failed with a status of '%s'.", pollStatus) - } - - return nil + return err } func (s *StepDeployTemplate) Run(state multistep.StateBag) multistep.StepAction {