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_api_management_openid_connect_provider #3143

Merged
merged 2 commits into from
Mar 29, 2019
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions azurerm/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ type ArmClient struct {
apiManagementGroupClient apimanagement.GroupClient
apiManagementGroupUsersClient apimanagement.GroupUserClient
apiManagementLoggerClient apimanagement.LoggerClient
apiManagementOpenIdConnectClient apimanagement.OpenIDConnectProviderClient
apiManagementProductsClient apimanagement.ProductClient
apiManagementProductApisClient apimanagement.ProductAPIClient
apiManagementProductGroupsClient apimanagement.ProductGroupClient
Expand Down Expand Up @@ -523,6 +524,10 @@ func (c *ArmClient) registerApiManagementServiceClients(endpoint, subscriptionId
c.configureClient(&serviceClient.Client, auth)
c.apiManagementServiceClient = serviceClient

openIdConnectClient := apimanagement.NewOpenIDConnectProviderClientWithBaseURI(endpoint, subscriptionId)
c.configureClient(&openIdConnectClient.Client, auth)
c.apiManagementOpenIdConnectClient = openIdConnectClient

productsClient := apimanagement.NewProductClientWithBaseURI(endpoint, subscriptionId)
c.configureClient(&productsClient.Client, auth)
c.apiManagementProductsClient = productsClient
Expand Down
1 change: 1 addition & 0 deletions azurerm/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ func Provider() terraform.ResourceProvider {
"azurerm_api_management_group": resourceArmApiManagementGroup(),
"azurerm_api_management_group_user": resourceArmApiManagementGroupUser(),
"azurerm_api_management_logger": resourceArmApiManagementLogger(),
"azurerm_api_management_openid_connect_provider": resourceArmApiManagementOpenIDConnectProvider(),
"azurerm_api_management_product": resourceArmApiManagementProduct(),
"azurerm_api_management_product_api": resourceArmApiManagementProductApi(),
"azurerm_api_management_product_group": resourceArmApiManagementProductGroup(),
Expand Down
17 changes: 16 additions & 1 deletion azurerm/resource_arm_api_management_logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/Azure/azure-sdk-for-go/services/apimanagement/mgmt/2018-01-01/apimanagement"
"github.com/hashicorp/terraform/helper/schema"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)
Expand Down Expand Up @@ -100,6 +101,19 @@ func resourceArmApiManagementLoggerCreate(d *schema.ResourceData, meta interface
return fmt.Errorf("Either `eventhub` or `application_insights` is required")
}

if requireResourcesToBeImported && d.IsNewResource() {
existing, err := client.Get(ctx, resourceGroup, serviceName, name)
if err != nil {
if !utils.ResponseWasNotFound(existing.Response) {
return fmt.Errorf("Error checking for presence of existing Logger %q (API Management Service %q / Resource Group %q): %s", name, serviceName, resourceGroup, err)
}
}

if existing.ID != nil && *existing.ID != "" {
return tf.ImportAsExistsError("azurerm_api_management_logger", *existing.ID)
}
}

parameters := apimanagement.LoggerContract{
LoggerContractProperties: &apimanagement.LoggerContractProperties{
IsBuffered: utils.Bool(d.Get("buffered").(bool)),
Expand Down Expand Up @@ -207,8 +221,9 @@ func resourceArmApiManagementLoggerDelete(d *schema.ResourceData, meta interface

id, err := parseAzureResourceID(d.Id())
if err != nil {
return fmt.Errorf("Error parsing API Management Logger ID %q: %+v", d.Id(), err)
return err
}

resourceGroup := id.ResourceGroup
serviceName := id.Path["service"]
name := id.Path["loggers"]
Expand Down
51 changes: 51 additions & 0 deletions azurerm/resource_arm_api_management_logger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,39 @@ func TestAccAzureRMApiManagementLogger_basicEventHub(t *testing.T) {
})
}

func TestAccAzureRMApiManagementLogger_requiresImport(t *testing.T) {
if !requireResourcesToBeImported {
t.Skip("Skipping since resources aren't required to be imported")
return
}

resourceName := "azurerm_api_management_logger.test"
ri := tf.AccRandTimeInt()
location := testLocation()

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMApiManagementLoggerDestroy,
Steps: []resource.TestStep{
{
Config: testAccAzureRMApiManagementLogger_basicEventHub(ri, location),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMApiManagementLoggerExists(resourceName),
resource.TestCheckResourceAttr(resourceName, "buffered", "true"),
resource.TestCheckResourceAttr(resourceName, "eventhub.#", "1"),
resource.TestCheckResourceAttrSet(resourceName, "eventhub.0.name"),
resource.TestCheckResourceAttrSet(resourceName, "eventhub.0.connection_string"),
),
},
{
Config: testAccAzureRMApiManagementLogger_requiresImport(ri, location),
ExpectError: testRequiresImportError("azurerm_api_management_logger"),
},
},
})
}

