Skip to content

Commit 45ef5bf

Browse files
author
Julien Pivotto
committed
Add state change in gitlab groups
Signed-off-by: Julien Pivotto <[email protected]>
1 parent 08f2e58 commit 45ef5bf

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

gitlab/resource_gitlab_group.go

Lines changed: 32 additions & 0 deletions
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"
@@ -167,5 +169,35 @@ func resourceGitlabGroupDelete(d *schema.ResourceData, meta interface{}) error {
167169
log.Printf("[DEBUG] Delete gitlab group %s", d.Id())
168170

169171
_, 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+
}
170202
return err
171203
}

0 commit comments

Comments
 (0)