Skip to content

Commit e455bf6

Browse files
committed
Allow compartments to destroy and be 'recreated' cleanly. It's weird that compartments can't be destroyed, so we do a little dance to avoid errors caused on deletion and re-creation
1 parent abdfc67 commit e455bf6

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

identity/compartment_resource.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,8 @@ func updateCompartment(d *schema.ResourceData, m interface{}) (e error) {
4646
}
4747

4848
func deleteCompartment(d *schema.ResourceData, m interface{}) (e error) {
49+
sync := &CompartmentResourceCrud{}
50+
sync.D = d
51+
return crud.DeleteResource(sync)
4952
return fmt.Errorf("compartment resource: compartment %v cannot be deleted", d.Id())
5053
}

identity/compartment_resource_crud.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package identity
55
import (
66
"github.com/MustWin/baremetal-sdk-go"
77
"github.com/MustWin/terraform-Oracle-BareMetal-Provider/crud"
8+
"strings"
89
)
910

1011
type CompartmentResourceCrud struct {
@@ -33,6 +34,21 @@ func (s *CompartmentResourceCrud) Create() (e error) {
3334
name := s.D.Get("name").(string)
3435
description := s.D.Get("description").(string)
3536
s.Res, e = s.Client.CreateCompartment(name, description, nil)
37+
// Compartments can't be destroyed, so we shouldn't complain about them being created.
38+
if e != nil && strings.Contains(e.Error(), "already exists") {
39+
e = nil
40+
list, err := s.Client.ListCompartments(nil) // TODO: This won't paginate...
41+
if err != nil {
42+
e = err
43+
return
44+
}
45+
for _, compartment := range list.Compartments {
46+
if compartment.Name == name {
47+
s.Res = &compartment
48+
break
49+
}
50+
}
51+
}
3652
return
3753
}
3854

@@ -50,6 +66,12 @@ func (s *CompartmentResourceCrud) Update() (e error) {
5066
return
5167
}
5268

69+
func (s *CompartmentResourceCrud) Delete() (e error) {
70+
// Compartments cannot be deleted. Just pretend it worked.
71+
e = nil
72+
return
73+
}
74+
5375
func (s *CompartmentResourceCrud) SetData() {
5476
s.D.Set("name", s.Res.Name)
5577
s.D.Set("description", s.Res.Description)

0 commit comments

Comments
 (0)