Skip to content

Commit

Permalink
New resource azurerm_storage_disks_pool (#14145)
Browse files Browse the repository at this point in the history
Add new resource for Azure Disks Pool
  • Loading branch information
lonegunmanb authored Nov 19, 2021
1 parent 09d768b commit 6e5e487
Show file tree
Hide file tree
Showing 25 changed files with 5,354 additions and 1 deletion.
1 change: 1 addition & 0 deletions internal/provider/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ func SupportedTypedServices() []sdk.TypedServiceRegistration {
mssql.Registration{},
policy.Registration{},
resource.Registration{},
storage.Registration{},
streamanalytics.Registration{},
web.Registration{},
}
Expand Down
1 change: 1 addition & 0 deletions internal/resourceproviders/required.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ func Required() map[string]struct{} {
"Microsoft.ServiceFabricMesh": {},
"Microsoft.Sql": {},
"Microsoft.Storage": {},
"Microsoft.StoragePool": {},
"Microsoft.StreamAnalytics": {},
"Microsoft.TimeSeriesInsights": {},
"Microsoft.Web": {},
Expand Down
3 changes: 2 additions & 1 deletion internal/services/network/subnet_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func resourceSubnet() *pluginsdk.Resource {
"Microsoft.ServiceFabricMesh/networks",
"Microsoft.Sql/managedInstances",
"Microsoft.Sql/servers",
"Microsoft.StoragePool/diskpools",
"Microsoft.StoragePool/diskPools",
"Microsoft.StreamAnalytics/streamingJobs",
"Microsoft.Synapse/workspaces",
"Microsoft.Web/hostingEnvironments",
Expand All @@ -150,6 +150,7 @@ func resourceSubnet() *pluginsdk.Resource {
Type: pluginsdk.TypeString,
ValidateFunc: validation.StringInSlice([]string{
"Microsoft.Network/networkinterfaces/*",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/action",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action",
Expand Down
6 changes: 6 additions & 0 deletions internal/services/storage/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

legacystorage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-01-01/storage"
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-04-01/storage"
"github.com/Azure/azure-sdk-for-go/services/storagepool/mgmt/2021-08-01/storagepool"
"github.com/Azure/azure-sdk-for-go/services/storagesync/mgmt/2020-03-01/storagesync"
"github.com/Azure/go-autorest/autorest"
az "github.com/Azure/go-autorest/autorest/azure"
Expand All @@ -32,6 +33,7 @@ type Client struct {
BlobServicesClient *storage.BlobServicesClient
BlobInventoryPoliciesClient *legacystorage.BlobInventoryPoliciesClient
CloudEndpointsClient *storagesync.CloudEndpointsClient
DisksPoolsClient *storagepool.DiskPoolsClient
EncryptionScopesClient *storage.EncryptionScopesClient
Environment az.Environment
FileServicesClient *storage.FileServicesClient
Expand Down Expand Up @@ -69,6 +71,9 @@ func NewClient(options *common.ClientOptions) *Client {
encryptionScopesClient := storage.NewEncryptionScopesClientWithBaseURI(options.ResourceManagerEndpoint, options.SubscriptionId)
options.ConfigureClient(&encryptionScopesClient.Client, options.ResourceManagerAuthorizer)

disksPoolsClient := storagepool.NewDiskPoolsClientWithBaseURI(options.ResourceManagerEndpoint, options.SubscriptionId)
options.ConfigureClient(&disksPoolsClient.Client, options.ResourceManagerAuthorizer)

fileServicesClient := storage.NewFileServicesClientWithBaseURI(options.ResourceManagerEndpoint, options.SubscriptionId)
options.ConfigureClient(&fileServicesClient.Client, options.ResourceManagerAuthorizer)

Expand All @@ -91,6 +96,7 @@ func NewClient(options *common.ClientOptions) *Client {
BlobServicesClient: &blobServicesClient,
BlobInventoryPoliciesClient: &blobInventoryPoliciesClient,
CloudEndpointsClient: &cloudEndpointsClient,
DisksPoolsClient: &disksPoolsClient,
EncryptionScopesClient: &encryptionScopesClient,
Environment: options.Environment,
FileServicesClient: &fileServicesClient,
Expand Down
69 changes: 69 additions & 0 deletions internal/services/storage/parse/storage_disks_pool.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/hashicorp/terraform-provider-azurerm/helpers/azure"
)

type StorageDisksPoolId struct {
SubscriptionId string
ResourceGroup string
DiskPoolName string
}

func NewStorageDisksPoolID(subscriptionId, resourceGroup, diskPoolName string) StorageDisksPoolId {
return StorageDisksPoolId{
SubscriptionId: subscriptionId,
ResourceGroup: resourceGroup,
DiskPoolName: diskPoolName,
}
}

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

func (id StorageDisksPoolId) ID() string {
fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.StoragePool/diskPools/%s"
return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.DiskPoolName)
}

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

resourceId := StorageDisksPoolId{
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.DiskPoolName, err = id.PopSegment("diskPools"); err != nil {
return nil, err
}

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

return &resourceId, nil
}
112 changes: 112 additions & 0 deletions internal/services/storage/parse/storage_disks_pool_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package parse

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

import (
"testing"

"github.com/hashicorp/terraform-provider-azurerm/internal/resourceid"
)

var _ resourceid.Formatter = StorageDisksPoolId{}

func TestStorageDisksPoolIDFormatter(t *testing.T) {
actual := NewStorageDisksPoolID("12345678-1234-9876-4563-123456789012", "resGroup1", "storagePool1").ID()
expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StoragePool/diskPools/storagePool1"
if actual != expected {
t.Fatalf("Expected %q but got %q", expected, actual)
}
}

func TestStorageDisksPoolID(t *testing.T) {
testData := []struct {
Input string
Error bool
Expected *StorageDisksPoolId
}{

{
// empty
Input: "",
Error: true,
},

{
// missing SubscriptionId
Input: "/",
Error: true,
},

{
// missing value for SubscriptionId
Input: "/subscriptions/",
Error: true,
},

{
// missing ResourceGroup
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/",
Error: true,
},

{
// missing value for ResourceGroup
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/",
Error: true,
},

{
// missing DiskPoolName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StoragePool/",
Error: true,
},

{
// missing value for DiskPoolName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StoragePool/diskPools/",
Error: true,
},

{
// valid
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StoragePool/diskPools/storagePool1",
Expected: &StorageDisksPoolId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
DiskPoolName: "storagePool1",
},
},

{
// upper-cased
Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.STORAGEPOOL/DISKPOOLS/STORAGEPOOL1",
Error: true,
},
}

for _, v := range testData {
t.Logf("[DEBUG] Testing %q", v.Input)

actual, err := StorageDisksPoolID(v.Input)
if err != nil {
if v.Error {
continue
}

t.Fatalf("Expect a value but got an error: %s", err)
}
if v.Error {
t.Fatal("Expect an error but didn't get one")
}

if actual.SubscriptionId != v.Expected.SubscriptionId {
t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId)
}
if actual.ResourceGroup != v.Expected.ResourceGroup {
t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup)
}
if actual.DiskPoolName != v.Expected.DiskPoolName {
t.Fatalf("Expected %q but got %q for DiskPoolName", v.Expected.DiskPoolName, actual.DiskPoolName)
}
}
}
11 changes: 11 additions & 0 deletions internal/services/storage/registration.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package storage

import (
"github.com/hashicorp/terraform-provider-azurerm/internal/sdk"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
)

Expand Down Expand Up @@ -60,3 +61,13 @@ func (r Registration) SupportedResources() map[string]*pluginsdk.Resource {
"azurerm_storage_sync_group": resourceStorageSyncGroup(),
}
}

func (r Registration) DataSources() []sdk.DataSource {
return []sdk.DataSource{}
}

func (r Registration) Resources() []sdk.Resource {
return []sdk.Resource{
DisksPoolResource{},
}
}
1 change: 1 addition & 0 deletions internal/services/storage/resourceids.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package storage
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=EncryptionScope -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Storage/storageAccounts/storageAccount1/encryptionScopes/encryptionScope1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=StorageAccount -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Storage/storageAccounts/storageAccount1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=StorageContainerResourceManager -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Storage/storageAccounts/storageAccount1/blobServices/default/containers/container1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=StorageDisksPool -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StoragePool/diskPools/storagePool1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=StorageShareResourceManager -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Storage/storageAccounts/storageAccount1/fileServices/fileService1/fileshares/share1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=StorageSyncGroup -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StorageSync/storageSyncServices/storageSyncService1/syncGroups/syncGroup1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=StorageSyncService -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.StorageSync/storageSyncServices/storageSyncService1
Expand Down
Loading

0 comments on commit 6e5e487

Please sign in to comment.