Skip to content

Commit

Permalink
Scaffolding Consumer Groups
Browse files Browse the repository at this point in the history
  • Loading branch information
tombuildsstuff committed Nov 7, 2016
1 parent ecec784 commit 9470ece
Show file tree
Hide file tree
Showing 5 changed files with 377 additions and 2 deletions.
7 changes: 7 additions & 0 deletions builtin/providers/azurerm/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ type ArmClient struct {
cdnEndpointsClient cdn.EndpointsClient

eventHubClient eventhub.EventHubsClient
eventHubConsumerGroupClient eventhub.ConsumerGroupsClient
eventHubNamespacesClient eventhub.NamespacesClient

providers resources.ProvidersClient
Expand Down Expand Up @@ -220,6 +221,12 @@ func (c *Config) getArmClient() (*ArmClient, error) {
ehc.Sender = autorest.CreateSender(withRequestLogging())
client.eventHubClient = ehc

chcgc := eventhub.NewConsumerGroupsClient(c.SubscriptionID)
setUserAgent(&chcgc.Client)
chcgc.Authorizer = spt
chcgc.Sender = autorest.CreateSender(withRequestLogging())
client.eventHubConsumerGroupClient = chcgc

ehnc := eventhub.NewNamespacesClient(c.SubscriptionID)
setUserAgent(&ehnc.Client)
ehnc.Authorizer = spt
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package azurerm

import (
"testing"

"fmt"

"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
)

func TestAccAzureRMEventHubConsumerGroup_importBasic(t *testing.T) {
resourceName := "azurerm_eventhub_consumer_group.test"

ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMEventHubConsumerGroup_basic, ri, ri)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMEventHubConsumerGroupDestroy,
Steps: []resource.TestStep{
{
Config: config,
},

{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
}
5 changes: 3 additions & 2 deletions builtin/providers/azurerm/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,9 @@ func Provider() terraform.ResourceProvider {
"azurerm_cdn_endpoint": resourceArmCdnEndpoint(),
"azurerm_cdn_profile": resourceArmCdnProfile(),

"azurerm_eventhub": resourceArmEventHub(),
"azurerm_eventhub_namespace": resourceArmEventHubNamespace(),
"azurerm_eventhub": resourceArmEventHub(),
"azurerm_eventhub_consumer_group": resourceArmEventHubConsumerGroup(),
"azurerm_eventhub_namespace": resourceArmEventHubNamespace(),

"azurerm_lb": resourceArmLoadBalancer(),
"azurerm_lb_backend_address_pool": resourceArmLoadBalancerBackendAddressPool(),
Expand Down
158 changes: 158 additions & 0 deletions builtin/providers/azurerm/resource_arm_eventhub_consumer_group.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
package azurerm

import (
"fmt"
"log"

"net/http"

"github.com/Azure/azure-sdk-for-go/arm/eventhub"
"github.com/hashicorp/terraform/helper/schema"
)

func resourceArmEventHubConsumerGroup() *schema.Resource {
return &schema.Resource{
Create: resourceArmEventHubConsumerGroupCreate,
Read: resourceArmEventHubConsumerGroupRead,
Update: resourceArmEventHubConsumerGroupCreate,
Delete: resourceArmEventHubConsumerGroupDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"namespace_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"eventhub_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"resource_group_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"location": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"eventhub_path": {
Type: schema.TypeString,
Required: true,
},

"user_metadata": {
Type: schema.TypeString,
},
},
}
}

func resourceArmEventHubConsumerGroupCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ArmClient)
eventhubClient := client.eventHubConsumerGroupClient
log.Printf("[INFO] preparing arguments for Azure ARM EventHub Consumer Group creation.")

name := d.Get("name").(string)
namespaceName := d.Get("namespace_name").(string)
eventHubName := d.Get("eventhub_name").(string)
location := d.Get("location").(string)
resGroup := d.Get("resource_group_name").(string)
eventHubPath := d.Get("eventhub_path").(string)
userMetaData := d.Get("user_metadata").(string)

parameters := eventhub.ConsumerGroupCreateOrUpdateParameters{
Location: &location,
Properties: &eventhub.ConsumerGroupProperties{
EventHubPath: &eventHubPath,
UserMetadata: &userMetaData,
},
}

_, err := eventhubClient.CreateOrUpdate(resGroup, namespaceName, eventHubName, name, parameters)
if err != nil {
return err
}

read, err := eventhubClient.Get(resGroup, namespaceName, eventHubName, name)
if err != nil {
return err
}

if read.ID == nil {
return fmt.Errorf("Cannot read EventHub Consumer Group %s (resource group %s) ID", name, resGroup)
}

d.SetId(*read.ID)

return resourceArmEventHubRead(d, meta)
}

func resourceArmEventHubConsumerGroupRead(d *schema.ResourceData, meta interface{}) error {
eventhubClient := meta.(*ArmClient).eventHubConsumerGroupClient

id, err := parseAzureResourceID(d.Id())
if err != nil {
return err
}
resGroup := id.ResourceGroup
namespaceName := id.Path["namespaces"]
eventHubName := id.Path["eventhubs"]
name := id.Path["consumergroups"]

resp, err := eventhubClient.Get(resGroup, namespaceName, eventHubName, name)
if err != nil {
return fmt.Errorf("Error making Read request on Azure EventHub Consumer Group %s: %s", name, err)
}
if resp.StatusCode == http.StatusNotFound {
d.SetId("")
return nil
}

d.Set("name", resp.Name)
d.Set("eventhub_name", eventHubName)
d.Set("namespace_name", namespaceName)
d.Set("resource_group_name", resGroup)
d.Set("location", azureRMNormalizeLocation(*resp.Location))

d.Set("eventhub_path", resp.Properties.EventHubPath)
d.Set("user_metadata", resp.Properties.UserMetadata)

return nil
}

func resourceArmEventHubConsumerGroupDelete(d *schema.ResourceData, meta interface{}) error {
eventhubClient := meta.(*ArmClient).eventHubConsumerGroupClient

id, err := parseAzureResourceID(d.Id())
if err != nil {
return err
}
resGroup := id.ResourceGroup
namespaceName := id.Path["namespaces"]
eventHubName := id.Path["eventhubs"]
name := id.Path["consumergroups"]

resp, err := eventhubClient.Delete(resGroup, namespaceName, eventHubName, name)

if resp.StatusCode != http.StatusOK {
return fmt.Errorf("Error issuing Azure ARM delete request of EventHub Consumer Group '%s': %s", name, err)
}

return nil
}
Loading

0 comments on commit 9470ece

Please sign in to comment.