Skip to content

Commit 475fd4d

Browse files
author
Peter McAtominey
committed
provider/azurerm: add servicebus_subscription resource
TF_ACC=1 go test ./builtin/providers/azurerm -v -run TestAccAzureRMServiceBusSubscription -timeout 120m === RUN TestAccAzureRMServiceBusSubscription_importBasic --- PASS: TestAccAzureRMServiceBusSubscription_importBasic (339.00s) === RUN TestAccAzureRMServiceBusSubscription_basic --- PASS: TestAccAzureRMServiceBusSubscription_basic (328.47s) === RUN TestAccAzureRMServiceBusSubscription_update --- PASS: TestAccAzureRMServiceBusSubscription_update (368.95s) === RUN TestAccAzureRMServiceBusSubscription_updateRequiresSession --- PASS: TestAccAzureRMServiceBusSubscription_updateRequiresSession (348.47s) PASS ok github.com/hashicorp/terraform/builtin/providers/azurerm 1384.966s
1 parent e9ed7bb commit 475fd4d

7 files changed

Lines changed: 602 additions & 2 deletions

File tree

builtin/providers/azurerm/config.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ type ArmClient struct {
6868
trafficManagerProfilesClient trafficmanager.ProfilesClient
6969
trafficManagerEndpointsClient trafficmanager.EndpointsClient
7070

71-
serviceBusNamespacesClient servicebus.NamespacesClient
72-
serviceBusTopicsClient servicebus.TopicsClient
71+
serviceBusNamespacesClient servicebus.NamespacesClient
72+
serviceBusTopicsClient servicebus.TopicsClient
73+
serviceBusSubscriptionsClient servicebus.SubscriptionsClient
7374
}
7475

7576
func withRequestLogging() autorest.SendDecorator {
@@ -359,6 +360,12 @@ func (c *Config) getArmClient() (*ArmClient, error) {
359360
sbtc.Sender = autorest.CreateSender(withRequestLogging())
360361
client.serviceBusTopicsClient = sbtc
361362

363+
sbsc := servicebus.NewSubscriptionsClient(c.SubscriptionID)
364+
setUserAgent(&sbsc.Client)
365+
sbsc.Authorizer = spt
366+
sbsc.Sender = autorest.CreateSender(withRequestLogging())
367+
client.serviceBusSubscriptionsClient = sbsc
368+
362369
return &client, nil
363370
}
364371

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package azurerm
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform/helper/acctest"
8+
"github.com/hashicorp/terraform/helper/resource"
9+
)
10+
11+
func TestAccAzureRMServiceBusSubscription_importBasic(t *testing.T) {
12+
resourceName := "azurerm_servicebus_subscription.test"
13+
14+
ri := acctest.RandInt()
15+
config := fmt.Sprintf(testAccAzureRMServiceBusSubscription_basic, ri, ri, ri, ri)
16+
17+
resource.Test(t, resource.TestCase{
18+
PreCheck: func() { testAccPreCheck(t) },
19+
Providers: testAccProviders,
20+
CheckDestroy: testCheckAzureRMServiceBusSubscriptionDestroy,
21+
Steps: []resource.TestStep{
22+
resource.TestStep{
23+
Config: config,
24+
},
25+
26+
resource.TestStep{
27+
ResourceName: resourceName,
28+
ImportState: true,
29+
ImportStateVerify: true,
30+
},
31+
},
32+
})
33+
}

