func()

in pkg/infrastructure/authorizationCheckers/ARMTemplateDeployment/armTemplateAuthorizationChecker.go [227:264]


func (a *armDeploymentConfig) cancelDeployment(ctx context.Context, deploymentName string, mpfConfig domain.MPFConfig) error {

	// Get deployments status. If status is "Running", cancel deployment, then delete deployment
	getResp, err := a.azAPIClient.DeploymentsClient.Get(ctx, mpfConfig.ResourceGroup.ResourceGroupName, deploymentName, nil)
	if err != nil {
		// Error indicates deployment does not exist, so cancelling deployment not needed
		if strings.Contains(err.Error(), "DeploymentNotFound") {
			log.Infof("Could not get deployment %s: ,Error :%s \n", deploymentName, err)
			return nil
		}
	}

	log.Infof("Deployment status: %s\n", *getResp.DeploymentExtended.Properties.ProvisioningState)

	if *getResp.DeploymentExtended.Properties.ProvisioningState == armresources.ProvisioningStateRunning {

		retryCount := 0
		for _, err := a.azAPIClient.DeploymentsClient.Cancel(ctx, mpfConfig.ResourceGroup.ResourceGroupName, deploymentName, nil); err != nil; {
			// cancel deployment
			if err != nil {
				// return err
				log.Warnf("Could not cancel deployment %s: %s, retrying in a bit", deploymentName, err)
				time.Sleep(5 * time.Second)
				retryCount++
				if retryCount >= 24 {
					log.Warnf("Could not cancel deployment %s: %s, giving up", deploymentName, err)
					return errors.New("could not cancel deployment")
				}

			}

		}
		log.Infof("Cancelled deployment %s", deploymentName)
		return nil
	}

	return nil
}