Skip to content

Commit b115bea

Browse files
authored
Merge pull request #19 from roidelapluie/testacc
gitlab_project: wait until real deletion
2 parents 84888f8 + 4381a20 commit b115bea

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

gitlab/resource_gitlab_project.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package gitlab
33
import (
44
"fmt"
55
"log"
6+
"time"
67

8+
"github.com/hashicorp/terraform/helper/resource"
79
"github.com/hashicorp/terraform/helper/schema"
810
"github.com/hashicorp/terraform/helper/validation"
911
gitlab "github.com/xanzy/go-gitlab"
@@ -196,5 +198,36 @@ func resourceGitlabProjectDelete(d *schema.ResourceData, meta interface{}) error
196198
log.Printf("[DEBUG] Delete gitlab project %s", d.Id())
197199

198200
_, err := client.Projects.DeleteProject(d.Id())
199-
return err
201+
if err != nil {
202+
return err
203+
}
204+
205+
// Wait for the project to be deleted.
206+
// Deleting a project in gitlab is async.
207+
stateConf := &resource.StateChangeConf{
208+
Pending: []string{"Deleting"},
209+
Target: []string{"Deleted"},
210+
Refresh: func() (interface{}, string, error) {
211+
out, response, err := client.Projects.GetProject(d.Id())
212+
if err != nil {
213+
if response.StatusCode == 404 {
214+
return out, "Deleted", nil
215+
} else {
216+
log.Printf("[ERROR] Received error: %#v", err)
217+
return out, "Error", err
218+
}
219+
}
220+
return out, "Deleting", nil
221+
},
222+
223+
Timeout: 10 * time.Minute,
224+
MinTimeout: 3 * time.Second,
225+
Delay: 5 * time.Second,
226+
}
227+
228+
_, err = stateConf.WaitForState()
229+
if err != nil {
230+
return fmt.Errorf("error waiting for project (%s) to become deleted: %s", d.Id(), err)
231+
}
232+
return nil
200233
}

0 commit comments

Comments
 (0)