Skip to content

Commit e43775d

Browse files
authored
azurerm_api_management - refactoring remaining api_management resources to use parsers (hashicorp#14148)
* refactoring api_management to use parsers * refactoring api_management to use parsers
1 parent 7833565 commit e43775d

20 files changed

+214
-346
lines changed

internal/services/apimanagement/api_management_api_operation_policy_resource.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ func resourceApiManagementApiOperationPolicy() *pluginsdk.Resource {
2323
Read: resourceApiManagementAPIOperationPolicyRead,
2424
Update: resourceApiManagementAPIOperationPolicyCreateUpdate,
2525
Delete: resourceApiManagementAPIOperationPolicyDelete,
26-
// TODO: replace this with an importer which validates the ID during import
27-
Importer: pluginsdk.DefaultImporter(),
26+
Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error {
27+
_, err := parse.ApiOperationPolicyID(id)
28+
return err
29+
}),
2830

2931
Timeouts: &pluginsdk.ResourceTimeout{
3032
Create: pluginsdk.DefaultTimeout(30 * time.Minute),

internal/services/apimanagement/api_management_api_operation_policy_resource_test.go

+4-8
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import (
66
"testing"
77

88
"github.com/Azure/azure-sdk-for-go/services/apimanagement/mgmt/2020-12-01/apimanagement"
9-
"github.com/hashicorp/terraform-provider-azurerm/helpers/azure"
109
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
1110
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
1211
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
12+
"github.com/hashicorp/terraform-provider-azurerm/internal/services/apimanagement/parse"
1313
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
1414
"github.com/hashicorp/terraform-provider-azurerm/utils"
1515
)
@@ -94,18 +94,14 @@ func TestAccApiManagementAPIOperationPolicy_rawXml(t *testing.T) {
9494
}
9595

9696
func (ApiManagementApiOperationPolicyResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) {
97-
id, err := azure.ParseAzureResourceID(state.ID)
97+
id, err := parse.ApiOperationPolicyID(state.ID)
9898
if err != nil {
9999
return nil, err
100100
}
101-
resourceGroup := id.ResourceGroup
102-
serviceName := id.Path["service"]
103-
apiName := id.Path["apis"]
104-
operationID := id.Path["operations"]
105101

106-
resp, err := clients.ApiManagement.ApiOperationPoliciesClient.Get(ctx, resourceGroup, serviceName, apiName, operationID, apimanagement.PolicyExportFormatXML)
102+
resp, err := clients.ApiManagement.ApiOperationPoliciesClient.Get(ctx, id.ResourceGroup, id.ServiceName, id.ApiName, id.OperationName, apimanagement.PolicyExportFormatXML)
107103
if err != nil {
108-
return nil, fmt.Errorf("reading ApiManagementApi Operation Policy (%s): %+v", id, err)
104+
return nil, fmt.Errorf("reading %s: %+v", *id, err)
109105
}
110106

111107
return utils.Bool(resp.ID != nil), nil

internal/services/apimanagement/api_management_api_policy_resource.go

+12-16
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ func resourceApiManagementApiPolicy() *pluginsdk.Resource {
2323
Read: resourceApiManagementAPIPolicyRead,
2424
Update: resourceApiManagementAPIPolicyCreateUpdate,
2525
Delete: resourceApiManagementAPIPolicyDelete,
26-
// TODO: replace this with an importer which validates the ID during import
27-
Importer: pluginsdk.DefaultImporter(),
26+
Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error {
27+
_, err := parse.ApiPolicyID(id)
28+
return err
29+
}),
2830

2931
Timeouts: &pluginsdk.ResourceTimeout{
3032
Create: pluginsdk.DefaultTimeout(30 * time.Minute),
@@ -132,24 +134,21 @@ func resourceApiManagementAPIPolicyRead(d *pluginsdk.ResourceData, meta interfac
132134
if err != nil {
133135
return err
134136
}
135-
resourceGroup := id.ResourceGroup
136-
serviceName := id.ServiceName
137-
apiName := id.ApiName
138137

139-
resp, err := client.Get(ctx, resourceGroup, serviceName, apiName, apimanagement.PolicyExportFormatXML)
138+
resp, err := client.Get(ctx, id.ResourceGroup, id.ServiceName, id.ApiName, apimanagement.PolicyExportFormatXML)
140139
if err != nil {
141140
if utils.ResponseWasNotFound(resp.Response) {
142-
log.Printf("[DEBUG] API Policy (Resource Group %q / API Management Service %q / API %q) was not found - removing from state!", resourceGroup, serviceName, apiName)
141+
log.Printf("[DEBUG] %s was not found - removing from state!", *id)
143142
d.SetId("")
144143
return nil
145144
}
146145

147-
return fmt.Errorf("making Read request for API Policy (Resource Group %q / API Management Service %q / API %q): %+v", resourceGroup, serviceName, apiName, err)
146+
return fmt.Errorf("making Read request for %s: %+v", *id, err)
148147
}
149148

150-
d.Set("resource_group_name", resourceGroup)
151-
d.Set("api_management_name", serviceName)
152-
d.Set("api_name", apiName)
149+
d.Set("resource_group_name", id.ResourceGroup)
150+
d.Set("api_management_name", id.ServiceName)
151+
d.Set("api_name", id.ApiName)
153152

154153
if properties := resp.PolicyContractProperties; properties != nil {
155154
policyContent := ""
@@ -174,13 +173,10 @@ func resourceApiManagementAPIPolicyDelete(d *pluginsdk.ResourceData, meta interf
174173
if err != nil {
175174
return err
176175
}
177-
resourceGroup := id.ResourceGroup
178-
serviceName := id.ServiceName
179-
apiName := id.ApiName
180176

181-
if resp, err := client.Delete(ctx, resourceGroup, serviceName, apiName, ""); err != nil {
177+
if resp, err := client.Delete(ctx, id.ResourceGroup, id.ServiceName, id.ApiName, ""); err != nil {
182178
if !utils.ResponseWasNotFound(resp) {
183-
return fmt.Errorf("deleting API Policy (Resource Group %q / API Management Service %q / API %q): %+v", resourceGroup, serviceName, apiName, err)
179+
return fmt.Errorf("deleting %s: %+v", *id, err)
184180
}
185181
}
186182

internal/services/apimanagement/api_management_api_policy_resource_test.go

+4-7
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import (
66
"testing"
77

88
"github.com/Azure/azure-sdk-for-go/services/apimanagement/mgmt/2020-12-01/apimanagement"
9-
"github.com/hashicorp/terraform-provider-azurerm/helpers/azure"
109
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
1110
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
1211
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
12+
"github.com/hashicorp/terraform-provider-azurerm/internal/services/apimanagement/parse"
1313
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
1414
"github.com/hashicorp/terraform-provider-azurerm/utils"
1515
)
@@ -99,17 +99,14 @@ func TestAccApiManagementAPIPolicy_customPolicy(t *testing.T) {
9999
}
100100

101101
func (ApiManagementApiPolicyResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) {
102-
id, err := azure.ParseAzureResourceID(state.ID)
102+
id, err := parse.ApiPolicyID(state.ID)
103103
if err != nil {
104104
return nil, err
105105
}
106-
resourceGroup := id.ResourceGroup
107-
serviceName := id.Path["service"]
108-
apiName := id.Path["apis"]
109106

110-
resp, err := clients.ApiManagement.ApiPoliciesClient.Get(ctx, resourceGroup, serviceName, apiName, apimanagement.PolicyExportFormatXML)
107+
resp, err := clients.ApiManagement.ApiPoliciesClient.Get(ctx, id.ResourceGroup, id.ServiceName, id.ApiName, apimanagement.PolicyExportFormatXML)
111108
if err != nil {
112-
return nil, fmt.Errorf("reading ApiManagementApi Policy (%s): %+v", id, err)
109+
return nil, fmt.Errorf("reading %s: %+v", *id, err)
113110
}
114111

115112
return utils.Bool(resp.ID != nil), nil

internal/services/apimanagement/api_management_api_resource.go

+34-49
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ func resourceApiManagementApi() *pluginsdk.Resource {
2525
Read: resourceApiManagementApiRead,
2626
Update: resourceApiManagementApiCreateUpdate,
2727
Delete: resourceApiManagementApiDelete,
28-
// TODO: replace this with an importer which validates the ID during import
29-
Importer: pluginsdk.DefaultImporter(),
28+
Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error {
29+
_, err := parse.ApiID(id)
30+
return err
31+
}),
3032

3133
Timeouts: &pluginsdk.ResourceTimeout{
3234
Create: pluginsdk.DefaultTimeout(30 * time.Minute),
@@ -266,15 +268,15 @@ func resourceApiManagementApi() *pluginsdk.Resource {
266268

267269
func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interface{}) error {
268270
client := meta.(*clients.Client).ApiManagement.ApiClient
271+
subscriptionId := meta.(*clients.Client).Account.SubscriptionId
269272
ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d)
270273
defer cancel()
271274

272-
resourceGroup := d.Get("resource_group_name").(string)
273-
serviceName := d.Get("api_management_name").(string)
274-
name := d.Get("name").(string)
275+
id := parse.NewApiID(subscriptionId, d.Get("resource_group_name").(string), d.Get("api_management_name").(string), d.Get("name").(string))
276+
275277
revision := d.Get("revision").(string)
276278
path := d.Get("path").(string)
277-
apiId := fmt.Sprintf("%s;rev=%s", name, revision)
279+
apiId := fmt.Sprintf("%s;rev=%s", id.Name, revision)
278280
version := d.Get("version").(string)
279281
versionSetId := d.Get("version_set_id").(string)
280282
displayName := d.Get("display_name").(string)
@@ -291,10 +293,10 @@ func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interf
291293
}
292294

293295
if d.IsNewResource() {
294-
existing, err := client.Get(ctx, resourceGroup, serviceName, apiId)
296+
existing, err := client.Get(ctx, id.ResourceGroup, id.ServiceName, apiId)
295297
if err != nil {
296298
if !utils.ResponseWasNotFound(existing.Response) {
297-
return fmt.Errorf("checking for presence of existing API %q (API Management Service %q / Resource Group %q): %s", name, serviceName, resourceGroup, err)
299+
return fmt.Errorf("checking for presence of existing %s: %s", id, err)
298300
}
299301
}
300302

@@ -323,7 +325,7 @@ func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interf
323325
contentFormat := importV["content_format"].(string)
324326
contentValue := importV["content_value"].(string)
325327

326-
log.Printf("[DEBUG] Importing API Management API %q of type %q", name, contentFormat)
328+
log.Printf("[DEBUG] Importing API Management API %q of type %q", id.Name, contentFormat)
327329
apiParams := apimanagement.APICreateOrUpdateParameter{
328330
APICreateOrUpdateProperties: &apimanagement.APICreateOrUpdateProperties{
329331
APIType: apiType,
@@ -338,7 +340,7 @@ func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interf
338340

339341
// `wsdl_selector` is necessary under format `wsdl`
340342
if len(wsdlSelectorVs) == 0 && contentFormat == string(apimanagement.Wsdl) {
341-
return fmt.Errorf("`wsdl_selector` is required when content format is `wsdl` in API Management API %q", name)
343+
return fmt.Errorf("`wsdl_selector` is required when content format is `wsdl` in API Management API %q", id.Name)
342344
}
343345

344346
if len(wsdlSelectorVs) > 0 {
@@ -356,13 +358,13 @@ func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interf
356358
apiParams.APICreateOrUpdateProperties.APIVersionSetID = utils.String(versionSetId)
357359
}
358360

359-
future, err := client.CreateOrUpdate(ctx, resourceGroup, serviceName, apiId, apiParams, "")
361+
future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.ServiceName, apiId, apiParams, "")
360362
if err != nil {
361-
return fmt.Errorf("creating/updating API Management API %q (Resource Group %q): %+v", name, resourceGroup, err)
363+
return fmt.Errorf("creating/updating %s: %+v", id, err)
362364
}
363365

364366
if err = future.WaitForCompletionRef(ctx, client.Client); err != nil {
365-
return fmt.Errorf("waiting on creating/updating API Management API %q (Resource Group %q): %+v", name, resourceGroup, err)
367+
return fmt.Errorf("waiting on creating/updating %s: %+v", id, err)
366368
}
367369
}
368370

@@ -412,25 +414,16 @@ func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interf
412414
params.APICreateOrUpdateProperties.APIVersionSetID = utils.String(versionSetId)
413415
}
414416

415-
future, err := client.CreateOrUpdate(ctx, resourceGroup, serviceName, apiId, params, "")
417+
future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.ServiceName, apiId, params, "")
416418
if err != nil {
417-
return fmt.Errorf("creating/updating API Management API %q (Resource Group %q): %+v", name, resourceGroup, err)
419+
return fmt.Errorf("creating/updating %s: %+v", id, err)
418420
}
419421

420422
if err = future.WaitForCompletionRef(ctx, client.Client); err != nil {
421-
return fmt.Errorf("waiting on creating/updating API Management API %q (Resource Group %q): %+v", name, resourceGroup, err)
422-
}
423-
424-
read, err := client.Get(ctx, resourceGroup, serviceName, apiId)
425-
if err != nil {
426-
return fmt.Errorf("retrieving API %q / Revision %q (API Management Service %q / Resource Group %q): %+v", name, revision, serviceName, resourceGroup, err)
423+
return fmt.Errorf("waiting on creating/updating %s: %+v", id, err)
427424
}
428425

429-
if read.ID == nil {
430-
return fmt.Errorf("Cannot read ID for API %q / Revision %q (API Management Service %q / Resource Group %q)", name, revision, serviceName, resourceGroup)
431-
}
432-
433-
d.SetId(*read.ID)
426+
d.SetId(id.ID())
434427
return resourceApiManagementApiRead(d, meta)
435428
}
436429

@@ -444,31 +437,27 @@ func resourceApiManagementApiRead(d *pluginsdk.ResourceData, meta interface{}) e
444437
return err
445438
}
446439

447-
resourceGroup := id.ResourceGroup
448-
serviceName := id.ServiceName
449-
apiid := id.Name
450-
451-
name := apiid
440+
name := id.Name
452441
revision := ""
453-
if strings.Contains(apiid, ";") {
454-
name = strings.Split(apiid, ";")[0]
455-
revision = strings.Split(apiid, "=")[1]
442+
if strings.Contains(id.Name, ";") {
443+
name = strings.Split(id.Name, ";")[0]
444+
revision = strings.Split(id.Name, "=")[1]
456445
}
457446

458-
resp, err := client.Get(ctx, resourceGroup, serviceName, apiid)
447+
resp, err := client.Get(ctx, id.ResourceGroup, id.ServiceName, id.Name)
459448
if err != nil {
460449
if utils.ResponseWasNotFound(resp.Response) {
461-
log.Printf("[DEBUG] API %q Revision %q (API Management Service %q / Resource Group %q) does not exist - removing from state!", name, revision, serviceName, resourceGroup)
450+
log.Printf("[DEBUG] API %q Revision %q (API Management Service %q / Resource Group %q) does not exist - removing from state!", name, revision, id.ServiceName, id.ResourceGroup)
462451
d.SetId("")
463452
return nil
464453
}
465454

466-
return fmt.Errorf("retrieving API %q / Revision %q (API Management Service %q / Resource Group %q): %+v", name, revision, serviceName, resourceGroup, err)
455+
return fmt.Errorf("retrieving API %q / Revision %q (API Management Service %q / Resource Group %q): %+v", name, revision, id.ServiceName, id.ResourceGroup, err)
467456
}
468457

469-
d.Set("api_management_name", serviceName)
458+
d.Set("api_management_name", id.ServiceName)
470459
d.Set("name", name)
471-
d.Set("resource_group_name", resourceGroup)
460+
d.Set("resource_group_name", id.ResourceGroup)
472461

473462
if props := resp.APIContractProperties; props != nil {
474463
d.Set("description", props.Description)
@@ -515,21 +504,17 @@ func resourceApiManagementApiDelete(d *pluginsdk.ResourceData, meta interface{})
515504
return err
516505
}
517506

518-
resourceGroup := id.ResourceGroup
519-
serviceName := id.ServiceName
520-
apiid := id.Name
521-
522-
name := apiid
507+
name := id.Name
523508
revision := ""
524-
if strings.Contains(apiid, ";") {
525-
name = strings.Split(apiid, ";")[0]
526-
revision = strings.Split(apiid, "=")[1]
509+
if strings.Contains(id.Name, ";") {
510+
name = strings.Split(id.Name, ";")[0]
511+
revision = strings.Split(id.Name, "=")[1]
527512
}
528513

529514
deleteRevisions := utils.Bool(true)
530-
if resp, err := client.Delete(ctx, resourceGroup, serviceName, name, "", deleteRevisions); err != nil {
515+
if resp, err := client.Delete(ctx, id.ResourceGroup, id.ServiceName, name, "", deleteRevisions); err != nil {
531516
if !utils.ResponseWasNotFound(resp) {
532-
return fmt.Errorf("deleting API %q / Revision %q (API Management Service %q / Resource Group %q): %s", name, revision, serviceName, resourceGroup, err)
517+
return fmt.Errorf("deleting API %q / Revision %q (API Management Service %q / Resource Group %q): %s", name, revision, id.ServiceName, id.ResourceGroup, err)
533518
}
534519
}
535520

internal/services/apimanagement/api_management_api_resource_test.go

+4-8
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import (
55
"fmt"
66
"testing"
77

8-
"github.com/hashicorp/terraform-provider-azurerm/helpers/azure"
98
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
109
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
1110
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
11+
"github.com/hashicorp/terraform-provider-azurerm/internal/services/apimanagement/parse"
1212
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
1313
"github.com/hashicorp/terraform-provider-azurerm/utils"
1414
)
@@ -322,18 +322,14 @@ func TestAccApiManagementApi_createRevisionFromExistingRevision(t *testing.T) {
322322
}
323323

324324
func (ApiManagementApiResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) {
325-
id, err := azure.ParseAzureResourceID(state.ID)
325+
id, err := parse.ApiID(state.ID)
326326
if err != nil {
327327
return nil, err
328328
}
329329

330-
resourceGroup := id.ResourceGroup
331-
serviceName := id.Path["service"]
332-
apiid := id.Path["apis"]
333-
334-
resp, err := clients.ApiManagement.ApiClient.Get(ctx, resourceGroup, serviceName, apiid)
330+
resp, err := clients.ApiManagement.ApiClient.Get(ctx, id.ResourceGroup, id.ServiceName, id.Name)
335331
if err != nil {
336-
return nil, fmt.Errorf("reading ApiManagementApi (%s): %+v", id, err)
332+
return nil, fmt.Errorf("reading %s: %+v", *id, err)
337333
}
338334

339335
return utils.Bool(resp.ID != nil), nil

0 commit comments

Comments
 (0)