diff --git a/azurerm/config.go b/azurerm/config.go index e08b774daa76..f7aaaa24619d 100644 --- a/azurerm/config.go +++ b/azurerm/config.go @@ -126,6 +126,7 @@ type ArmClient struct { redisPatchSchedulesClient redis.PatchSchedulesClient // API Management + apiManagementGroupClient apimanagement.GroupClient apiManagementProductsClient apimanagement.ProductClient apiManagementServiceClient apimanagement.ServiceClient @@ -488,6 +489,10 @@ func getArmClient(c *authentication.Config, skipProviderRegistration bool, partn } func (c *ArmClient) registerApiManagementServiceClients(endpoint, subscriptionId string, auth autorest.Authorizer) { + groupsClient := apimanagement.NewGroupClientWithBaseURI(endpoint, subscriptionId) + c.configureClient(&groupsClient.Client, auth) + c.apiManagementGroupClient = groupsClient + serviceClient := apimanagement.NewServiceClientWithBaseURI(endpoint, subscriptionId) c.configureClient(&serviceClient.Client, auth) c.apiManagementServiceClient = serviceClient diff --git a/azurerm/data_source_api_management_group.go b/azurerm/data_source_api_management_group.go new file mode 100644 index 000000000000..9c296b389d27 --- /dev/null +++ b/azurerm/data_source_api_management_group.go @@ -0,0 +1,79 @@ +package azurerm + +import ( + "fmt" + "log" + + "github.com/hashicorp/terraform/helper/schema" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" +) + +func dataSourceApiManagementGroup() *schema.Resource { + return &schema.Resource{ + Read: dataSourceApiManagementGroupRead, + + Schema: map[string]*schema.Schema{ + "name": azure.SchemaApiManagementChildDataSourceName(), + + "resource_group_name": resourceGroupNameForDataSourceSchema(), + + "api_management_name": azure.SchemaApiManagementDataSourceName(), + + "display_name": { + Type: schema.TypeString, + Computed: true, + }, + + "description": { + Type: schema.TypeString, + Computed: true, + }, + + "external_id": { + Type: schema.TypeString, + Computed: true, + }, + + "type": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func dataSourceApiManagementGroupRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*ArmClient).apiManagementGroupClient + ctx := meta.(*ArmClient).StopContext + + resourceGroup := d.Get("resource_group_name").(string) + serviceName := d.Get("api_management_name").(string) + name := d.Get("name").(string) + + resp, err := client.Get(ctx, resourceGroup, serviceName, name) + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + log.Printf("[DEBUG] Group %q (Resource Group %q / API Management Service %q) was not found - removing from state!", name, resourceGroup, serviceName) + d.SetId("") + return nil + } + + return fmt.Errorf("Error making Read request for Group %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err) + } + + d.SetId(*resp.ID) + + d.Set("name", resp.Name) + d.Set("resource_group_name", resourceGroup) + d.Set("api_management_name", serviceName) + + if properties := resp.GroupContractProperties; properties != nil { + d.Set("display_name", properties.DisplayName) + d.Set("description", properties.Description) + d.Set("external_id", properties.ExternalID) + d.Set("type", string(properties.Type)) + } + + return nil +} diff --git a/azurerm/data_source_api_management_group_test.go b/azurerm/data_source_api_management_group_test.go new file mode 100644 index 000000000000..dfc75814e3e9 --- /dev/null +++ b/azurerm/data_source_api_management_group_test.go @@ -0,0 +1,66 @@ +package azurerm + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform/helper/resource" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf" +) + +func TestAccDataSourceAzureRMApiManagementGroup_basic(t *testing.T) { + dataSourceName := "data.azurerm_api_management_group.test" + rInt := tf.AccRandTimeInt() + location := testLocation() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceApiManagementGroup_basic(rInt, location), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "display_name", "Test Group"), + resource.TestCheckResourceAttr(dataSourceName, "description", ""), + resource.TestCheckResourceAttr(dataSourceName, "external_id", ""), + resource.TestCheckResourceAttr(dataSourceName, "type", "custom"), + ), + }, + }, + }) +} + +func testAccDataSourceApiManagementGroup_basic(rInt int, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_api_management" "test" { + name = "acctestAM-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + publisher_name = "pub1" + publisher_email = "pub1@email.com" + + sku { + name = "Developer" + capacity = 1 + } +} + +resource "azurerm_api_management_group" "test" { + name = "acctestAMGroup-%d" + resource_group_name = "${azurerm_resource_group.test.name}" + api_management_name = "${azurerm_api_management.test.name}" + display_name = "Test Group" +} + +data "azurerm_api_management_group" "test" { + name = "${azurerm_api_management_group.test.name}" + api_management_name = "${azurerm_api_management_group.test.api_management_name}" + resource_group_name = "${azurerm_api_management_group.test.resource_group_name}" +} +`, rInt, location, rInt, rInt) +} diff --git a/azurerm/data_source_api_management_product.go b/azurerm/data_source_api_management_product.go index 1a7a0e06a9b3..6cde7a277d94 100644 --- a/azurerm/data_source_api_management_product.go +++ b/azurerm/data_source_api_management_product.go @@ -14,7 +14,7 @@ func dataSourceApiManagementProduct() *schema.Resource { Read: dataSourceApiManagementProductRead, Schema: map[string]*schema.Schema{ - "product_id": azure.SchemaApiManagementProductDataSourceName(), + "product_id": azure.SchemaApiManagementChildDataSourceName(), "api_management_name": azure.SchemaApiManagementDataSourceName(), diff --git a/azurerm/helpers/azure/api_management.go b/azurerm/helpers/azure/api_management.go index f364e4211a2f..84e4d8386f10 100644 --- a/azurerm/helpers/azure/api_management.go +++ b/azurerm/helpers/azure/api_management.go @@ -22,19 +22,23 @@ func SchemaApiManagementDataSourceName() *schema.Schema { } } -func SchemaApiManagementProductName() *schema.Schema { +// SchemaApiManagementChildName returns the Schema for the identifier +// used by resources within nested under the API Management Service resource +func SchemaApiManagementChildName() *schema.Schema { return &schema.Schema{ Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validate.ApiManagementProductName, + ValidateFunc: validate.ApiManagementChildName, } } -func SchemaApiManagementProductDataSourceName() *schema.Schema { +// SchemaApiManagementChildDataSourceName returns the Schema for the identifier +// used by resources within nested under the API Management Service resource +func SchemaApiManagementChildDataSourceName() *schema.Schema { return &schema.Schema{ Type: schema.TypeString, Required: true, - ValidateFunc: validate.ApiManagementProductName, + ValidateFunc: validate.ApiManagementChildName, } } diff --git a/azurerm/helpers/validate/api_management.go b/azurerm/helpers/validate/api_management.go index 58f7a4f875a2..e39f2761088f 100644 --- a/azurerm/helpers/validate/api_management.go +++ b/azurerm/helpers/validate/api_management.go @@ -5,7 +5,7 @@ import ( "regexp" ) -func ApiManagementProductName(v interface{}, k string) (warnings []string, errors []error) { +func ApiManagementChildName(v interface{}, k string) (warnings []string, errors []error) { value := v.(string) // from the portal: `The field may contain only numbers, letters, and dash (-) sign when preceded and followed by number or a letter.` diff --git a/azurerm/provider.go b/azurerm/provider.go index e3ec6d8d4b6b..a2882038dfe5 100644 --- a/azurerm/provider.go +++ b/azurerm/provider.go @@ -99,6 +99,7 @@ func Provider() terraform.ResourceProvider { DataSourcesMap: map[string]*schema.Resource{ "azurerm_api_management": dataSourceApiManagementService(), + "azurerm_api_management_group": dataSourceApiManagementGroup(), "azurerm_api_management_product": dataSourceApiManagementProduct(), "azurerm_app_service_plan": dataSourceAppServicePlan(), "azurerm_app_service": dataSourceArmAppService(), @@ -165,6 +166,7 @@ func Provider() terraform.ResourceProvider { ResourcesMap: map[string]*schema.Resource{ "azurerm_api_management": resourceArmApiManagementService(), + "azurerm_api_management_group": resourceArmApiManagementGroup(), "azurerm_api_management_product": resourceArmApiManagementProduct(), "azurerm_app_service_active_slot": resourceArmAppServiceActiveSlot(), "azurerm_app_service_custom_hostname_binding": resourceArmAppServiceCustomHostnameBinding(), diff --git a/azurerm/resource_arm_api_management_group.go b/azurerm/resource_arm_api_management_group.go new file mode 100644 index 000000000000..6d483c3baf41 --- /dev/null +++ b/azurerm/resource_arm_api_management_group.go @@ -0,0 +1,157 @@ +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/hashicorp/terraform/helper/validation" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" +) + +func resourceArmApiManagementGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceArmApiManagementGroupCreateUpdate, + Read: resourceArmApiManagementGroupRead, + Update: resourceArmApiManagementGroupCreateUpdate, + Delete: resourceArmApiManagementGroupDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": azure.SchemaApiManagementChildName(), + + "resource_group_name": resourceGroupNameSchema(), + + "api_management_name": azure.SchemaApiManagementName(), + + "display_name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validate.NoEmptyStrings, + }, + + "description": { + Type: schema.TypeString, + Optional: true, + }, + + "external_id": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + }, + + "type": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Default: string(apimanagement.Custom), + ValidateFunc: validation.StringInSlice([]string{ + string(apimanagement.Custom), + string(apimanagement.External), + }, false), + }, + }, + } +} + +func resourceArmApiManagementGroupCreateUpdate(d *schema.ResourceData, meta interface{}) error { + client := meta.(*ArmClient).apiManagementGroupClient + ctx := meta.(*ArmClient).StopContext + + name := d.Get("name").(string) + resourceGroup := d.Get("resource_group_name").(string) + serviceName := d.Get("api_management_name").(string) + + displayName := d.Get("display_name").(string) + description := d.Get("description").(string) + externalID := d.Get("external_id").(string) + groupType := d.Get("type").(string) + + parameters := apimanagement.GroupCreateParameters{ + GroupCreateParametersProperties: &apimanagement.GroupCreateParametersProperties{ + DisplayName: utils.String(displayName), + Description: utils.String(description), + ExternalID: utils.String(externalID), + Type: apimanagement.GroupType(groupType), + }, + } + + if _, err := client.CreateOrUpdate(ctx, resourceGroup, serviceName, name, parameters, ""); err != nil { + return fmt.Errorf("Error creating or updating Group %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 Group %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err) + } + if resp.ID == nil { + return fmt.Errorf("Cannot read ID for Group %q (Resource Group %q / API Management Service %q)", name, resourceGroup, serviceName) + } + d.SetId(*resp.ID) + + return resourceArmApiManagementGroupRead(d, meta) +} + +func resourceArmApiManagementGroupRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*ArmClient).apiManagementGroupClient + ctx := meta.(*ArmClient).StopContext + + id, err := parseAzureResourceID(d.Id()) + if err != nil { + return err + } + resourceGroup := id.ResourceGroup + serviceName := id.Path["service"] + name := id.Path["groups"] + + resp, err := client.Get(ctx, resourceGroup, serviceName, name) + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + log.Printf("[DEBUG] Group %q (Resource Group %q / API Management Service %q) was not found - removing from state!", name, resourceGroup, serviceName) + d.SetId("") + return nil + } + + return fmt.Errorf("Error making Read request for Group %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err) + } + + d.Set("name", resp.Name) + d.Set("resource_group_name", resourceGroup) + d.Set("api_management_name", serviceName) + + if properties := resp.GroupContractProperties; properties != nil { + d.Set("display_name", properties.DisplayName) + d.Set("description", properties.Description) + d.Set("external_id", properties.ExternalID) + d.Set("type", string(properties.Type)) + } + + return nil +} + +func resourceArmApiManagementGroupDelete(d *schema.ResourceData, meta interface{}) error { + client := meta.(*ArmClient).apiManagementGroupClient + ctx := meta.(*ArmClient).StopContext + + id, err := parseAzureResourceID(d.Id()) + if err != nil { + return err + } + resourceGroup := id.ResourceGroup + serviceName := id.Path["service"] + name := id.Path["groups"] + + if resp, err := client.Delete(ctx, resourceGroup, serviceName, name, ""); err != nil { + if !utils.ResponseWasNotFound(resp) { + return fmt.Errorf("Error deleting Group %q (Resource Group %q / API Management Service %q): %+v", name, resourceGroup, serviceName, err) + } + } + + return nil +} diff --git a/azurerm/resource_arm_api_management_group_test.go b/azurerm/resource_arm_api_management_group_test.go new file mode 100644 index 000000000000..fa48a8b5e061 --- /dev/null +++ b/azurerm/resource_arm_api_management_group_test.go @@ -0,0 +1,218 @@ +package azurerm + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" +) + +func TestAccAzureRMAPIManagementGroup_basic(t *testing.T) { + resourceName := "azurerm_api_management_group.test" + ri := tf.AccRandTimeInt() + config := testAccAzureRMAPIManagementGroup_basic(ri, testLocation()) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMAPIManagementGroupDestroy, + Steps: []resource.TestStep{ + { + Config: config, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAPIManagementGroupExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "display_name", "Test Group"), + resource.TestCheckResourceAttr(resourceName, "type", "custom"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccAzureRMAPIManagementGroup_complete(t *testing.T) { + resourceName := "azurerm_api_management_group.test" + ri := tf.AccRandTimeInt() + config := testAccAzureRMAPIManagementGroup_complete(ri, testLocation(), "Test Group", "A test description.") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMAPIManagementGroupDestroy, + Steps: []resource.TestStep{ + { + Config: config, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAPIManagementGroupExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "display_name", "Test Group"), + resource.TestCheckResourceAttr(resourceName, "description", "A test description."), + resource.TestCheckResourceAttr(resourceName, "type", "external"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccAzureRMAPIManagementGroup_descriptionDisplayNameUpdate(t *testing.T) { + resourceName := "azurerm_api_management_group.test" + ri := tf.AccRandTimeInt() + preConfig := testAccAzureRMAPIManagementGroup_complete(ri, testLocation(), "Original Group", "The original description.") + postConfig := testAccAzureRMAPIManagementGroup_complete(ri, testLocation(), "Modified Group", "A modified description.") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMAPIManagementGroupDestroy, + Steps: []resource.TestStep{ + { + Config: preConfig, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAPIManagementGroupExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "display_name", "Original Group"), + resource.TestCheckResourceAttr(resourceName, "description", "The original description."), + resource.TestCheckResourceAttr(resourceName, "type", "external"), + ), + }, + { + Config: postConfig, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAPIManagementGroupExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "display_name", "Modified Group"), + resource.TestCheckResourceAttr(resourceName, "description", "A modified description."), + resource.TestCheckResourceAttr(resourceName, "type", "external"), + ), + }, + { + Config: preConfig, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAPIManagementGroupExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "display_name", "Original Group"), + resource.TestCheckResourceAttr(resourceName, "description", "The original description."), + resource.TestCheckResourceAttr(resourceName, "type", "external"), + ), + }, + }, + }) +} + +func testCheckAzureRMAPIManagementGroupDestroy(s *terraform.State) error { + client := testAccProvider.Meta().(*ArmClient).apiManagementGroupClient + for _, rs := range s.RootModule().Resources { + if rs.Type != "azurerm_api_management_group" { + continue + } + + name := rs.Primary.Attributes["name"] + resourceGroup := rs.Primary.Attributes["resource_group_name"] + serviceName := rs.Primary.Attributes["api_management_name"] + + ctx := testAccProvider.Meta().(*ArmClient).StopContext + resp, err := client.Get(ctx, resourceGroup, serviceName, name) + + if err != nil { + if !utils.ResponseWasNotFound(resp.Response) { + return err + } + } + + return nil + } + return nil +} + +func testCheckAzureRMAPIManagementGroupExists(resourceName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return fmt.Errorf("Not found: %s", resourceName) + } + + name := rs.Primary.Attributes["name"] + resourceGroup := rs.Primary.Attributes["resource_group_name"] + serviceName := rs.Primary.Attributes["api_management_name"] + + client := testAccProvider.Meta().(*ArmClient).apiManagementGroupClient + ctx := testAccProvider.Meta().(*ArmClient).StopContext + resp, err := client.Get(ctx, resourceGroup, serviceName, name) + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + return fmt.Errorf("Bad: API Management Group %q (Resource Group %q / API Management Service %q) does not exist", name, resourceGroup, serviceName) + } + return fmt.Errorf("Bad: Get on apiManagementGroupClient: %+v", err) + } + + return nil + } +} + +func testAccAzureRMAPIManagementGroup_basic(rInt int, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_api_management" "test" { + name = "acctestAM-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + publisher_name = "pub1" + publisher_email = "pub1@email.com" + + sku { + name = "Developer" + capacity = 1 + } +} + +resource "azurerm_api_management_group" "test" { + name = "acctestAMGroup-%d" + resource_group_name = "${azurerm_resource_group.test.name}" + api_management_name = "${azurerm_api_management.test.name}" + display_name = "Test Group" +} +`, rInt, location, rInt, rInt) +} + +func testAccAzureRMAPIManagementGroup_complete(rInt int, location string, displayName, description string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_api_management" "test" { + name = "acctestAM-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + publisher_name = "pub1" + publisher_email = "pub1@email.com" + + sku { + name = "Developer" + capacity = 1 + } +} + +resource "azurerm_api_management_group" "test" { + name = "acctestAMGroup-%d" + resource_group_name = "${azurerm_resource_group.test.name}" + api_management_name = "${azurerm_api_management.test.name}" + display_name = "%s" + description = "%s" + type = "external" +} +`, rInt, location, rInt, rInt, displayName, description) +} diff --git a/azurerm/resource_arm_api_management_product.go b/azurerm/resource_arm_api_management_product.go index 109f7f7c97e2..19b6faecca67 100644 --- a/azurerm/resource_arm_api_management_product.go +++ b/azurerm/resource_arm_api_management_product.go @@ -23,7 +23,7 @@ func resourceArmApiManagementProduct() *schema.Resource { }, Schema: map[string]*schema.Schema{ - "product_id": azure.SchemaApiManagementProductName(), + "product_id": azure.SchemaApiManagementChildName(), "api_management_name": azure.SchemaApiManagementName(), diff --git a/website/azurerm.erb b/website/azurerm.erb index b8c7f680aef2..c96e5009e98f 100644 --- a/website/azurerm.erb +++ b/website/azurerm.erb @@ -62,6 +62,11 @@ > azurerm_api_management + + > + azurerm_api_management_group + + > azurerm_api_management_product @@ -317,15 +322,17 @@ > API Management Resources diff --git a/website/docs/d/api_management_group.html.markdown b/website/docs/d/api_management_group.html.markdown new file mode 100644 index 000000000000..032b61aef55e --- /dev/null +++ b/website/docs/d/api_management_group.html.markdown @@ -0,0 +1,45 @@ +--- +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_api_management_group" +sidebar_current: "docs-azurerm-datasource-api-management-group" +description: |- + Gets information about an existing API Management Group. +--- + +# Data Source: azurerm_api_management_group + +Use this data source to access information about an existing API Management Group. + +## Example Usage + +```hcl +data "azurerm_api_management_group" "test" { + name = "my-group" + api_management_name = "example-apim + resource_group_name = "search-service" +} + +output "group_type" { + value = "${data.azurerm_api_management_group.test.type}" +} +``` + +## Argument Reference + +* `api_management_name` - (Required) The Name of the API Management Service in which this Group exists. + +* `name` - (Required) The Name of the API Management Group. + +* `resource_group_name` - (Required) The Name of the Resource Group in which the API Management Service exists. + +## Attributes Reference + +* `id` - The ID of the API Management Group. + +* `display_name` - The display name of this API Management Group. + +* `description` - The description of this API Management Group. + +* `external_id` - The identifier of the external Group. + +* `type` - The type of this API Management Group, such as `custom` or `external`. \ No newline at end of file diff --git a/website/docs/r/api_management_group.html.markdown b/website/docs/r/api_management_group.html.markdown new file mode 100644 index 000000000000..571a6f5e8074 --- /dev/null +++ b/website/docs/r/api_management_group.html.markdown @@ -0,0 +1,75 @@ +--- +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_api_management_group" +sidebar_current: "docs-azurerm-resource-api-management-group" +description: |- + Manages an API Management Group. +--- + +# azurerm_api_management_group + +Manages an API Management Group. + + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West US" +} + +resource "azurerm_api_management" "example" { + name = "example-apim" + location = "${azurerm_resource_group.example.location}" + resource_group_name = "${azurerm_resource_group.example.name}" + publisher_name = "pub1" + publisher_email = "pub1@email.com" + + sku { + name = "Developer" + capacity = 1 + } +} + +resource "azurerm_api_management_group" "example" { + name = "example-apimg" + resource_group_name = "${azurerm_resource_group.example.name}" + api_management_name = "${azurerm_api_management.example.name}" + display_name = "Example Group" + description = "This is an example API management group." +} +``` + + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) The name of the API Management Group. Changing this forces a new resource to be created. + +* `resource_group_name` - (Required) The name of the Resource Group in which the API Management Group should exist. Changing this forces a new resource to be created. + +* `api_management_name` - (Required) The name of the [API Management Service](api_management.html) in which the API Management Group should exist. Changing this forces a new resource to be created. + +* `display_name` - (Required) The display name of this API Management Group. + +* `description` - (Optional) The description of this API Management Group. + +* `external_id` - (Optional) The identifier of the external Group. For example, an Azure Active Directory group `aad://.onmicrosoft.com/groups/`. + +* `type` - (Optional) The type of this API Management Group. Possible values are `custom` and `external`. Default is `custom`. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - The ID of the API Management Group. + +## Import + +API Management Groups can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_api_management_group.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example-resources/providers/Microsoft.ApiManagement/service/example-apim/groups/example-apimg +```