func TestAccAzureRMApiManagementLogger_basicApplicationInsights(t *testing.T) {
resourceName := "azurerm_api_management_logger.test"
ri := tf.AccRandTimeInt()
Expand Down Expand Up @@ -279,6 +312,24 @@ resource "azurerm_api_management_logger" "test" {
`, rInt, location, rInt, rInt, rInt, rInt)
}

func testAccAzureRMApiManagementLogger_requiresImport(rInt int, location string) string {
template := testAccAzureRMApiManagementLogger_basicEventHub(rInt, location)
return fmt.Sprintf(`
%s

resource "azurerm_api_management_logger" "import" {
name = "${azurerm_api_management_logger.test.name}"
api_management_name = "${azurerm_api_management_logger.test.api_management_name}"
resource_group_name = "${azurerm_api_management_logger.test.resource_group_name}"

eventhub {
name = "${azurerm_eventhub.test.name}"
connection_string = "${azurerm_eventhub_namespace.test.default_primary_connection_string}"
}
}
`, template)
}

func testAccAzureRMApiManagementLogger_basicApplicationInsights(rInt int, location string) string {
return fmt.Sprintf(`
resource "azurerm_resource_group" "test" {
Expand Down
170 changes: 170 additions & 0 deletions azurerm/resource_arm_api_management_openid_connect_provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package azurerm

import (
"fmt"
"log"

"github.com/Azure/azure-sdk-for-go/services/apimanagement/mgmt/2018-01-01/apimanagement"
"github.com/hashicorp/terraform/helper/schema"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)

func resourceArmApiManagementOpenIDConnectProvider() *schema.Resource {
return &schema.Resource{
Create: resourceArmApiManagementOpenIDConnectProviderCreateUpdate,
Read: resourceArmApiManagementOpenIDConnectProviderRead,
Update: resourceArmApiManagementOpenIDConnectProviderCreateUpdate,
Delete: resourceArmApiManagementOpenIDConnectProviderDelete,

Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Schema: map[string]*schema.Schema{
"name": azure.SchemaApiManagementChildName(),

"resource_group_name": resourceGroupNameSchema(),

"api_management_name": azure.SchemaApiManagementName(),

"client_id": {
Type: schema.TypeString,
Required: true,
Sensitive: true,
ValidateFunc: validate.NoEmptyStrings,
tombuildsstuff marked this conversation as resolved.
Show resolved Hide resolved
},

"client_secret": {
Type: schema.TypeString,
Required: true,
Sensitive: true,
ValidateFunc: validate.NoEmptyStrings,
},

"display_name": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validate.NoEmptyStrings,
},

"metadata_endpoint": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validate.NoEmptyStrings,
},

"description": {
Type: schema.TypeString,
Optional: true,
},
},
}
}

func resourceArmApiManagementOpenIDConnectProviderCreateUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ArmClient).apiManagementOpenIdConnectClient
ctx := meta.(*ArmClient).StopContext

