diff --git a/azurerm/internal/services/apimanagement/api_management_data_source.go b/azurerm/internal/services/apimanagement/api_management_data_source.go index b9c8d6cc5d5c..a0e2b3551213 100644 --- a/azurerm/internal/services/apimanagement/api_management_data_source.go +++ b/azurerm/internal/services/apimanagement/api_management_data_source.go @@ -124,6 +124,13 @@ func dataSourceApiManagementService() *schema.Resource { Schema: apiManagementDataSourceHostnameSchema(), }, }, + "developer_portal": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: apiManagementDataSourceHostnameSchema(), + }, + }, "proxy": { Type: schema.TypeList, Computed: true, @@ -207,6 +214,7 @@ func flattenDataSourceApiManagementHostnameConfigurations(input *[]apimanagement managementResults := make([]interface{}, 0) proxyResults := make([]interface{}, 0) portalResults := make([]interface{}, 0) + developerPortalResults := make([]interface{}, 0) scmResults := make([]interface{}, 0) for _, config := range *input { @@ -238,6 +246,9 @@ func flattenDataSourceApiManagementHostnameConfigurations(input *[]apimanagement case strings.ToLower(string(apimanagement.HostnameTypePortal)): portalResults = append(portalResults, output) + case strings.ToLower(string(apimanagement.HostnameTypeDeveloperPortal)): + developerPortalResults = append(developerPortalResults, output) + case strings.ToLower(string(apimanagement.HostnameTypeScm)): scmResults = append(scmResults, output) } @@ -245,10 +256,11 @@ func flattenDataSourceApiManagementHostnameConfigurations(input *[]apimanagement return []interface{}{ map[string]interface{}{ - "management": managementResults, - "portal": portalResults, - "proxy": proxyResults, - "scm": scmResults, + "management": managementResults, + "portal": portalResults, + "developer_portal": developerPortalResults, + "proxy": proxyResults, + "scm": scmResults, }, } } diff --git a/azurerm/internal/services/apimanagement/api_management_resource.go b/azurerm/internal/services/apimanagement/api_management_resource.go index e01857116ccb..5a48a7373e36 100644 --- a/azurerm/internal/services/apimanagement/api_management_resource.go +++ b/azurerm/internal/services/apimanagement/api_management_resource.go @@ -278,6 +278,13 @@ func resourceArmApiManagementService() *schema.Resource { Schema: apiManagementResourceHostnameSchema("portal"), }, }, + "developer_portal": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Resource{ + Schema: apiManagementResourceHostnameSchema("developer_portal"), + }, + }, "proxy": { Type: schema.TypeList, Optional: true, @@ -711,6 +718,13 @@ func expandAzureRmApiManagementHostnameConfigurations(d *schema.ResourceData) *[ results = append(results, output) } + developerPortalVs := hostnameV["developer_portal"].([]interface{}) + for _, developerPortalV := range developerPortalVs { + v := developerPortalV.(map[string]interface{}) + output := expandApiManagementCommonHostnameConfiguration(v, apimanagement.HostnameTypeDeveloperPortal) + results = append(results, output) + } + proxyVs := hostnameV["proxy"].([]interface{}) for _, proxyV := range proxyVs { v := proxyV.(map[string]interface{}) @@ -761,6 +775,7 @@ func flattenApiManagementHostnameConfigurations(input *[]apimanagement.HostnameC managementResults := make([]interface{}, 0) portalResults := make([]interface{}, 0) + developerPortalResults := make([]interface{}, 0) proxyResults := make([]interface{}, 0) scmResults := make([]interface{}, 0) @@ -813,6 +828,9 @@ func flattenApiManagementHostnameConfigurations(input *[]apimanagement.HostnameC case strings.ToLower(string(apimanagement.HostnameTypePortal)): portalResults = append(portalResults, output) + case strings.ToLower(string(apimanagement.HostnameTypeDeveloperPortal)): + developerPortalResults = append(developerPortalResults, output) + case strings.ToLower(string(apimanagement.HostnameTypeScm)): scmResults = append(scmResults, output) } @@ -820,10 +838,11 @@ func flattenApiManagementHostnameConfigurations(input *[]apimanagement.HostnameC return []interface{}{ map[string]interface{}{ - "management": managementResults, - "portal": portalResults, - "proxy": proxyResults, - "scm": scmResults, + "management": managementResults, + "portal": portalResults, + "developer_portal": developerPortalResults, + "proxy": proxyResults, + "scm": scmResults, }, } } diff --git a/azurerm/internal/services/apimanagement/tests/api_management_resource_test.go b/azurerm/internal/services/apimanagement/tests/api_management_resource_test.go index dca3bcafe011..8418648f806d 100644 --- a/azurerm/internal/services/apimanagement/tests/api_management_resource_test.go +++ b/azurerm/internal/services/apimanagement/tests/api_management_resource_test.go @@ -84,6 +84,10 @@ func TestAccAzureRMApiManagement_complete(t *testing.T) { resource.TestCheckResourceAttr(data.ResourceName, "tags.Acceptance", "Test"), resource.TestCheckResourceAttrSet(data.ResourceName, "public_ip_addresses.#"), resource.TestCheckResourceAttr(data.ResourceName, "protocols.0.enable_http2", "true"), + resource.TestCheckResourceAttr(data.ResourceName, "hostname_configuration.0.proxy.0.host_name", "api.terraform.io"), + resource.TestCheckResourceAttr(data.ResourceName, "hostname_configuration.0.proxy.1.host_name", "api2.terraform.io"), + resource.TestCheckResourceAttr(data.ResourceName, "hostname_configuration.0.portal.0.host_name", "portal.terraform.io"), + resource.TestCheckResourceAttr(data.ResourceName, "hostname_configuration.0.developer_portal.0.host_name", "developer-portal.terraform.io"), ), }, { @@ -92,12 +96,14 @@ func TestAccAzureRMApiManagement_complete(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{ "certificate", // not returned from API, sensitive - "hostname_configuration.0.portal.0.certificate", // not returned from API, sensitive - "hostname_configuration.0.portal.0.certificate_password", // not returned from API, sensitive - "hostname_configuration.0.proxy.0.certificate", // not returned from API, sensitive - "hostname_configuration.0.proxy.0.certificate_password", // not returned from API, sensitive - "hostname_configuration.0.proxy.1.certificate", // not returned from API, sensitive - "hostname_configuration.0.proxy.1.certificate_password", // not returned from API, sensitive + "hostname_configuration.0.portal.0.certificate", // not returned from API, sensitive + "hostname_configuration.0.portal.0.certificate_password", // not returned from API, sensitive + "hostname_configuration.0.developer_portal.0.certificate", // not returned from API, sensitive + "hostname_configuration.0.developer_portal.0.certificate_password", // not returned from API, sensitive + "hostname_configuration.0.proxy.0.certificate", // not returned from API, sensitive + "hostname_configuration.0.proxy.0.certificate_password", // not returned from API, sensitive + "hostname_configuration.0.proxy.1.certificate", // not returned from API, sensitive + "hostname_configuration.0.proxy.1.certificate_password", // not returned from API, sensitive }, }, }, @@ -513,6 +519,12 @@ resource "azurerm_api_management" "test" { certificate = filebase64("testdata/api_management_portal_test.pfx") certificate_password = "terraform" } + + developer_portal { + host_name = "developer-portal.terraform.io" + certificate = filebase64("testdata/api_management_developer_portal_test.pfx") + certificate_password = "terraform" + } } sku_name = "Premium_1" diff --git a/website/docs/d/api_management.html.markdown b/website/docs/d/api_management.html.markdown index 4237eae295ea..2c6876288410 100644 --- a/website/docs/d/api_management.html.markdown +++ b/website/docs/d/api_management.html.markdown @@ -79,6 +79,8 @@ A `hostname_configuration` block exports the following: * `portal` - One or more `portal` blocks as documented below. +* `developer_portal` - One or more `developer_portal` blocks as documented below. + * `proxy` - One or more `proxy` blocks as documented below. * `scm` - One or more `scm` blocks as documented below. @@ -105,6 +107,16 @@ A `portal` block exports the following: --- +A `developer_portal` block exports the following: + +* `host_name` - The Hostname used for the Portal. + +* `key_vault_id` - The ID of the Key Vault Secret which contains the SSL Certificate. + +* `negotiate_client_certificate` - Is Client Certificate Negotiation enabled? + +--- + A `proxy` block exports the following: * `default_ssl_binding` - Is this the default SSL Binding? diff --git a/website/docs/r/api_management.html.markdown b/website/docs/r/api_management.html.markdown index 26aa3063d145..2304a0b4781b 100644 --- a/website/docs/r/api_management.html.markdown +++ b/website/docs/r/api_management.html.markdown @@ -110,6 +110,8 @@ A `hostname_configuration` block supports the following: * `portal` - (Optional) One or more `portal` blocks as documented below. +* `developer_portal` - (Optional) One or more `developer_portal` blocks as documented below. + * `proxy` - (Optional) One or more `proxy` blocks as documented below. * `scm` - (Optional) One or more `scm` blocks as documented below. @@ -122,7 +124,7 @@ A `identity` block supports the following: --- -A `management`, `portal` and `scm` block supports the following: +A `management`, `portal`, `developer_portal` and `scm` block supports the following: * `host_name` - (Required) The Hostname to use for the Management API.