From 84a245a771d6308158856308a2ca6be8dd9b75f1 Mon Sep 17 00:00:00 2001 From: Jack Batzner Date: Thu, 14 Nov 2019 16:16:00 -0600 Subject: [PATCH] Add ability to turn off subscription key in API Management API - Fixes #4884 --- .../api_management_api_data_source.go | 6 +++ .../api_management_api_resource.go | 9 +++++ .../api_management_api_data_source_test.go | 1 + .../tests/api_management_api_resource_test.go | 39 +++++++++++++++++++ .../docs/d/api_management_api.html.markdown | 2 + 5 files changed, 57 insertions(+) diff --git a/azurerm/internal/services/apimanagement/api_management_api_data_source.go b/azurerm/internal/services/apimanagement/api_management_api_data_source.go index 122f46e7fe70..90837a02907b 100644 --- a/azurerm/internal/services/apimanagement/api_management_api_data_source.go +++ b/azurerm/internal/services/apimanagement/api_management_api_data_source.go @@ -99,6 +99,11 @@ func dataSourceApiManagementApi() *schema.Resource { }, }, + "subscription_required": { + Type: schema.TypeBool, + Computed: true, + }, + "version": { Type: schema.TypeString, Computed: true, @@ -147,6 +152,7 @@ func dataSourceApiManagementApiRead(d *schema.ResourceData, meta interface{}) er d.Set("revision", props.APIRevision) d.Set("service_url", props.ServiceURL) d.Set("soap_pass_through", string(props.APIType) == string(apimanagement.SoapPassThrough)) + d.Set("subscription_required", props.SubscriptionRequired) d.Set("version", props.APIVersion) d.Set("version_set_id", props.APIVersionSetID) diff --git a/azurerm/internal/services/apimanagement/api_management_api_resource.go b/azurerm/internal/services/apimanagement/api_management_api_resource.go index 6ae12a607a2c..096448636596 100644 --- a/azurerm/internal/services/apimanagement/api_management_api_resource.go +++ b/azurerm/internal/services/apimanagement/api_management_api_resource.go @@ -163,6 +163,12 @@ func resourceArmApiManagementApi() *schema.Resource { }, }, + "subscription_required": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + "soap_pass_through": { Type: schema.TypeBool, Optional: true, @@ -292,6 +298,7 @@ func resourceArmApiManagementApiCreateUpdate(d *schema.ResourceData, meta interf description := d.Get("description").(string) displayName := d.Get("display_name").(string) serviceUrl := d.Get("service_url").(string) + subscriptionRequired := d.Get("subscription_required").(bool) protocolsRaw := d.Get("protocols").(*schema.Set).List() protocols := expandApiManagementApiProtocols(protocolsRaw) @@ -310,6 +317,7 @@ func resourceArmApiManagementApiCreateUpdate(d *schema.ResourceData, meta interf ServiceURL: utils.String(serviceUrl), SubscriptionKeyParameterNames: subscriptionKeyParameterNames, APIVersion: utils.String(version), + SubscriptionRequired: &subscriptionRequired, }, } @@ -384,6 +392,7 @@ func resourceArmApiManagementApiRead(d *schema.ResourceData, meta interface{}) e d.Set("service_url", props.ServiceURL) d.Set("revision", props.APIRevision) d.Set("soap_pass_through", string(props.APIType) == string(apimanagement.SoapPassThrough)) + d.Set("subscription_required", props.SubscriptionRequired) d.Set("version", props.APIVersion) d.Set("version_set_id", props.APIVersionSetID) diff --git a/azurerm/internal/services/apimanagement/tests/api_management_api_data_source_test.go b/azurerm/internal/services/apimanagement/tests/api_management_api_data_source_test.go index a1b8aa4b1602..0ec122b3236b 100644 --- a/azurerm/internal/services/apimanagement/tests/api_management_api_data_source_test.go +++ b/azurerm/internal/services/apimanagement/tests/api_management_api_data_source_test.go @@ -23,6 +23,7 @@ func TestAccDataSourceAzureRMApiManagementApi_basic(t *testing.T) { resource.TestCheckResourceAttr(data.ResourceName, "protocols.#", "1"), resource.TestCheckResourceAttr(data.ResourceName, "protocols.0", "https"), resource.TestCheckResourceAttr(data.ResourceName, "soap_pass_through", "false"), + resource.TestCheckResourceAttr(data.ResourceName, "subscription_required", "true"), resource.TestCheckResourceAttr(data.ResourceName, "is_current", "true"), resource.TestCheckResourceAttr(data.ResourceName, "is_online", "false"), ), diff --git a/azurerm/internal/services/apimanagement/tests/api_management_api_resource_test.go b/azurerm/internal/services/apimanagement/tests/api_management_api_resource_test.go index eec3a76abd75..da65cedb5554 100644 --- a/azurerm/internal/services/apimanagement/tests/api_management_api_resource_test.go +++ b/azurerm/internal/services/apimanagement/tests/api_management_api_resource_test.go @@ -26,6 +26,7 @@ func TestAccAzureRMApiManagementApi_basic(t *testing.T) { resource.TestCheckResourceAttr(data.ResourceName, "soap_pass_through", "false"), resource.TestCheckResourceAttr(data.ResourceName, "is_current", "true"), resource.TestCheckResourceAttr(data.ResourceName, "is_online", "false"), + resource.TestCheckResourceAttr(data.ResourceName, "subscription_required", "true"), ), }, data.ImportStep(), @@ -157,6 +158,26 @@ func TestAccAzureRMApiManagementApi_soapPassthrough(t *testing.T) { }) } +func TestAccAzureRMApiManagementApi_subscriptionRequired(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_api_management_api", "test") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMApiManagementApiDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAzureRMApiManagementApi_subscriptionRequired(data), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMApiManagementApiExists(data.ResourceName), + resource.TestCheckResourceAttr(data.ResourceName, "subscription_required", "false"), + ), + }, + data.ImportStep(), + }, + }) +} + func TestAccAzureRMApiManagementApi_importSwagger(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_api_management_api", "test") @@ -419,6 +440,24 @@ resource "azurerm_api_management_api" "test" { `, template, data.RandomInteger) } +func testAccAzureRMApiManagementApi_subscriptionRequired(data acceptance.TestData) string { + template := testAccAzureRMApiManagementApi_template(data) + return fmt.Sprintf(` +%s + +resource "azurerm_api_management_api" "test" { + name = "acctestapi-%d" + resource_group_name = azurerm_resource_group.test.name + api_management_name = azurerm_api_management.test.name + display_name = "api1" + path = "api1" + protocols = ["https"] + revision = "1" + subscription_required = false +} +`, template, data.RandomInteger) +} + func testAccAzureRMApiManagementApi_requiresImport(data acceptance.TestData) string { template := testAccAzureRMApiManagementApi_basic(data) return fmt.Sprintf(` diff --git a/website/docs/d/api_management_api.html.markdown b/website/docs/d/api_management_api.html.markdown index e5ecdfaa47bc..6366b3be2d20 100644 --- a/website/docs/d/api_management_api.html.markdown +++ b/website/docs/d/api_management_api.html.markdown @@ -57,6 +57,8 @@ output "api_management_api_id" { * `subscription_key_parameter_names` - A `subscription_key_parameter_names` block as documented below. +* `subscription_required` - Should this API require a subscription key? + * `version` - The Version number of this API, if this API is versioned. * `version_set_id` - The ID of the Version Set which this API is associated with.