name := d.Get("name").(string)
resourceGroup := d.Get("resource_group_name").(string)
serviceName := d.Get("api_management_name").(string)

if requireResourcesToBeImported && d.IsNewResource() {
existing, err := client.Get(ctx, resourceGroup, serviceName, name)
if err != nil {
if !utils.ResponseWasNotFound(existing.Response) {
return fmt.Errorf("Error checking for presence of existing OpenID Connect Provider %q (API Management Service %q / Resource Group %q): %s", name, serviceName, resourceGroup, err)
}
}

if existing.ID != nil && *existing.ID != "" {
return tf.ImportAsExistsError("azurerm_api_management_openid_connect_provider", *existing.ID)
}
}

parameters := apimanagement.OpenidConnectProviderContract{
OpenidConnectProviderContractProperties: &apimanagement.OpenidConnectProviderContractProperties{
ClientID: utils.String(d.Get("client_id").(string)),
ClientSecret: utils.String(d.Get("client_secret").(string)),
Description: utils.String(d.Get("description").(string)),
DisplayName: utils.String(d.Get("display_name").(string)),
MetadataEndpoint: utils.String(d.Get("metadata_endpoint").(string)),
},
}

if _, err := client.CreateOrUpdate(ctx, resourceGroup, serviceName, name, parameters, ""); err != nil {
return fmt.Errorf("Error creating OpenID Connect Provider %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err)
}

resp, err := client.Get(ctx, resourceGroup, serviceName, name)
if err != nil {
return fmt.Errorf("Error retrieving OpenID Connect Provider %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err)
}
if resp.ID == nil {
return fmt.Errorf("Cannot read OpenID Connect Provider %q (Resource Group %q / API Management Service %q) ID", name, resourceGroup, serviceName)
}
d.SetId(*resp.ID)

return resourceArmApiManagementOpenIDConnectProviderRead(d, meta)
}

func resourceArmApiManagementOpenIDConnectProviderRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ArmClient).apiManagementOpenIdConnectClient
ctx := meta.(*ArmClient).StopContext

id, err := parseAzureResourceID(d.Id())
if err != nil {
return err
}
resourceGroup := id.ResourceGroup
serviceName := id.Path["service"]
name := id.Path["openidConnectProviders"]

resp, err := client.Get(ctx, resourceGroup, serviceName, name)
if err != nil {
if utils.ResponseWasNotFound(resp.Response) {
log.Printf("[INFO] OpenID Connect Provider %q (API Management Service %q / Resource Group %q) was not found - removing from state", name, serviceName, resourceGroup)
d.SetId("")
return nil
}
return fmt.Errorf("Error reading OpenID Connect Provider %q (API Management Service %q / Resource Group %q): %+v", name, serviceName, resourceGroup, err)
}

d.Set("name", resp.Name)
d.Set("resource_group_name", resourceGroup)
d.Set("api_management_name", serviceName)

if props := resp.OpenidConnectProviderContractProperties; props != nil {
d.Set("client_id", props.ClientID)
d.Set("client_secret", props.ClientSecret)
d.Set("description", props.Description)
d.Set("display_name", props.DisplayName)
d.Set("metadata_endpoint", props.MetadataEndpoint)
}

return nil
}

func resourceArmApiManagementOpenIDConnectProviderDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ArmClient).apiManagementOpenIdConnectClient
ctx := meta.(*ArmClient).StopContext

id, err := parseAzureResourceID(d.Id())
if err != nil {
return err
}
resourceGroup := id.ResourceGroup
serviceName := id.Path["service"]
name := id.Path["openidConnectProviders"]

if resp, err := client.Delete(ctx, resourceGroup, serviceName, name, ""); err != nil {
if !utils.ResponseWasNotFound(resp) {
return fmt.Errorf("Error deleting OpenID Connect Provider %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err)
}
}

return nil
}
Loading