@@ -49,81 +49,52 @@ func resourceScalewayVolumeAttachmentCreate(d *schema.ResourceData, m interface{
49
49
return errVolumeAlreadyAttached
50
50
}
51
51
52
- serverID := d .Get ("server" ).(string )
53
-
54
- server , err := scaleway .GetServer (serverID )
55
- if err != nil {
56
- fmt .Printf ("Failed getting server: %q" , err )
57
- return err
58
- }
59
-
60
- var startServerAgain = false
61
- // volumes can only be modified when the server is powered off
62
- if server .State != "stopped" {
63
- startServerAgain = true
64
-
65
- if _ , err := scaleway .PostServerAction (server .Identifier , "poweroff" ); err != nil {
66
- return err
52
+ if err := withStoppedServer (scaleway , d .Get ("server" ).(string ), func (server * api.Server ) error {
53
+ volumes := make (map [string ]api.Volume )
54
+ for i , volume := range server .Volumes {
55
+ volumes [i ] = volume
67
56
}
68
- }
69
57
70
- if err := waitForServerShutdown (scaleway , server .Identifier ); err != nil {
71
- return err
72
- }
73
-
74
- volumes := make (map [string ]api.Volume )
75
- for i , volume := range server .Volumes {
76
- volumes [i ] = volume
77
- }
58
+ volumes [fmt .Sprintf ("%d" , len (volumes )+ 1 )] = * vol
78
59
79
- volumes [fmt .Sprintf ("%d" , len (volumes )+ 1 )] = * vol
80
-
81
- // the API request requires most volume attributes to be unset to succeed
82
- for k , v := range volumes {
83
- v .Size = 0
84
- v .CreationDate = ""
85
- v .Organization = ""
86
- v .ModificationDate = ""
87
- v .VolumeType = ""
88
- v .Server = nil
89
- v .ExportURI = ""
90
-
91
- volumes [k ] = v
92
- }
60
+ // the API request requires most volume attributes to be unset to succeed
61
+ for k , v := range volumes {
62
+ v .Size = 0
63
+ v .CreationDate = ""
64
+ v .Organization = ""
65
+ v .ModificationDate = ""
66
+ v .VolumeType = ""
67
+ v .Server = nil
68
+ v .ExportURI = ""
93
69
94
- if err := resource .Retry (serverWaitTimeout , func () * resource.RetryError {
95
- var req = api.ServerPatchDefinition {
96
- Volumes : & volumes ,
70
+ volumes [k ] = v
97
71
}
98
- err := scaleway .PatchServer (serverID , req )
99
72
100
- if err == nil {
101
- return nil
102
- }
73
+ return resource .Retry (serverWaitTimeout , func () * resource.RetryError {
74
+ var req = api.ServerPatchDefinition {
75
+ Volumes : & volumes ,
76
+ }
77
+ err := scaleway .PatchServer (server .Identifier , req )
103
78
104
- if serr , ok := err .(api.APIError ); ok {
105
- log .Printf ("[DEBUG] Error patching server: %q\n " , serr .APIMessage )
79
+ if err == nil {
80
+ return nil
81
+ }
82
+
83
+ if serr , ok := err .(api.APIError ); ok {
84
+ log .Printf ("[DEBUG] Error patching server: %q\n " , serr .APIMessage )
106
85
107
- if serr .StatusCode == 400 {
108
- return resource .RetryableError (fmt .Errorf ("Waiting for server update to succeed: %q" , serr .APIMessage ))
86
+ if serr .StatusCode == 400 {
87
+ return resource .RetryableError (fmt .Errorf ("Waiting for server update to succeed: %q" , serr .APIMessage ))
88
+ }
109
89
}
110
- }
111
90
112
- return resource .NonRetryableError (err )
91
+ return resource .NonRetryableError (err )
92
+ })
113
93
}); err != nil {
114
94
return err
115
95
}
116
96
117
- if startServerAgain {
118
- if _ , err := scaleway .PostServerAction (serverID , "poweron" ); err != nil {
119
- return err
120
- }
121
- if err := waitForServerStartup (scaleway , serverID ); err != nil {
122
- return err
123
- }
124
- }
125
-
126
- d .SetId (fmt .Sprintf ("scaleway-server:%s/volume/%s" , serverID , d .Get ("volume" ).(string )))
97
+ d .SetId (fmt .Sprintf ("scaleway-server:%s/volume/%s" , d .Get ("server" ).(string ), d .Get ("volume" ).(string )))
127
98
128
99
return resourceScalewayVolumeAttachmentRead (d , m )
129
100
}
@@ -175,78 +146,51 @@ func resourceScalewayVolumeAttachmentDelete(d *schema.ResourceData, m interface{
175
146
176
147
scaleway := m .(* Client ).scaleway
177
148
178
- var startServerAgain = false
179
-
180
- serverID := d .Get ("server" ).(string )
181
-
182
- server , err := scaleway .GetServer (serverID )
183
- if err != nil {
184
- return err
185
- }
186
-
187
- // volumes can only be modified when the server is powered off
188
- if server .State != "stopped" {
189
- startServerAgain = true
190
- if _ , err := scaleway .PostServerAction (server .Identifier , "poweroff" ); err != nil {
191
- return err
192
- }
193
- }
194
- if err := waitForServerShutdown (scaleway , server .Identifier ); err != nil {
195
- return err
196
- }
197
-
198
- volumes := make (map [string ]api.Volume )
199
- for _ , volume := range server .Volumes {
200
- if volume .Identifier != d .Get ("volume" ).(string ) {
201
- volumes [fmt .Sprintf ("%d" , len (volumes ))] = volume
149
+ if err := withStoppedServer (scaleway , d .Get ("server" ).(string ), func (server * api.Server ) error {
150
+ volumes := make (map [string ]api.Volume )
151
+ for _ , volume := range server .Volumes {
152
+ if volume .Identifier != d .Get ("volume" ).(string ) {
153
+ volumes [fmt .Sprintf ("%d" , len (volumes ))] = volume
154
+ }
202
155
}
203
- }
204
156
205
- // the API request requires most volume attributes to be unset to succeed
206
- for k , v := range volumes {
207
- v .Size = 0
208
- v .CreationDate = ""
209
- v .Organization = ""
210
- v .ModificationDate = ""
211
- v .VolumeType = ""
212
- v .Server = nil
213
- v .ExportURI = ""
214
-
215
- volumes [k ] = v
216
- }
157
+ // the API request requires most volume attributes to be unset to succeed
158
+ for k , v := range volumes {
159
+ v .Size = 0
160
+ v .CreationDate = ""
161
+ v .Organization = ""
162
+ v .ModificationDate = ""
163
+ v .VolumeType = ""
164
+ v .Server = nil
165
+ v .ExportURI = ""
217
166
218
- if err := resource .Retry (serverWaitTimeout , func () * resource.RetryError {
219
- var req = api.ServerPatchDefinition {
220
- Volumes : & volumes ,
167
+ volumes [k ] = v
221
168
}
222
- err := scaleway .PatchServer (serverID , req )
223
169
224
- if err == nil {
225
- return nil
226
- }
170
+ return resource .Retry (serverWaitTimeout , func () * resource.RetryError {
171
+ var req = api.ServerPatchDefinition {
172
+ Volumes : & volumes ,
173
+ }
174
+ err := scaleway .PatchServer (server .Identifier , req )
227
175
228
- if serr , ok := err .(api.APIError ); ok {
229
- log .Printf ("[DEBUG] Error patching server: %q\n " , serr .APIMessage )
176
+ if err == nil {
177
+ return nil
178
+ }
230
179
231
- if serr .StatusCode == 400 {
232
- return resource .RetryableError (fmt .Errorf ("Waiting for server update to succeed: %q" , serr .APIMessage ))
180
+ if serr , ok := err .(api.APIError ); ok {
181
+ log .Printf ("[DEBUG] Error patching server: %q\n " , serr .APIMessage )
182
+
183
+ if serr .StatusCode == 400 {
184
+ return resource .RetryableError (fmt .Errorf ("Waiting for server update to succeed: %q" , serr .APIMessage ))
185
+ }
233
186
}
234
- }
235
187
236
- return resource .NonRetryableError (err )
188
+ return resource .NonRetryableError (err )
189
+ })
237
190
}); err != nil {
238
191
return err
239
192
}
240
193
241
- if startServerAgain {
242
- if _ , err := scaleway .PostServerAction (serverID , "poweron" ); err != nil {
243
- return err
244
- }
245
- if err := waitForServerStartup (scaleway , serverID ); err != nil {
246
- return err
247
- }
248
- }
249
-
250
194
d .SetId ("" )
251
195
252
196
return nil
0 commit comments