github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/azurerm/resource_arm_eventhub.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "log" 6 7 "net/http" 8 9 "github.com/Azure/azure-sdk-for-go/arm/eventhub" 10 "github.com/hashicorp/terraform/helper/schema" 11 ) 12 13 func resourceArmEventHub() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceArmEventHubCreate, 16 Read: resourceArmEventHubRead, 17 Update: resourceArmEventHubCreate, 18 Delete: resourceArmEventHubDelete, 19 Importer: &schema.ResourceImporter{ 20 State: schema.ImportStatePassthrough, 21 }, 22 23 Schema: map[string]*schema.Schema{ 24 "name": { 25 Type: schema.TypeString, 26 Required: true, 27 ForceNew: true, 28 }, 29 30 "namespace_name": { 31 Type: schema.TypeString, 32 Required: true, 33 ForceNew: true, 34 }, 35 36 "resource_group_name": { 37 Type: schema.TypeString, 38 Required: true, 39 ForceNew: true, 40 }, 41 42 "location": locationSchema(), 43 44 "partition_count": { 45 Type: schema.TypeInt, 46 Required: true, 47 ValidateFunc: validateEventHubPartitionCount, 48 }, 49 50 "message_retention": { 51 Type: schema.TypeInt, 52 Required: true, 53 ValidateFunc: validateEventHubMessageRetentionCount, 54 }, 55 56 "partition_ids": { 57 Type: schema.TypeSet, 58 Elem: &schema.Schema{Type: schema.TypeString}, 59 Set: schema.HashString, 60 Computed: true, 61 }, 62 }, 63 } 64 } 65 66 func resourceArmEventHubCreate(d *schema.ResourceData, meta interface{}) error { 67 client := meta.(*ArmClient) 68 eventhubClient := client.eventHubClient 69 log.Printf("[INFO] preparing arguments for Azure ARM EventHub creation.") 70 71 name := d.Get("name").(string) 72 namespaceName := d.Get("namespace_name").(string) 73 location := d.Get("location").(string) 74 resGroup := d.Get("resource_group_name").(string) 75 partitionCount := int64(d.Get("partition_count").(int)) 76 messageRetention := int64(d.Get("message_retention").(int)) 77 78 parameters := eventhub.CreateOrUpdateParameters{ 79 Location: &location, 80 Properties: &eventhub.Properties{ 81 PartitionCount: &partitionCount, 82 MessageRetentionInDays: &messageRetention, 83 }, 84 } 85 86 _, err := eventhubClient.CreateOrUpdate(resGroup, namespaceName, name, parameters) 87 if err != nil { 88 return err 89 } 90 91 read, err := eventhubClient.Get(resGroup, namespaceName, name) 92 if err != nil { 93 return err 94 } 95 96 if read.ID == nil { 97 return fmt.Errorf("Cannot read EventHub %s (resource group %s) ID", name, resGroup) 98 } 99 100 d.SetId(*read.ID) 101 102 return resourceArmEventHubRead(d, meta) 103 } 104 105 func resourceArmEventHubRead(d *schema.ResourceData, meta interface{}) error { 106 eventhubClient := meta.(*ArmClient).eventHubClient 107 108 id, err := parseAzureResourceID(d.Id()) 109 if err != nil { 110 return err 111 } 112 resGroup := id.ResourceGroup 113 namespaceName := id.Path["namespaces"] 114 name := id.Path["eventhubs"] 115 116 resp, err := eventhubClient.Get(resGroup, namespaceName, name) 117 if err != nil { 118 return fmt.Errorf("Error making Read request on Azure EventHub %s: %s", name, err) 119 } 120 if resp.StatusCode == http.StatusNotFound { 121 d.SetId("") 122 return nil 123 } 124 125 d.Set("name", resp.Name) 126 d.Set("namespace_name", namespaceName) 127 d.Set("resource_group_name", resGroup) 128 d.Set("location", azureRMNormalizeLocation(*resp.Location)) 129 130 d.Set("partition_count", resp.Properties.PartitionCount) 131 d.Set("message_retention", resp.Properties.MessageRetentionInDays) 132 d.Set("partition_ids", resp.Properties.PartitionIds) 133 134 return nil 135 } 136 137 func resourceArmEventHubDelete(d *schema.ResourceData, meta interface{}) error { 138 eventhubClient := meta.(*ArmClient).eventHubClient 139 140 id, err := parseAzureResourceID(d.Id()) 141 if err != nil { 142 return err 143 } 144 resGroup := id.ResourceGroup 145 namespaceName := id.Path["namespaces"] 146 name := id.Path["eventhubs"] 147 148 resp, err := eventhubClient.Delete(resGroup, namespaceName, name) 149 150 if resp.StatusCode != http.StatusOK { 151 return fmt.Errorf("Error issuing Azure ARM delete request of EventHub'%s': %s", name, err) 152 } 153 154 return nil 155 } 156 157 func validateEventHubPartitionCount(v interface{}, k string) (ws []string, errors []error) { 158 value := v.(int) 159 160 if !(32 >= value && value >= 2) { 161 errors = append(errors, fmt.Errorf("EventHub Partition Count has to be between 2 and 32")) 162 } 163 return 164 } 165 166 func validateEventHubMessageRetentionCount(v interface{}, k string) (ws []string, errors []error) { 167 value := v.(int) 168 169 if !(7 >= value && value >= 1) { 170 errors = append(errors, fmt.Errorf("EventHub Retention Count has to be between 1 and 7")) 171 } 172 return 173 }