Skip to content

Commit

Permalink
New Provider - azurerm_virtual_desktop_host_pool_registration_info
Browse files Browse the repository at this point in the history
  • Loading branch information
Andy.McCullough committed Nov 15, 2021
1 parent baa8d11 commit 214dda2
Show file tree
Hide file tree
Showing 10 changed files with 835 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
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 HostPoolRegistrationInfoId struct {
SubscriptionId string
ResourceGroup string
HostPoolName string
RegistrationInfoName string
}

func NewHostPoolRegistrationInfoID(subscriptionId, resourceGroup, hostPoolName, registrationInfoName string) HostPoolRegistrationInfoId {
return HostPoolRegistrationInfoId{
SubscriptionId: subscriptionId,
ResourceGroup: resourceGroup,
HostPoolName: hostPoolName,
RegistrationInfoName: registrationInfoName,
}
}

func (id HostPoolRegistrationInfoId) String() string {
segments := []string{
fmt.Sprintf("Registration Info Name %q", id.RegistrationInfoName),
fmt.Sprintf("Host Pool Name %q", id.HostPoolName),
fmt.Sprintf("Resource Group %q", id.ResourceGroup),
}
segmentsStr := strings.Join(segments, " / ")
return fmt.Sprintf("%s: (%s)", "Host Pool Registration Info", segmentsStr)
}

func (id HostPoolRegistrationInfoId) ID() string {
fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.DesktopVirtualization/hostPools/%s/registrationInfo/%s"
return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.HostPoolName, id.RegistrationInfoName)
}

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

resourceId := HostPoolRegistrationInfoId{
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.HostPoolName, err = id.PopSegment("hostPools"); err != nil {
return nil, err
}
if resourceId.RegistrationInfoName, err = id.PopSegment("registrationInfo"); err != nil {
return nil, err
}

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

return &resourceId, nil
}

// HostPoolRegistrationInfoIDInsensitively parses an HostPoolRegistrationInfo ID into an HostPoolRegistrationInfoId struct, insensitively
// This should only be used to parse an ID for rewriting, the HostPoolRegistrationInfoID
// method should be used instead for validation etc.
//
// Whilst this may seem strange, this enables Terraform have consistent casing
// which works around issues in Core, whilst handling broken API responses.
func HostPoolRegistrationInfoIDInsensitively(input string) (*HostPoolRegistrationInfoId, error) {
id, err := azure.ParseAzureResourceID(input)
if err != nil {
return nil, err
}

resourceId := HostPoolRegistrationInfoId{
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")
}

// find the correct casing for the 'hostPools' segment
hostPoolsKey := "hostPools"
for key := range id.Path {
if strings.EqualFold(key, hostPoolsKey) {
hostPoolsKey = key
break
}
}
if resourceId.HostPoolName, err = id.PopSegment(hostPoolsKey); err != nil {
return nil, err
}

// find the correct casing for the 'registrationInfo' segment
registrationInfoKey := "registrationInfo"
for key := range id.Path {
if strings.EqualFold(key, registrationInfoKey) {
registrationInfoKey = key
break
}
}
if resourceId.RegistrationInfoName, err = id.PopSegment(registrationInfoKey); err != nil {
return nil, err
}

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

return &resourceId, nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
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 = HostPoolRegistrationInfoId{}

func TestHostPoolRegistrationInfoIDFormatter(t *testing.T) {
actual := NewHostPoolRegistrationInfoID("12345678-1234-9876-4563-123456789012", "resGroup1", "pool1", "default").ID()
expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/registrationInfo/default"
if actual != expected {
t.Fatalf("Expected %q but got %q", expected, actual)
}
}

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

{
// 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 HostPoolName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/",
Error: true,
},

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

{
// missing RegistrationInfoName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/",
Error: true,
},

{
// missing value for RegistrationInfoName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/registrationInfo/",
Error: true,
},

{
// valid
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/registrationInfo/default",
Expected: &HostPoolRegistrationInfoId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
HostPoolName: "pool1",
RegistrationInfoName: "default",
},
},

{
// upper-cased
Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.DESKTOPVIRTUALIZATION/HOSTPOOLS/POOL1/REGISTRATIONINFO/DEFAULT",
Error: true,
},
}

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

actual, err := HostPoolRegistrationInfoID(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.HostPoolName != v.Expected.HostPoolName {
t.Fatalf("Expected %q but got %q for HostPoolName", v.Expected.HostPoolName, actual.HostPoolName)
}
if actual.RegistrationInfoName != v.Expected.RegistrationInfoName {
t.Fatalf("Expected %q but got %q for RegistrationInfoName", v.Expected.RegistrationInfoName, actual.RegistrationInfoName)
}
}
}

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

{
// 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 HostPoolName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/",
Error: true,
},

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

{
// missing RegistrationInfoName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/",
Error: true,
},

{
// missing value for RegistrationInfoName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/registrationInfo/",
Error: true,
},

{
// valid
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostPools/pool1/registrationInfo/default",
Expected: &HostPoolRegistrationInfoId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
HostPoolName: "pool1",
RegistrationInfoName: "default",
},
},

{
// lower-cased segment names
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/hostpools/pool1/registrationinfo/default",
Expected: &HostPoolRegistrationInfoId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
HostPoolName: "pool1",
RegistrationInfoName: "default",
},
},

{
// upper-cased segment names
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/HOSTPOOLS/pool1/REGISTRATIONINFO/default",
Expected: &HostPoolRegistrationInfoId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
HostPoolName: "pool1",
RegistrationInfoName: "default",
},
},

{
// mixed-cased segment names
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/HoStPoOlS/pool1/ReGiStRaTiOnInFo/default",
Expected: &HostPoolRegistrationInfoId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
HostPoolName: "pool1",
RegistrationInfoName: "default",
},
},
}

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

actual, err := HostPoolRegistrationInfoIDInsensitively(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.HostPoolName != v.Expected.HostPoolName {
t.Fatalf("Expected %q but got %q for HostPoolName", v.Expected.HostPoolName, actual.HostPoolName)
}
if actual.RegistrationInfoName != v.Expected.RegistrationInfoName {
t.Fatalf("Expected %q but got %q for RegistrationInfoName", v.Expected.RegistrationInfoName, actual.RegistrationInfoName)
}
}
}
Loading

0 comments on commit 214dda2

Please sign in to comment.