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

New resource - azurerm_disk_access #9889

Merged
merged 33 commits into from
Jan 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
4468482
Merge pull request #1 from terraform-providers/master
Aug 15, 2018
7eec704
Fixed typo in doc and added example
Aug 15, 2018
2d6db1e
Merge remote-tracking branch 'upstream/master'
Aug 20, 2018
49fac29
Merge pull request #2 from terraform-providers/master
Aug 20, 2018
16cc08d
Merge branch 'master' of https://github.com/martinbjorgan/terraform-p…
Jan 31, 2020
3e72bc1
Merge pull request #3 from terraform-providers/master
Jun 29, 2020
8a30f56
Merge branch 'master' of https://github.com/martinbjorgan/terraform-p…
Jun 29, 2020
4b97574
Merge remote-tracking branch 'upstream/master'
Oct 5, 2020
e76b299
Merge remote-tracking branch 'upstream/master'
Oct 13, 2020
1a9d72f
Merge pull request #4 from terraform-providers/master
Oct 13, 2020
a5d0a93
Merge branch 'master' of https://github.com/martinbjorgan/terraform-p…
Oct 13, 2020
6ecb922
Merge remote-tracking branch 'upstream/master'
Nov 2, 2020
60bc789
Merge pull request #5 from terraform-providers/master
Nov 2, 2020
7845e59
Merge remote-tracking branch 'upstream/master'
Dec 8, 2020
4a53f6c
disk_access - adding new parser
Dec 16, 2020
c17ff97
New resource: `azurerm_disk_access`
Dec 16, 2020
94b66ab
New resource `azurerm_disk_access`
Dec 16, 2020
04c4e81
New resource `azurerm_disk_access`
Dec 16, 2020
b0d366e
New data source: `azurerm_disk_access`
Dec 16, 2020
8752d8e
disk access: generating the id formatter/parser
Dec 16, 2020
26be354
disk access data source
Dec 16, 2020
5f9edd6
go generated
Dec 16, 2020
b3f3c06
go generated
Dec 16, 2020
6c1c2a0
use go generate
Dec 16, 2020
cf46e28
typo...
Dec 16, 2020
87d2028
fix error msgs
Dec 16, 2020
644d0a1
Merge remote-tracking branch 'upstream/master'
Dec 17, 2020
488fec4
Merge branch 'master' into issue-9883
Dec 17, 2020
f9b6b17
method signarture changed, make generate
Dec 17, 2020
32f8218
removed unnecessary trailing newline
Dec 17, 2020
c6116c5
Generated doc files
Dec 22, 2020
b88470a
add azurerm_disk_access resource and data source tests
Dec 27, 2020
9733901
terrafmt
Dec 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions azurerm/internal/services/compute/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type Client struct {
DedicatedHostsClient *compute.DedicatedHostsClient
DedicatedHostGroupsClient *compute.DedicatedHostGroupsClient
DisksClient *compute.DisksClient
DiskAccessClient *compute.DiskAccessesClient
DiskEncryptionSetsClient *compute.DiskEncryptionSetsClient
GalleriesClient *compute.GalleriesClient
GalleryImagesClient *compute.GalleryImagesClient
Expand Down Expand Up @@ -43,6 +44,9 @@ func NewClient(o *common.ClientOptions) *Client {
disksClient := compute.NewDisksClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId)
o.ConfigureClient(&disksClient.Client, o.ResourceManagerAuthorizer)

diskAccessClient := compute.NewDiskAccessesClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId)
o.ConfigureClient(&diskAccessClient.Client, o.ResourceManagerAuthorizer)

diskEncryptionSetsClient := compute.NewDiskEncryptionSetsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId)
o.ConfigureClient(&diskEncryptionSetsClient.Client, o.ResourceManagerAuthorizer)

Expand Down Expand Up @@ -99,6 +103,7 @@ func NewClient(o *common.ClientOptions) *Client {
DedicatedHostsClient: &dedicatedHostsClient,
DedicatedHostGroupsClient: &dedicatedHostGroupsClient,
DisksClient: &disksClient,
DiskAccessClient: &diskAccessClient,
DiskEncryptionSetsClient: &diskEncryptionSetsClient,
GalleriesClient: &galleriesClient,
GalleryImagesClient: &galleryImagesClient,
Expand Down
58 changes: 58 additions & 0 deletions azurerm/internal/services/compute/disk_access_data_source.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package compute

import (
"fmt"
"time"

"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)

func dataSourceArmDiskAccess() *schema.Resource {
return &schema.Resource{
Read: dataSourceArmDiskAccessRead,

Timeouts: &schema.ResourceTimeout{
Read: schema.DefaultTimeout(5 * time.Minute),
},

Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
},

"resource_group_name": azure.SchemaResourceGroupNameForDataSource(),

"tags": tags.Schema(),
},
}
}

func dataSourceArmDiskAccessRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*clients.Client).Compute.DiskAccessClient
ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d)
defer cancel()

resourceGroup := d.Get("resource_group_name").(string)
name := d.Get("name").(string)

resp, err := client.Get(ctx, resourceGroup, name)
if err != nil {
if utils.ResponseWasNotFound(resp.Response) {
return fmt.Errorf("Error: Disk Access %q (Resource Group %q) was not found", name, resourceGroup)
}
return fmt.Errorf("Error: Error making Read request on Azure Disk Access %q (Resource Group %q): %s", name, resourceGroup, err)
}

d.SetId(*resp.ID)

d.Set("name", name)
d.Set("resource_group_name", resourceGroup)

return tags.FlattenAndSet(d, resp.Tags)
}
158 changes: 158 additions & 0 deletions azurerm/internal/services/compute/disk_access_resource.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
package compute

