Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dataprotection - swap to hashicorp/go-azure-sdk #17700

Merged
merged 5 commits into from Aug 17, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 9 additions & 7 deletions internal/services/dataprotection/client/client.go
@@ -1,26 +1,28 @@
package client

import (
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances"
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies"
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupvaults"
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/resourceguards"
"github.com/hashicorp/terraform-provider-azurerm/internal/common"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/dataprotection/legacysdk/dataprotection"
)

type Client struct {
BackupVaultClient *dataprotection.BackupVaultsClient
BackupPolicyClient *dataprotection.BackupPoliciesClient
BackupInstanceClient *dataprotection.BackupInstancesClient
BackupVaultClient *backupvaults.BackupVaultsClient
BackupPolicyClient *backuppolicies.BackupPoliciesClient
BackupInstanceClient *backupinstances.BackupInstancesClient
ResourceGuardClient *resourceguards.ResourceGuardsClient
}

func NewClient(o *common.ClientOptions) *Client {
backupVaultClient := dataprotection.NewBackupVaultsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId)
backupVaultClient := backupvaults.NewBackupVaultsClientWithBaseURI(o.ResourceManagerEndpoint)
o.ConfigureClient(&backupVaultClient.Client, o.ResourceManagerAuthorizer)

backupPolicyClient := dataprotection.NewBackupPoliciesClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId)
backupPolicyClient := backuppolicies.NewBackupPoliciesClientWithBaseURI(o.ResourceManagerEndpoint)
o.ConfigureClient(&backupPolicyClient.Client, o.ResourceManagerAuthorizer)

backupInstanceClient := dataprotection.NewBackupInstancesClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId)
backupInstanceClient := backupinstances.NewBackupInstancesClientWithBaseURI(o.ResourceManagerEndpoint)
o.ConfigureClient(&backupInstanceClient.Client, o.ResourceManagerAuthorizer)

