Skip to content

Commit

Permalink
Finish using shared function for deleting singular resources with ret…
Browse files Browse the repository at this point in the history
…ries
  • Loading branch information
JenGoldstrich committed Apr 24, 2024
1 parent 5362dbe commit 128e87d
Showing 1 changed file with 22 additions and 49 deletions.
71 changes: 22 additions & 49 deletions builder/azure/arm/step_deploy_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,8 @@ func (s *StepDeployTemplate) deleteImage(ctx context.Context, imageName string,
return err
}

func retryDeletion(ctx context.Context, deleteResourceFunction func() error) error {
func (s *StepDeployTemplate) retryDeletion(ctx context.Context, resourceType string, resourceName string, deleteResourceFunction func() error) error {
log.Printf("[INFO] Attempting deletion -> %s : %s", resourceType, resourceName)
retryConfig := retry.Config{
Tries: 5,
RetryDelay: (&retry.Backoff{
Expand All @@ -338,72 +339,44 @@ func retryDeletion(ctx context.Context, deleteResourceFunction func() error) err
}).Linear,
}
err := retryConfig.Run(ctx, func(ctx context.Context) error {
return deleteResourceFunction()
err := deleteResourceFunction()
if err != nil {
log.Printf("[INFO] Couldn't delete resource %s.%s, will retry", resourceType, resourceName)
}
return err
})
if err != nil {
s.reportResourceDeletionFailure(err, resourceName)
}
return err

}

func (s *StepDeployTemplate) deleteVirtualMachine(ctx context.Context, vmID virtualmachines.VirtualMachineId) error {
err := retryDeletion(ctx, func() error {
err := s.client.VirtualMachinesClient.DeleteThenPoll(ctx, vmID, virtualmachines.DefaultDeleteOperationOptions())
pollingContext, cancel := context.WithTimeout(ctx, s.client.PollingDuration)
defer cancel()
err := s.retryDeletion(pollingContext, vmID.VirtualMachineName, VMResourceType, func() error {
return s.client.VirtualMachinesClient.DeleteThenPoll(ctx, vmID, virtualmachines.DefaultDeleteOperationOptions())
})
return err
}

func (s *StepDeployTemplate) deleteKeyVault(ctx context.Context, id commonids.KeyVaultId) error {
retryConfig := retry.Config{
Tries: 5,
RetryDelay: (&retry.Backoff{
InitialBackoff: 3 * time.Second,
MaxBackoff: 15 * time.Second,
Multiplier: 1.5,
}).Linear,
}

err := retryConfig.Run(ctx, func(ctx context.Context) error {
pollingContext, cancel := context.WithTimeout(ctx, s.client.PollingDuration)
defer cancel()
log.Printf("[INFO] Attempting deletion -> %s : %s", KeyVaultResourceType, id.VaultName)
pollingContext, cancel := context.WithTimeout(ctx, s.client.PollingDuration)
defer cancel()
err := s.retryDeletion(pollingContext, id.VaultName, KeyVaultResourceType, func() error {
_, err := s.client.VaultsClient.Delete(pollingContext, id)
if err != nil {
log.Printf("[INFO] Couldn't delete resource %s.%s, will retry", KeyVaultResourceType, id.VaultName)
} else {
s.say(fmt.Sprintf("Deleted -> %s : '%s'", KeyVaultResourceType, id.VaultName))
}
return err
})
if err != nil {
s.reportResourceDeletionFailure(err, id.VaultName)
}

return err
}

func (s *StepDeployTemplate) deleteNetworkInterface(ctx context.Context, networkInterfaceID commonids.NetworkInterfaceId) error {
retryConfig := retry.Config{
Tries: 5,
RetryDelay: (&retry.Backoff{
InitialBackoff: 3 * time.Second,
MaxBackoff: 15 * time.Second,
Multiplier: 1.5,
}).Linear,
}
err := retryConfig.Run(ctx, func(ctx context.Context) error {
log.Printf("[INFO] Attempting deletion -> %s : %s", NetworkInterfaceResourceType, networkInterfaceID.NetworkInterfaceName)
pollingContext, cancel := context.WithTimeout(ctx, s.client.PollingDuration)
defer cancel()
err := s.client.NetworkMetaClient.NetworkInterfaces.DeleteThenPoll(pollingContext, networkInterfaceID)
if err != nil {
log.Printf("[WARN] Couldn't delete resource %s.%s, will retry", NetworkInterfaceResourceType, networkInterfaceID.NetworkInterfaceName)
} else {
s.say(fmt.Sprintf("Deleted -> %s : '%s'", NetworkInterfaceResourceType, networkInterfaceID.NetworkInterfaceName))
}
return err
func (s *StepDeployTemplate) deleteNetworkInterface(ctx context.Context, id commonids.NetworkInterfaceId) error {
pollingContext, cancel := context.WithTimeout(ctx, s.client.PollingDuration)
defer cancel()
err := s.retryDeletion(pollingContext, id.NetworkInterfaceName, NetworkInterfaceResourceType, func() error {
return s.client.NetworkMetaClient.NetworkInterfaces.DeleteThenPoll(pollingContext, id)
})
if err != nil {
s.reportResourceDeletionFailure(err, networkInterfaceID.NetworkInterfaceName)
}
return err
}

Expand Down

0 comments on commit 128e87d

Please sign in to comment.