builtin/providers/azurerm/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func Provider() terraform.ResourceProvider {
5757
"azurerm_route": resourceArmRoute(),
5858
"azurerm_route_table": resourceArmRouteTable(),
5959
"azurerm_servicebus_namespace": resourceArmServiceBusNamespace(),
60+
"azurerm_servicebus_subscription": resourceArmServiceBusSubscription(),
6061
"azurerm_servicebus_topic": resourceArmServiceBusTopic(),
6162
"azurerm_storage_account": resourceArmStorageAccount(),
6263
"azurerm_storage_blob": resourceArmStorageBlob(),
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
package azurerm
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/http"
7+
8+
"github.com/Azure/azure-sdk-for-go/arm/servicebus"
9+
"github.com/hashicorp/terraform/helper/schema"
10+
)
11+
12+
func resourceArmServiceBusSubscription() *schema.Resource {
13+
return &schema.Resource{
14+
Create: resourceArmServiceBusSubscriptionCreate,
15+
Read: resourceArmServiceBusSubscriptionRead,
16+
Update: resourceArmServiceBusSubscriptionCreate,
17+
Delete: resourceArmServiceBusSubscriptionDelete,
18+
Importer: &schema.ResourceImporter{
19+
State: schema.ImportStatePassthrough,
20+
},
21+
22+
Schema: map[string]*schema.Schema{
23+
"name": {
24+
Type: schema.TypeString,
25+
Required: true,
26+
ForceNew: true,
27+
},
28+
29+
"namespace_name": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
ForceNew: true,
33+
},
34+
35+
"topic_name": {
36+
Type: schema.TypeString,
37+
Required: true,
38+
ForceNew: true,
39+
},
40+
41+
"location": {
42+
Type: schema.TypeString,
43+
Required: true,
44+
ForceNew: true,
45+
StateFunc: azureRMNormalizeLocation,
46+
},
47+
48+
"resource_group_name": {
49+
Type: schema.TypeString,
50+
Required: true,
51+
ForceNew: true,
52+
},
53+
54+
"auto_delete_on_idle": {
55+
Type: schema.TypeString,
56+
Optional: true,
57+
Computed: true,
58+
},
59+
60+
"default_message_ttl": {
61+
Type: schema.TypeString,
62+
Optional: true,
63+
Computed: true,
64+
},
65+
66+
"lock_duration": {
67+
Type: schema.TypeString,
68+
Optional: true,
69+
Computed: true,
70+
},
71+
72+
"dead_lettering_on_filter_evaluation_exceptions": {
73+
Type: schema.TypeBool,
74+
Optional: true,
75+
},
76+
77+
"dead_lettering_on_message_expiration": {
78+
Type: schema.TypeBool,
79+
Optional: true,
80+
},
81+
82+
"enable_batched_operations": {
83+
Type: schema.TypeBool,
84+
Optional: true,
85+
},
86+
87+
"max_delivery_count": {
88+
Type: schema.TypeInt,
89+
Required: true,
90+
},
91+
92+
"requires_session": {
93+
Type: schema.TypeBool,
94+
Optional: true,
95+
// cannot be modified
96+
ForceNew: true,
97+
},
98+
},
99+
}
100+
}
101+
102+
func resourceArmServiceBusSubscriptionCreate(d *schema.ResourceData, meta interface{}) error {
103+
client := meta.(*ArmClient).serviceBusSubscriptionsClient
104+
log.Printf("[INFO] preparing arguments for Azure ARM ServiceBus Subscription creation.")
105+
106+
name := d.Get("name").(string)
107+
topicName := d.Get("topic_name").(string)
108+
namespaceName := d.Get("namespace_name").(string)
109+
location := d.Get("location").(string)
110+
resGroup := d.Get("resource_group_name").(string)
111+
112+
parameters := servicebus.SubscriptionCreateOrUpdateParameters{
113+
Location: &location,
114+
Properties: &servicebus.SubscriptionProperties{},
115+
}
116+
117+
if autoDeleteOnIdle := d.Get("auto_delete_on_idle").(string); autoDeleteOnIdle != "" {
118+
parameters.Properties.AutoDeleteOnIdle = &autoDeleteOnIdle
119+
}
120+
121+
if lockDuration := d.Get("lock_duration").(string); lockDuration != "" {
122+
parameters.Properties.LockDuration = &lockDuration
123+
}
124+
125+
deadLetteringFilterExceptions := d.Get("dead_lettering_on_filter_evaluation_exceptions").(bool)
126+
deadLetteringExpiration := d.Get("dead_lettering_on_message_expiration").(bool)
127+
enableBatchedOps := d.Get("enable_batched_operations").(bool)
128+
maxDeliveryCount := int32(d.Get("max_delivery_count").(int))
129+
requiresSession := d.Get("requires_session").(bool)
130+
131+
parameters.Properties.DeadLetteringOnFilterEvaluationExceptions = &deadLetteringFilterExceptions
132+
parameters.Properties.DeadLetteringOnMessageExpiration = &deadLetteringExpiration
133+
parameters.Properties.EnableBatchedOperations = &enableBatchedOps
134+
parameters.Properties.MaxDeliveryCount = &maxDeliveryCount
135+
parameters.Properties.RequiresSession = &requiresSession
136+
137+
_, err := client.CreateOrUpdate(resGroup, namespaceName, topicName, name, parameters)
138+
if err != nil {
139+
return err
140+
}
141+
142+
read, err := client.Get(resGroup, namespaceName, topicName, name)
143+
if err != nil {
144+
return err
145+
}
146+
if read.ID == nil {
147+
return fmt.Errorf("Cannot read ServiceBus Subscription %s (resource group %s) ID", name, resGroup)
148+
}
149+
150+
d.SetId(*read.ID)
151+
152+
return resourceArmServiceBusSubscriptionRead(d, meta)
153+
}
154+
155+
func resourceArmServiceBusSubscriptionRead(d *schema.ResourceData, meta interface{}) error {
156+
client := meta.(*ArmClient).serviceBusSubscriptionsClient
157+
158+
id, err := parseAzureResourceID(d.Id())
159+
if err != nil {
160+
return err
161+
}
162+
resGroup := id.ResourceGroup
163+
namespaceName := id.Path["namespaces"]
164+
topicName := id.Path["topics"]
165+
name := id.Path["subscriptions"]
166+
167+
log.Printf("[INFO] subscriptionID: %s, args: %s, %s, %s, %s", d.Id(), resGroup, namespaceName, topicName, name)
168+
169+
resp, err := client.Get(resGroup, namespaceName, topicName, name)
170+
if err != nil {
171+
return fmt.Errorf("Error making Read request on Azure ServiceBus Subscription %s: %s", name, err)
172+
}
173+
if resp.StatusCode == http.StatusNotFound {
174+
d.SetId("")
175+
return nil
176+
}
177+
178+
d.Set("name", resp.Name)
179+
d.Set("resource_group_name", resGroup)
180+
d.Set("namespace_name", namespaceName)
181+
d.Set("topic_name", topicName)
182+
d.Set("location", azureRMNormalizeLocation(*resp.Location))
183+
184+
props := resp.Properties
185+
d.Set("auto_delete_on_idle", props.AutoDeleteOnIdle)
186+
d.Set("default_message_ttl", props.DefaultMessageTimeToLive)
187+
d.Set("lock_duration", props.LockDuration)
188+
d.Set("dead_lettering_on_filter_evaluation_exceptions", props.DeadLetteringOnFilterEvaluationExceptions)
189+
d.Set("dead_lettering_on_message_expiration", props.DeadLetteringOnMessageExpiration)
190+
d.Set("enable_batched_operations", props.EnableBatchedOperations)
191+
d.Set("max_delivery_count", int(*props.MaxDeliveryCount))
192+
d.Set("requires_session", props.RequiresSession)
193+
194+
return nil
195+
}
196+
197+
func resourceArmServiceBusSubscriptionDelete(d *schema.ResourceData, meta interface{}) error {
198+
client := meta.(*ArmClient).serviceBusSubscriptionsClient
199+
200+
id, err := parseAzureResourceID(d.Id())
201+
if err != nil {
202+
return err
203+
}
204+
resGroup := id.ResourceGroup
205+
namespaceName := id.Path["namespaces"]
206+
topicName := id.Path["topics"]
207+
name := id.Path["subscriptions"]
208+
209+
_, err = client.Delete(resGroup, namespaceName, topicName, name)
210+
211+
return err
212+
}

0 commit comments

Comments
 (0)