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_virtual_hub_route_table_route #13743

Merged
merged 5 commits into from Oct 21, 2021
Merged
Show file tree
Hide file tree
Changes from all 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
5 changes: 4 additions & 1 deletion .gitignore
Expand Up @@ -45,4 +45,7 @@ examples/**/terraform.zip

# never upload the build to git
terraform-provider-azurerm
tf.zip
tf.zip

# do not upload secrets
.env
81 changes: 81 additions & 0 deletions internal/services/network/parse/hub_route_table_route.go
@@ -0,0 +1,81 @@
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 HubRouteTableRouteId struct {
SubscriptionId string
ResourceGroup string
VirtualHubName string
HubRouteTableName string
RouteName string
}

func NewHubRouteTableRouteID(subscriptionId, resourceGroup, virtualHubName, hubRouteTableName, routeName string) HubRouteTableRouteId {
return HubRouteTableRouteId{
SubscriptionId: subscriptionId,
ResourceGroup: resourceGroup,
VirtualHubName: virtualHubName,
HubRouteTableName: hubRouteTableName,
RouteName: routeName,
}
}

func (id HubRouteTableRouteId) String() string {
segments := []string{
fmt.Sprintf("Route Name %q", id.RouteName),
fmt.Sprintf("Hub Route Table Name %q", id.HubRouteTableName),
fmt.Sprintf("Virtual Hub Name %q", id.VirtualHubName),
fmt.Sprintf("Resource Group %q", id.ResourceGroup),
}
segmentsStr := strings.Join(segments, " / ")
return fmt.Sprintf("%s: (%s)", "Hub Route Table Route", segmentsStr)
}

func (id HubRouteTableRouteId) ID() string {
fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualHubs/%s/hubRouteTables/%s/routes/%s"
return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.VirtualHubName, id.HubRouteTableName, id.RouteName)
}

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

resourceId := HubRouteTableRouteId{
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.VirtualHubName, err = id.PopSegment("virtualHubs"); err != nil {
return nil, err
}
if resourceId.HubRouteTableName, err = id.PopSegment("hubRouteTables"); err != nil {
return nil, err
}
if resourceId.RouteName, err = id.PopSegment("routes"); err != nil {
return nil, err
}

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

return &resourceId, nil
}
144 changes: 144 additions & 0 deletions internal/services/network/parse/hub_route_table_route_test.go
@@ -0,0 +1,144 @@
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 = HubRouteTableRouteId{}

func TestHubRouteTableRouteIDFormatter(t *testing.T) {
actual := NewHubRouteTableRouteID("12345678-1234-9876-4563-123456789012", "resGroup1", "virtualHub1", "routeTable1", "route1").ID()
expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/routes/route1"
if actual != expected {
t.Fatalf("Expected %q but got %q", expected, actual)
}
}

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

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

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

{
// missing HubRouteTableName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/",
Error: true,
},

{
// missing value for HubRouteTableName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/",
Error: true,
},

{
// missing RouteName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/",
Error: true,
},

{
// missing value for RouteName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/routes/",
Error: true,
},

{
// valid
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/routes/route1",
Expected: &HubRouteTableRouteId{
SubscriptionId: "12345678-1234-9876-4563-123456789012",
ResourceGroup: "resGroup1",
VirtualHubName: "virtualHub1",
HubRouteTableName: "routeTable1",
RouteName: "route1",
},
},

{
// upper-cased
Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.NETWORK/VIRTUALHUBS/VIRTUALHUB1/HUBROUTETABLES/ROUTETABLE1/ROUTES/ROUTE1",
Error: true,
},
}

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

