@@ -28,6 +28,10 @@ import (
2828 "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts"
2929)
3030
31+ //go:generate go run ../../tools/generator-tests resourceidentity -resource-name web_pubsub -service-package-name signalr -properties "name,resource_group_name"
32+
33+ const webPubSubResourceType = "azurerm_web_pubsub"
34+
3135func resourceWebPubSub () * pluginsdk.Resource {
3236 return & pluginsdk.Resource {
3337 Create : resourceWebPubSubCreateUpdate ,
@@ -47,10 +51,11 @@ func resourceWebPubSub() *pluginsdk.Resource {
4751 }),
4852 SchemaVersion : 1 ,
4953
50- Importer : pluginsdk .ImporterValidatingResourceId (func (id string ) error {
51- _ , err := webpubsub .ParseWebPubSubID (id )
52- return err
53- }),
54+ Importer : pluginsdk .ImporterValidatingIdentity (& webpubsub.WebPubSubId {}),
55+
56+ Identity : & schema.ResourceIdentity {
57+ SchemaFunc : pluginsdk .GenerateIdentitySchema (& webpubsub.WebPubSubId {}),
58+ },
5459
5560 Schema : map [string ]* pluginsdk.Schema {
5661 "name" : {
@@ -219,7 +224,7 @@ func resourceWebPubSubCreateUpdate(d *pluginsdk.ResourceData, meta interface{})
219224 }
220225 }
221226 if ! response .WasNotFound (existing .HttpResponse ) {
222- return tf .ImportAsExistsError ("azurerm_web_pubsub" , id .ID ())
227+ return tf .ImportAsExistsError (webPubSubResourceType , id .ID ())
223228 }
224229 }
225230
@@ -279,6 +284,10 @@ func resourceWebPubSubCreateUpdate(d *pluginsdk.ResourceData, meta interface{})
279284 }
280285
281286 d .SetId (id .ID ())
287+ if err := pluginsdk .SetResourceIdentityData (d , & id ); err != nil {
288+ return err
289+ }
290+
282291 return resourceWebPubSubRead (d , meta )
283292}
284293
@@ -307,78 +316,7 @@ func resourceWebPubSubRead(d *pluginsdk.ResourceData, meta interface{}) error {
307316 return fmt .Errorf ("listing keys for %s: %+v" , * id , err )
308317 }
309318
310- d .Set ("name" , id .WebPubSubName )
311- d .Set ("resource_group_name" , id .ResourceGroupName )
312-
313- if model := resp .Model ; model != nil {
314- d .Set ("location" , location .Normalize (model .Location ))
315-
316- skuName := ""
317- skuCapacity := int64 (0 )
318- if model .Sku != nil {
319- skuName = model .Sku .Name
320- skuCapacity = * model .Sku .Capacity
321- }
322- d .Set ("sku" , skuName )
323- d .Set ("capacity" , skuCapacity )
324-
325- if props := model .Properties ; props != nil {
326- d .Set ("external_ip" , props .ExternalIP )
327- d .Set ("hostname" , props .HostName )
328- d .Set ("public_port" , props .PublicPort )
329- d .Set ("server_port" , props .ServerPort )
330- d .Set ("version" , props .Version )
331-
332- aadAuthEnabled := true
333- if props .DisableAadAuth != nil {
334- aadAuthEnabled = ! (* props .DisableAadAuth )
335- }
336- d .Set ("aad_auth_enabled" , aadAuthEnabled )
337-
338- disableLocalAuth := false
339- if props .DisableLocalAuth != nil {
340- disableLocalAuth = ! (* props .DisableLocalAuth )
341- }
342- d .Set ("local_auth_enabled" , disableLocalAuth )
343-
344- publicNetworkAccessEnabled := true
345- if props .PublicNetworkAccess != nil {
346- publicNetworkAccessEnabled = strings .EqualFold (* props .PublicNetworkAccess , "Enabled" )
347- }
348- d .Set ("public_network_access_enabled" , publicNetworkAccessEnabled )
349-
350- tlsClientCertEnabled := false
351- if props .Tls != nil && props .Tls .ClientCertEnabled != nil {
352- tlsClientCertEnabled = * props .Tls .ClientCertEnabled
353- }
354- d .Set ("tls_client_cert_enabled" , tlsClientCertEnabled )
355-
356- if err := d .Set ("live_trace" , flattenLiveTraceConfig (props .LiveTraceConfiguration )); err != nil {
357- return fmt .Errorf ("setting `live_trace`:%+v" , err )
358- }
359-
360- identity , err := identity .FlattenSystemOrUserAssignedMap (model .Identity )
361- if err != nil {
362- return fmt .Errorf ("flattening `identity`: %+v" , err )
363- }
364- if err := d .Set ("identity" , identity ); err != nil {
365- return fmt .Errorf ("setting `identity`: %+v" , err )
366- }
367-
368- if err := tags .FlattenAndSet (d , model .Tags ); err != nil {
369- return fmt .Errorf ("setting `tags`: %+v" , err )
370- }
371- }
372- }
373-
374- if model := keys .Model ; model != nil {
375- d .Set ("primary_access_key" , model .PrimaryKey )
376- d .Set ("primary_connection_string" , model .PrimaryConnectionString )
377- d .Set ("secondary_access_key" , model .SecondaryKey )
378- d .Set ("secondary_connection_string" , model .SecondaryConnectionString )
379- }
380-
381- return nil
319+ return resourceWebPubSubFlatten (d , id , resp .Model , keys .Model )
382320}
383321
384322func resourceWebPubSubDelete (d * pluginsdk.ResourceData , meta interface {}) error {
@@ -515,3 +453,78 @@ func webPubsubProvisioningStateRefreshFunc(ctx context.Context, client *webpubsu
515453 return res , provisioningState , nil
516454 }
517455}
456+
457+ func resourceWebPubSubFlatten (d * pluginsdk.ResourceData , id * webpubsub.WebPubSubId , model * webpubsub.WebPubSubResource , keyModel * webpubsub.WebPubSubKeys ) error {
458+ d .Set ("name" , id .WebPubSubName )
459+ d .Set ("resource_group_name" , id .ResourceGroupName )
460+
461+ if model != nil {
462+ d .Set ("location" , location .Normalize (model .Location ))
463+
464+ skuName := ""
465+ skuCapacity := int64 (0 )
466+ if model .Sku != nil {
467+ skuName = model .Sku .Name
468+ skuCapacity = * model .Sku .Capacity
469+ }
470+ d .Set ("sku" , skuName )
471+ d .Set ("capacity" , skuCapacity )
472+
473+ if props := model .Properties ; props != nil {
474+ d .Set ("external_ip" , props .ExternalIP )
475+ d .Set ("hostname" , props .HostName )
476+ d .Set ("public_port" , props .PublicPort )
477+ d .Set ("server_port" , props .ServerPort )
478+ d .Set ("version" , props .Version )
479+
480+ aadAuthEnabled := true
481+ if props .DisableAadAuth != nil {
482+ aadAuthEnabled = ! (* props .DisableAadAuth )
483+ }
484+ d .Set ("aad_auth_enabled" , aadAuthEnabled )
485+
486+ disableLocalAuth := false
487+ if props .DisableLocalAuth != nil {
488+ disableLocalAuth = ! (* props .DisableLocalAuth )
489+ }
490+ d .Set ("local_auth_enabled" , disableLocalAuth )
491+
492+ publicNetworkAccessEnabled := true
493+ if props .PublicNetworkAccess != nil {
494+ publicNetworkAccessEnabled = strings .EqualFold (* props .PublicNetworkAccess , "Enabled" )
495+ }
496+ d .Set ("public_network_access_enabled" , publicNetworkAccessEnabled )
497+
498+ tlsClientCertEnabled := false
499+ if props .Tls != nil && props .Tls .ClientCertEnabled != nil {
500+ tlsClientCertEnabled = * props .Tls .ClientCertEnabled
501+ }
502+ d .Set ("tls_client_cert_enabled" , tlsClientCertEnabled )
503+
504+ if err := d .Set ("live_trace" , flattenLiveTraceConfig (props .LiveTraceConfiguration )); err != nil {
505+ return fmt .Errorf ("setting `live_trace`:%+v" , err )
506+ }
507+
508+ identityValue , err := identity .FlattenSystemOrUserAssignedMap (model .Identity )
509+ if err != nil {
510+ return fmt .Errorf ("flattening `identity`: %+v" , err )
511+ }
512+ if err := d .Set ("identity" , identityValue ); err != nil {
513+ return fmt .Errorf ("setting `identity`: %+v" , err )
514+ }
515+
516+ if err := tags .FlattenAndSet (d , model .Tags ); err != nil {
517+ return fmt .Errorf ("setting `tags`: %+v" , err )
518+ }
519+ }
520+ }
521+
522+ if keyModel != nil {
523+ d .Set ("primary_access_key" , keyModel .PrimaryKey )
524+ d .Set ("primary_connection_string" , keyModel .PrimaryConnectionString )
525+ d .Set ("secondary_access_key" , keyModel .SecondaryKey )
526+ d .Set ("secondary_connection_string" , keyModel .SecondaryConnectionString )
527+ }
528+
529+ return pluginsdk .SetResourceIdentityData (d , id )
530+ }
0 commit comments