github.com/mponton/terratest@v0.44.0/modules/azure/recoveryservices.go (about)

     1  package azure
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2016-06-01/recoveryservices"
     9  	"github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2020-02-02/backup"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  // RecoveryServicesVaultExists indicates whether a recovery services vault exists; otherwise false.
    14  // This function would fail the test if there is an error.
    15  func RecoveryServicesVaultExists(t *testing.T, vaultName, resourceGroupName, subscriptionID string) bool {
    16  	exists, err := RecoveryServicesVaultExistsE(vaultName, resourceGroupName, subscriptionID)
    17  	require.NoError(t, err)
    18  	return exists
    19  }
    20  
    21  // GetRecoveryServicesVaultBackupPolicyList returns a list of backup policies for the given vault.
    22  // This function would fail the test if there is an error.
    23  func GetRecoveryServicesVaultBackupPolicyList(t *testing.T, vaultName, resourceGroupName, subscriptionID string) map[string]backup.ProtectionPolicyResource {
    24  	list, err := GetRecoveryServicesVaultBackupPolicyListE(vaultName, resourceGroupName, subscriptionID)
    25  	require.NoError(t, err)
    26  	return list
    27  }
    28  
    29  // GetRecoveryServicesVaultBackupProtectedVMList returns a list of protected VM's on the given vault/policy.
    30  // This function would fail the test if there is an error.
    31  func GetRecoveryServicesVaultBackupProtectedVMList(t *testing.T, policyName, vaultName, resourceGroupName, subscriptionID string) map[string]backup.AzureIaaSComputeVMProtectedItem {
    32  	list, err := GetRecoveryServicesVaultBackupProtectedVMListE(policyName, vaultName, resourceGroupName, subscriptionID)
    33  	require.NoError(t, err)
    34  	return list
    35  }
    36  
    37  // RecoveryServicesVaultExists indicates whether a recovery services vault exists; otherwise false or error.
    38  func RecoveryServicesVaultExistsE(vaultName, resourceGroupName, subscriptionID string) (bool, error) {
    39  	_, err := GetRecoveryServicesVaultE(vaultName, resourceGroupName, subscriptionID)
    40  	if err != nil {
    41  		if ResourceNotFoundErrorExists(err) {
    42  			return false, nil
    43  		}
    44  		return false, err
    45  	}
    46  	return true, nil
    47  }
    48  
    49  // GetRecoveryServicesVaultE returns a vault instance.
    50  func GetRecoveryServicesVaultE(vaultName, resourceGroupName, subscriptionID string) (*recoveryservices.Vault, error) {
    51  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  
    56  	resourceGroupName, err2 := getTargetAzureResourceGroupName((resourceGroupName))
    57  	if err2 != nil {
    58  		return nil, err2
    59  	}
    60  
    61  	client := recoveryservices.NewVaultsClient(subscriptionID)
    62  	// setup auth and create request params
    63  	authorizer, err := NewAuthorizer()
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	client.Authorizer = *authorizer
    69  	vault, err := client.Get(context.Background(), resourceGroupName, vaultName)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  	return &vault, nil
    74  }
    75  
    76  // GetRecoveryServicesVaultBackupPolicyListE returns a list of backup policies for the given vault.
    77  func GetRecoveryServicesVaultBackupPolicyListE(vaultName, resourceGroupName, subscriptionID string) (map[string]backup.ProtectionPolicyResource, error) {
    78  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
    79  	if err != nil {
    80  		return nil, err
    81  	}
    82  
    83  	resourceGroupName, err2 := getTargetAzureResourceGroupName(resourceGroupName)
    84  	if err2 != nil {
    85  		return nil, err2
    86  	}
    87  
    88  	client := backup.NewPoliciesClient(subscriptionID)
    89  	// setup authorizer
    90  	authorizer, err := NewAuthorizer()
    91  	if err != nil {
    92  		return nil, err
    93  	}
    94  
    95  	client.Authorizer = *authorizer
    96  	listIter, err := client.ListComplete(context.Background(), vaultName, resourceGroupName, "")
    97  	if err != nil {
    98  		return nil, err
    99  	}
   100  
   101  	policyMap := make(map[string]backup.ProtectionPolicyResource)
   102  	for listIter.NotDone() {
   103  		v := listIter.Value()
   104  		policyMap[*v.Name] = v
   105  		err := listIter.NextWithContext(context.Background())
   106  		if err != nil {
   107  			return nil, err
   108  		}
   109  
   110  	}
   111  	return policyMap, nil
   112  }
   113  
   114  // GetRecoveryServicesVaultBackupProtectedVMListE returns a list of protected VM's on the given vault/policy.
   115  func GetRecoveryServicesVaultBackupProtectedVMListE(policyName, vaultName, resourceGroupName, subscriptionID string) (map[string]backup.AzureIaaSComputeVMProtectedItem, error) {
   116  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   117  	if err != nil {
   118  		return nil, err
   119  	}
   120  
   121  	resourceGroupName, err2 := getTargetAzureResourceGroupName(resourceGroupName)
   122  	if err != nil {
   123  		return nil, err2
   124  	}
   125  
   126  	client := backup.NewProtectedItemsGroupClient(subscriptionID)
   127  	// setup authorizer
   128  	authorizer, err := NewAuthorizer()
   129  	if err != nil {
   130  		return nil, err
   131  	}
   132  	client.Authorizer = *authorizer
   133  	// Build a filter string to narrow down results to just VM's
   134  	filter := fmt.Sprintf("backupManagementType eq 'AzureIaasVM' and itemType eq 'VM' and policyName eq '%s'", policyName)
   135  	listIter, err := client.ListComplete(context.Background(), vaultName, resourceGroupName, filter, "")
   136  	if err != nil {
   137  		return nil, err
   138  	}
   139  	// Prep the return container
   140  	vmList := make(map[string]backup.AzureIaaSComputeVMProtectedItem)
   141  	// First iterator check
   142  	for listIter.NotDone() {
   143  		currentVM, _ := listIter.Value().Properties.AsAzureIaaSComputeVMProtectedItem()
   144  		vmList[*currentVM.FriendlyName] = *currentVM
   145  		err := listIter.NextWithContext(context.Background())
   146  		if err != nil {
   147  			return nil, err
   148  		}
   149  	}
   150  	return vmList, nil
   151  }