@@ -3,7 +3,9 @@ package gitlab
3
3
import (
4
4
"fmt"
5
5
"log"
6
+ "time"
6
7
8
+ "github.com/hashicorp/terraform/helper/resource"
7
9
"github.com/hashicorp/terraform/helper/schema"
8
10
"github.com/hashicorp/terraform/helper/validation"
9
11
gitlab "github.com/xanzy/go-gitlab"
@@ -167,5 +169,35 @@ func resourceGitlabGroupDelete(d *schema.ResourceData, meta interface{}) error {
167
169
log .Printf ("[DEBUG] Delete gitlab group %s" , d .Id ())
168
170
169
171
_ , err := client .Groups .DeleteGroup (d .Id ())
172
+ if err != nil {
173
+ return fmt .Errorf ("error deleting group %s: %s" , d .Id (), err )
174
+ }
175
+
176
+ // Wait for the group to be deleted.
177
+ // Deleting a group in gitlab is async.
178
+ stateConf := & resource.StateChangeConf {
179
+ Pending : []string {"Deleting" },
180
+ Target : []string {"Deleted" },
181
+ Refresh : func () (interface {}, string , error ) {
182
+ out , response , err := client .Groups .GetGroup (d .Id ())
183
+ if err != nil {
184
+ if response .StatusCode == 404 {
185
+ return out , "Deleted" , nil
186
+ }
187
+ log .Printf ("[ERROR] Received error: %#v" , err )
188
+ return out , "Error" , err
189
+ }
190
+ return out , "Deleting" , nil
191
+ },
192
+
193
+ Timeout : 10 * time .Minute ,
194
+ MinTimeout : 3 * time .Second ,
195
+ Delay : 5 * time .Second ,
196
+ }
197
+
198
+ _ , err = stateConf .WaitForState ()
199
+ if err != nil {
200
+ return fmt .Errorf ("error waiting for group (%s) to become deleted: %s" , d .Id (), err )
201
+ }
170
202
return err
171
203
}
0 commit comments