44package storage
55
66import (
7+ "context"
78 "fmt"
89 "log"
910 "time"
@@ -15,6 +16,7 @@ import (
1516 "github.com/hashicorp/go-azure-helpers/resourcemanager/tags"
1617 "github.com/hashicorp/go-azure-sdk/resource-manager/storagesync/2020-03-01/registeredserverresource"
1718 "github.com/hashicorp/go-azure-sdk/resource-manager/storagesync/2020-03-01/storagesyncservicesresource"
19+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1820 "github.com/hashicorp/terraform-provider-azurerm/helpers/tf"
1921 "github.com/hashicorp/terraform-provider-azurerm/internal/clients"
2022 "github.com/hashicorp/terraform-provider-azurerm/internal/services/storage/validate"
@@ -23,17 +25,22 @@ import (
2325 "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts"
2426)
2527
28+ const storageSyncResourceName = "azurerm_storage_sync"
29+
30+ //go:generate go run ../../tools/generator-tests resourceidentity -resource-name storage_sync -service-package-name storage -properties "name,resource_group_name" -known-values "subscription_id:data.Subscriptions.Primary"
31+
2632func resourceStorageSync () * pluginsdk.Resource {
2733 return & pluginsdk.Resource {
2834 Create : resourceStorageSyncCreate ,
2935 Read : resourceStorageSyncRead ,
3036 Update : resourceStorageSyncUpdate ,
3137 Delete : resourceStorageSyncDelete ,
3238
33- Importer : pluginsdk .ImporterValidatingResourceId (func (id string ) error {
34- _ , err := storagesyncservicesresource .ParseStorageSyncServiceID (id )
35- return err
36- }),
39+ Importer : pluginsdk .ImporterValidatingIdentity (& storagesyncservicesresource.StorageSyncServiceId {}),
40+
41+ Identity : & schema.ResourceIdentity {
42+ SchemaFunc : pluginsdk .GenerateIdentitySchema (& storagesyncservicesresource.StorageSyncServiceId {}),
43+ },
3744
3845 Timeouts : & pluginsdk.ResourceTimeout {
3946 Create : pluginsdk .DefaultTimeout (30 * time .Minute ),
@@ -91,7 +98,7 @@ func resourceStorageSyncCreate(d *pluginsdk.ResourceData, meta interface{}) erro
9198 }
9299 }
93100 if ! response .WasNotFound (existing .HttpResponse ) {
94- return tf .ImportAsExistsError ("azurerm_storage_sync" , id .ID ())
101+ return tf .ImportAsExistsError (storageSyncResourceName , id .ID ())
95102 }
96103
97104 parameters := storagesyncservicesresource.StorageSyncServiceCreateParameters {
@@ -107,6 +114,10 @@ func resourceStorageSyncCreate(d *pluginsdk.ResourceData, meta interface{}) erro
107114 }
108115
109116 d .SetId (id .ID ())
117+ if err = pluginsdk .SetResourceIdentityData (d , & id ); err != nil {
118+ return err
119+ }
120+
110121 return resourceStorageSyncRead (d , meta )
111122}
112123
@@ -130,41 +141,49 @@ func resourceStorageSyncRead(d *pluginsdk.ResourceData, meta interface{}) error
130141 }
131142 return fmt .Errorf ("retrieving %s: %+v" , * id , err )
132143 }
144+
145+ return resourceStorageSyncFlatten (ctx , d , id , resp .Model , registeredServerClient , true )
146+ }
147+
148+ func resourceStorageSyncFlatten (ctx context.Context , d * pluginsdk.ResourceData , id * storagesyncservicesresource.StorageSyncServiceId , model * storagesyncservicesresource.StorageSyncService , registeredServerClient * registeredserverresource.RegisteredServerResourceClient , includeRegisteredServers bool ) error {
133149 d .Set ("name" , id .StorageSyncServiceName )
134150 d .Set ("resource_group_name" , id .ResourceGroupName )
135- if model := resp .Model ; model != nil {
151+
152+ if model != nil {
136153 d .Set ("location" , location .Normalize (model .Location ))
137154
138155 if props := model .Properties ; props != nil {
139156 d .Set ("incoming_traffic_policy" , string (pointer .From (props .IncomingTrafficPolicy )))
140157 }
141158
142- if err = tags .FlattenAndSet (d , model .Tags ); err != nil {
159+ if err : = tags .FlattenAndSet (d , model .Tags ); err != nil {
143160 return fmt .Errorf ("setting `tags`: %+v" , err )
144161 }
145162 }
146163
147- storageSyncId := registeredserverresource .NewStorageSyncServiceID (id .SubscriptionId , id .ResourceGroupName , id .StorageSyncServiceName )
148- registeredServersResp , err := registeredServerClient .RegisteredServersListByStorageSyncService (ctx , storageSyncId )
149- if err != nil {
150- if ! response .WasNotFound (registeredServersResp .HttpResponse ) {
151- return fmt .Errorf ("retrieving registered servers for %s: %+v" , id , err )
164+ if includeRegisteredServers {
165+ storageSyncId := registeredserverresource .NewStorageSyncServiceID (id .SubscriptionId , id .ResourceGroupName , id .StorageSyncServiceName )
166+ registeredServersResp , err := registeredServerClient .RegisteredServersListByStorageSyncService (ctx , storageSyncId )
167+ if err != nil {
168+ if ! response .WasNotFound (registeredServersResp .HttpResponse ) {
169+ return fmt .Errorf ("retrieving registered servers for %s: %+v" , id , err )
170+ }
152171 }
153- }
154172
155- if model := registeredServersResp .Model ; model != nil && model .Value != nil {
156- registeredServers := make ([]interface {}, 0 )
157- for _ , registeredServer := range * model .Value {
158- if registeredServer .Id != nil {
159- registeredServers = append (registeredServers , * registeredServer .Id )
173+ if serverModel := registeredServersResp .Model ; serverModel != nil && serverModel .Value != nil {
174+ registeredServers := make ([]interface {}, 0 , len (* serverModel .Value ))
175+ for _ , registeredServer := range * serverModel .Value {
176+ if registeredServer .Id != nil {
177+ registeredServers = append (registeredServers , * registeredServer .Id )
178+ }
179+ }
180+ if err := d .Set ("registered_servers" , registeredServers ); err != nil {
181+ return fmt .Errorf ("setting `registered_servers`: %+v" , err )
160182 }
161- }
162- if err = d .Set ("registered_servers" , registeredServers ); err != nil {
163- return fmt .Errorf ("setting `registered_servers`: %+v" , err )
164183 }
165184 }
166185
167- return nil
186+ return pluginsdk . SetResourceIdentityData ( d , id )
168187}
169188
170189func resourceStorageSyncUpdate (d * pluginsdk.ResourceData , meta interface {}) error {
0 commit comments