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 }