import (
"fmt"
"log"
"time"

"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2020-06-01/compute"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/compute/parse"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags"
azSchema "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tf/schema"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)

func resourceArmDiskAccess() *schema.Resource {
return &schema.Resource{
Create: resourceArmDiskAccessCreateUpdate,
Read: resourceArmDiskAccessRead,
Update: resourceArmDiskAccessCreateUpdate,
Delete: resourceArmDiskAccessDelete,

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

Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(30 * time.Minute),
Read: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(30 * time.Minute),
Delete: schema.DefaultTimeout(30 * time.Minute),
},

Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"location": azure.SchemaLocation(),

"resource_group_name": azure.SchemaResourceGroupName(),

"tags": tags.Schema(),
},
}
}

func resourceArmDiskAccessCreateUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*clients.Client).Compute.DiskAccessClient
ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d)
defer cancel()

log.Printf("[INFO] preparing arguments for Azure ARM Disk Access creation.")

name := d.Get("name").(string)
resourceGroup := d.Get("resource_group_name").(string)
t := d.Get("tags").(map[string]interface{})

if d.IsNewResource() {
existing, err := client.Get(ctx, resourceGroup, name)
if err != nil {
if !utils.ResponseWasNotFound(existing.Response) {
return fmt.Errorf("Error checking for presence of existing Disk Access %q (Resource Group %q): %s", name, resourceGroup, err)
}
}
if existing.ID != nil && *existing.ID != "" {
return tf.ImportAsExistsError("azurerm_disk_access", *existing.ID)
}
}

location := azure.NormalizeLocation(d.Get("location").(string))

createDiskAccess := compute.DiskAccess{
Name: &name,
Location: &location,
Tags: tags.Expand(t),
}

future, err := client.CreateOrUpdate(ctx, resourceGroup, name, createDiskAccess)
if err != nil {
return fmt.Errorf("Error creating/updating Disk Access %q (Resource Group %q): %+v", name, resourceGroup, err)
}

if err = future.WaitForCompletionRef(ctx, client.Client); err != nil {
return fmt.Errorf("Error waiting for create/update of Disk Access %q (Resource Group %q): %+v", name, resourceGroup, err)
}

read, err := client.Get(ctx, resourceGroup, name)
if err != nil {
return fmt.Errorf("Error retrieving Disk Access %q (Resource Group %q): %+v", name, resourceGroup, err)
}
if read.ID == nil {
return fmt.Errorf("Error reading Disk Access %s (Resource Group %q): ID was nil", name, resourceGroup)
}

d.SetId(*read.ID)

return resourceArmDiskAccessRead(d, meta)
}

func resourceArmDiskAccessRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*clients.Client).Compute.DiskAccessClient
ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d)
defer cancel()

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

resp, err := client.Get(ctx, id.ResourceGroup, id.Name)
if err != nil {
if utils.ResponseWasNotFound(resp.Response) {
log.Printf("[INFO] Disk Access %q does not exist - removing from state", d.Id())
d.SetId("")
return nil
}
return fmt.Errorf("Error making Read request on Azure Disk Access %s (resource group %s): %s", id.Name, id.ResourceGroup, err)
}

d.Set("name", resp.Name)
d.Set("resource_group_name", id.ResourceGroup)

if location := resp.Location; location != nil {
d.Set("location", azure.NormalizeLocation(*location))
}

return tags.FlattenAndSet(d, resp.Tags)
}

func resourceArmDiskAccessDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*clients.Client).Compute.DiskAccessClient
ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d)
defer cancel()

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

future, err := client.Delete(ctx, id.ResourceGroup, id.Name)
if err != nil {
return fmt.Errorf("Error deleting Disk Access %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
}

if err = future.WaitForCompletionRef(ctx, client.Client); err != nil {
return fmt.Errorf("Error waiting for deletion of Disk Access %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
}

return nil
}
69 changes: 69 additions & 0 deletions azurerm/internal/services/compute/parse/disk_access.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package parse

// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten

import (
"fmt"
"strings"

"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
)

type DiskAccessId struct {
SubscriptionId string
ResourceGroup string
Name string
}

func NewDiskAccessID(subscriptionId, resourceGroup, name string) DiskAccessId {
return DiskAccessId{
SubscriptionId: subscriptionId,
ResourceGroup: resourceGroup,
Name: name,
}
}

func (id DiskAccessId) String() string {
segments := []string{
fmt.Sprintf("Name %q", id.Name),
fmt.Sprintf("Resource Group %q", id.ResourceGroup),
}
segmentsStr := strings.Join(segments, " / ")
return fmt.Sprintf("%s: (%s)", "Disk Access", segmentsStr)
}

func (id DiskAccessId) ID() string {
fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/diskAccesses/%s"
return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.Name)
}

// DiskAccessID parses a DiskAccess ID into an DiskAccessId struct
func DiskAccessID(input string) (*DiskAccessId, error) {
id, err := azure.ParseAzureResourceID(input)
if err != nil {
return nil, err
}

resourceId := DiskAccessId{
SubscriptionId: id.SubscriptionID,
ResourceGroup: id.ResourceGroup,
}

if resourceId.SubscriptionId == "" {
return nil, fmt.Errorf("ID was missing the 'subscriptions' element")
}

if resourceId.ResourceGroup == "" {
return nil, fmt.Errorf("ID was missing the 'resourceGroups' element")
}

if resourceId.Name, err = id.PopSegment("diskAccesses"); err != nil {
return nil, err
}

if err := id.ValidateNoEmptySegments(input); err != nil {
return nil, err
}

return &resourceId, nil
}
Loading