resourceGuardClient := resourceguards.NewResourceGuardsClientWithBaseURI(o.ResourceManagerEndpoint)
Expand Down
Expand Up @@ -8,12 +8,11 @@ import (
"github.com/hashicorp/go-azure-helpers/lang/response"
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema"
"github.com/hashicorp/go-azure-helpers/resourcemanager/location"
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances"
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-azurerm/helpers/tf"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/dataprotection/legacysdk/dataprotection"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/dataprotection/parse"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/dataprotection/validate"
storageParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/storage/parse"
storageValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/storage/validate"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
Expand All @@ -37,7 +36,7 @@ func resourceDataProtectionBackupInstanceBlobStorage() *schema.Resource {
},

Importer: azSchema.ValidateResourceIDPriorToImport(func(id string) error {
_, err := parse.BackupInstanceID(id)
_, err := backupinstances.ParseBackupInstanceID(id)
return err
}),

Expand All @@ -54,7 +53,7 @@ func resourceDataProtectionBackupInstanceBlobStorage() *schema.Resource {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validate.BackupVaultID,
ValidateFunc: backupinstances.ValidateBackupVaultID,
},

"storage_account_id": {
Expand All @@ -67,7 +66,7 @@ func resourceDataProtectionBackupInstanceBlobStorage() *schema.Resource {
"backup_policy_id": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validate.BackupPolicyID,
ValidateFunc: backuppolicies.ValidateBackupVaultID,
},
},
}
Expand All @@ -80,59 +79,55 @@ func resourceDataProtectionBackupInstanceBlobStorageCreateUpdate(d *schema.Resou
defer cancel()

name := d.Get("name").(string)
vaultId, _ := parse.BackupVaultID(d.Get("vault_id").(string))
id := parse.NewBackupInstanceID(subscriptionId, vaultId.ResourceGroup, vaultId.Name, name)
vaultId, _ := backupinstances.ParseBackupVaultID(d.Get("vault_id").(string))
id := backupinstances.NewBackupInstanceID(subscriptionId, vaultId.ResourceGroupName, vaultId.VaultName, name)

if d.IsNewResource() {
existing, err := client.Get(ctx, id.BackupVaultName, id.ResourceGroup, id.Name)
existing, err := client.Get(ctx, id)
if err != nil {
if !utils.ResponseWasNotFound(existing.Response) {
if !response.WasNotFound(existing.HttpResponse) {
return fmt.Errorf("checking for existing DataProtection BackupInstance (%q): %+v", id, err)
}
}
if !utils.ResponseWasNotFound(existing.Response) {
if !response.WasNotFound(existing.HttpResponse) {
return tf.ImportAsExistsError("azurerm_data_protection_backup_instance_blob_storage", id.ID())
}
}

storageAccountId, _ := storageParse.StorageAccountID(d.Get("storage_account_id").(string))
location := location.Normalize(d.Get("location").(string))
policyId, _ := parse.BackupPolicyID(d.Get("backup_policy_id").(string))
policyId, _ := backuppolicies.ParseBackupPoliciesID(d.Get("backup_policy_id").(string))

parameters := dataprotection.BackupInstanceResource{
Properties: &dataprotection.BackupInstance{
DataSourceInfo: &dataprotection.Datasource{
parameters := backupinstances.BackupInstanceResource{
Properties: &backupinstances.BackupInstance{
DataSourceInfo: backupinstances.Datasource{
DatasourceType: utils.String("Microsoft.Storage/storageAccounts/blobServices"),
ObjectType: utils.String("Datasource"),
ResourceID: utils.String(storageAccountId.ID()),
ResourceID: storageAccountId.ID(),
ResourceLocation: utils.String(location),
ResourceName: utils.String(storageAccountId.Name),
ResourceType: utils.String("Microsoft.Storage/storageAccounts"),
ResourceURI: utils.String(storageAccountId.ID()),
ResourceUri: utils.String(storageAccountId.ID()),
},
FriendlyName: utils.String(id.Name),
PolicyInfo: &dataprotection.PolicyInfo{
PolicyID: utils.String(policyId.ID()),
FriendlyName: utils.String(id.BackupInstanceName),
PolicyInfo: backupinstances.PolicyInfo{
PolicyId: policyId.ID(),
},
},
}

future, err := client.CreateOrUpdate(ctx, id.BackupVaultName, id.ResourceGroup, id.Name, parameters)
err := client.CreateOrUpdateThenPoll(ctx, id, parameters)
if err != nil {
return fmt.Errorf("creating/updating DataProtection BackupInstance (%q): %+v", id, err)
}

if err := future.WaitForCompletionRef(ctx, client.Client); err != nil {
return fmt.Errorf("waiting for creation/update of the DataProtection BackupInstance (%q): %+v", id, err)
}

deadline, ok := ctx.Deadline()
if !ok {
return fmt.Errorf("context had no deadline")
}
stateConf := &pluginsdk.StateChangeConf{
Pending: []string{string(dataprotection.StatusConfiguringProtection), "UpdatingProtection"},
Target: []string{string(dataprotection.StatusProtectionConfigured)},
Pending: []string{string(backupinstances.StatusConfiguringProtection), "UpdatingProtection"},
Target: []string{string(backupinstances.StatusProtectionConfigured)},
Refresh: policyProtectionStateRefreshFunc(ctx, client, id),
MinTimeout: 1 * time.Minute,
Timeout: time.Until(deadline),
Expand All @@ -151,30 +146,29 @@ func resourceDataProtectionBackupInstanceBlobStorageRead(d *schema.ResourceData,
ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d)
defer cancel()

id, err := parse.BackupInstanceID(d.Id())
id, err := backupinstances.ParseBackupInstanceID(d.Id())
if err != nil {
return err
}

resp, err := client.Get(ctx, id.BackupVaultName, id.ResourceGroup, id.Name)
resp, err := client.Get(ctx, *id)
if err != nil {
if utils.ResponseWasNotFound(resp.Response) {
if response.WasNotFound(resp.HttpResponse) {
log.Printf("[INFO] dataprotection %q does not exist - removing from state", d.Id())
d.SetId("")
return nil
}
return fmt.Errorf("retrieving DataProtection BackupInstance (%q): %+v", id, err)
}
vaultId := parse.NewBackupVaultID(id.SubscriptionId, id.ResourceGroup, id.BackupVaultName)
d.Set("name", id.Name)
vaultId := backupinstances.NewBackupVaultID(id.SubscriptionId, id.ResourceGroupName, id.VaultName)
d.Set("name", id.BackupInstanceName)
d.Set("vault_id", vaultId.ID())
if props := resp.Properties; props != nil {
if props.DataSourceInfo != nil {
if model := resp.Model; model != nil {
if props := model.Properties; props != nil {

d.Set("storage_account_id", props.DataSourceInfo.ResourceID)
d.Set("location", props.DataSourceInfo.ResourceLocation)
}
if props.PolicyInfo != nil {
d.Set("backup_policy_id", props.PolicyInfo.PolicyID)
d.Set("backup_policy_id", props.PolicyInfo.PolicyId)
}
}
return nil
Expand All @@ -185,21 +179,15 @@ func resourceDataProtectionBackupInstanceBlobStorageDelete(d *schema.ResourceDat
ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d)
defer cancel()

id, err := parse.BackupInstanceID(d.Id())
id, err := backupinstances.ParseBackupInstanceID(d.Id())
if err != nil {
return err
}

future, err := client.Delete(ctx, id.BackupVaultName, id.ResourceGroup, id.Name)
err = client.DeleteThenPoll(ctx, *id)
if err != nil {
if response.WasNotFound(future.Response()) {
return nil
}
return fmt.Errorf("deleting DataProtection BackupInstance (%q): %+v", id, err)
return fmt.Errorf("deleting %s: %+v", *id, err)
}

if err := future.WaitForCompletionRef(ctx, client.Client); err != nil {
return fmt.Errorf("waiting for deletion of the DataProtection BackupInstance (%q): %+v", id.Name, err)
}
return nil
}
Expand Up @@ -5,12 +5,13 @@ import (
"fmt"
"testing"

"github.com/hashicorp/go-azure-helpers/lang/response"
"github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/dataprotection/parse"
"github.com/hashicorp/terraform-provider-azurerm/utils"
)

Expand Down Expand Up @@ -87,16 +88,16 @@ func TestAccDataProtectionBackupInstanceBlobStorage_update(t *testing.T) {
}

func (r DataProtectionBackupInstanceBlobStorageResource) Exists(ctx context.Context, client *clients.Client, state *terraform.InstanceState) (*bool, error) {
id, err := parse.BackupInstanceID(state.ID)
id, err := backupinstances.ParseBackupInstanceID(state.ID)
if err != nil {
return nil, err
}
resp, err := client.DataProtection.BackupInstanceClient.Get(ctx, id.BackupVaultName, id.ResourceGroup, id.Name)
resp, err := client.DataProtection.BackupInstanceClient.Get(ctx, *id)
if err != nil {
if utils.ResponseWasNotFound(resp.Response) {
if response.WasNotFound(resp.HttpResponse) {
return utils.Bool(false), nil
}
return nil, fmt.Errorf("retrieving DataProtection BackupInstance (%q): %+v", id, err)
return nil, fmt.Errorf("retrieving %s: %+v", id, err)
}
return utils.Bool(true), nil
}
Expand Down