actual, err := HubRouteTableRouteID(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.VirtualHubName != v.Expected.VirtualHubName {
t.Fatalf("Expected %q but got %q for VirtualHubName", v.Expected.VirtualHubName, actual.VirtualHubName)
}
if actual.HubRouteTableName != v.Expected.HubRouteTableName {
t.Fatalf("Expected %q but got %q for HubRouteTableName", v.Expected.HubRouteTableName, actual.HubRouteTableName)
}
if actual.RouteName != v.Expected.RouteName {
t.Fatalf("Expected %q but got %q for RouteName", v.Expected.RouteName, actual.RouteName)
}
}
}
1 change: 1 addition & 0 deletions internal/services/network/registration.go
Expand Up @@ -105,6 +105,7 @@ func (r Registration) SupportedResources() map[string]*pluginsdk.Resource {
"azurerm_virtual_hub_connection": resourceVirtualHubConnection(),
"azurerm_virtual_hub_ip": resourceVirtualHubIP(),
"azurerm_virtual_hub_route_table": resourceVirtualHubRouteTable(),
"azurerm_virtual_hub_route_table_route": resourceVirtualHubRouteTableRoute(),
"azurerm_virtual_network_dns_servers": resourceVirtualNetworkDnsServers(),
"azurerm_virtual_network_gateway_connection": resourceVirtualNetworkGatewayConnection(),
"azurerm_virtual_network_gateway": resourceVirtualNetworkGateway(),
Expand Down
1 change: 1 addition & 0 deletions internal/services/network/resourceids.go
Expand Up @@ -57,6 +57,7 @@ package network
// Virtual Hubs
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=BgpConnection -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/bgpConnections/connection1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=HubRouteTable -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=HubRouteTableRoute -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/routes/route1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=HubVirtualNetworkConnection -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubVirtualNetworkConnections/hubConnection1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=SecurityPartnerProvider -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/securityPartnerProviders/partnerProvider1
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualHub -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1
Expand Down
23 changes: 23 additions & 0 deletions internal/services/network/validate/hub_route_table_route_id.go
@@ -0,0 +1,23 @@
package validate

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

import (
"fmt"

"github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse"
)

func HubRouteTableRouteID(input interface{}, key string) (warnings []string, errors []error) {
v, ok := input.(string)
if !ok {
errors = append(errors, fmt.Errorf("expected %q to be a string", key))
return
}

if _, err := parse.HubRouteTableRouteID(v); err != nil {
errors = append(errors, err)
}

return
}
100 changes: 100 additions & 0 deletions internal/services/network/validate/hub_route_table_route_id_test.go
@@ -0,0 +1,100 @@
package validate

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

import "testing"

func TestHubRouteTableRouteID(t *testing.T) {
cases := []struct {
Input string
Valid bool
}{

{
// empty
Input: "",
Valid: false,
},

{
// missing SubscriptionId
Input: "/",
Valid: false,
},

{
// missing value for SubscriptionId
Input: "/subscriptions/",
Valid: false,
},

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

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

{
// missing VirtualHubName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/",
Valid: false,
},

{
// missing value for VirtualHubName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/",
Valid: false,
},

{
// missing HubRouteTableName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/",
Valid: false,
},

{
// missing value for HubRouteTableName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/",
Valid: false,
},

{
// missing RouteName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/",
Valid: false,
},

{
// missing value for RouteName
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/routes/",
Valid: false,
},

{
// valid
Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/hubRouteTables/routeTable1/routes/route1",
Valid: true,
},

{
// upper-cased
Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.NETWORK/VIRTUALHUBS/VIRTUALHUB1/HUBROUTETABLES/ROUTETABLE1/ROUTES/ROUTE1",
Valid: false,
},
}
for _, tc := range cases {
t.Logf("[DEBUG] Testing Value %s", tc.Input)
_, errors := HubRouteTableRouteID(tc.Input, "test")
valid := len(errors) == 0

if tc.Valid != valid {
t.Fatalf("Expected %t but got %t", tc.Valid, valid)
}
}
}
Expand Up @@ -63,6 +63,7 @@ func resourceVirtualHubRouteTable() *pluginsdk.Resource {
"route": {
Type: pluginsdk.TypeSet,
Optional: true,
Computed: true,
Elem: &pluginsdk.Resource{
Schema: map[string]*pluginsdk.Schema{
"name": {
Expand Down