provider/azurerm: fix resource ID parsing for subscriptions resources
If a resource ID has more than one subscriptions key, as is the case for Service Bus subscriptions the Azure SubscriptionID field was overwritten by the second value. TF_ACC= go test ./builtin/providers/azurerm -run TestParseAzureResourceID -timeout=30s -parallel=4 ok github.com/hashicorp/terraform/builtin/providers/azurerm 0.060s
This commit is contained in:
parent
59b67efd8a
commit
70d5914e1b
|
@ -45,22 +45,29 @@ func parseAzureResourceID(id string) (*ResourceID, error) {
|
||||||
return nil, fmt.Errorf("The number of path segments is not divisible by 2 in %q", path)
|
return nil, fmt.Errorf("The number of path segments is not divisible by 2 in %q", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var subscriptionID string
|
||||||
|
|
||||||
// Put the constituent key-value pairs into a map
|
// Put the constituent key-value pairs into a map
|
||||||
componentMap := make(map[string]string, len(components)/2)
|
componentMap := make(map[string]string, len(components)/2)
|
||||||
for current := 0; current < len(components); current += 2 {
|
for current := 0; current < len(components); current += 2 {
|
||||||
key := components[current]
|
key := components[current]
|
||||||
value := components[current+1]
|
value := components[current+1]
|
||||||
|
|
||||||
|
// Catch the subscriptionID before it can be overwritten by another "subscriptions"
|
||||||
|
// value in the ID which is the case for the Service Bus subscription resource
|
||||||
|
if key == "subscriptions" && subscriptionID == "" {
|
||||||
|
subscriptionID = value
|
||||||
|
} else {
|
||||||
componentMap[key] = value
|
componentMap[key] = value
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Build up a ResourceID from the map
|
// Build up a ResourceID from the map
|
||||||
idObj := &ResourceID{}
|
idObj := &ResourceID{}
|
||||||
idObj.Path = componentMap
|
idObj.Path = componentMap
|
||||||
|
|
||||||
if subscription, ok := componentMap["subscriptions"]; ok {
|
if subscriptionID != "" {
|
||||||
idObj.SubscriptionID = subscription
|
idObj.SubscriptionID = subscriptionID
|
||||||
delete(componentMap, "subscriptions")
|
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("No subscription ID found in: %q", path)
|
return nil, fmt.Errorf("No subscription ID found in: %q", path)
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,6 +101,20 @@ func TestParseAzureResourceID(t *testing.T) {
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"/subscriptions/34ca515c-4629-458e-bf7c-738d77e0d0ea/resourceGroups/testGroup1/providers/Microsoft.ServiceBus/namespaces/testNamespace1/topics/testTopic1/subscriptions/testSubscription1",
|
||||||
|
&ResourceID{
|
||||||
|
SubscriptionID: "34ca515c-4629-458e-bf7c-738d77e0d0ea",
|
||||||
|
ResourceGroup: "testGroup1",
|
||||||
|
Provider: "Microsoft.ServiceBus",
|
||||||
|
Path: map[string]string{
|
||||||
|
"namespaces": "testNamespace1",
|
||||||
|
"topics": "testTopic1",
|
||||||
|
"subscriptions": "testSubscription1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
|
|
Loading…
Reference in New Issue