Skip to content

Commit 4381a20

Browse files
author
Julien Pivotto
committed
gitlab_project: wait until real deletion
Deleting a project in Gitlab is an async method. By blocking until the project does not exist anymore, we do not lie to the terraform end user about the status of a deleted project. As a side effet it fixes the acceptances tests. Signed-off-by: Julien Pivotto <[email protected]>
1 parent c13fcd7 commit 4381a20

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)