-
Notifications
You must be signed in to change notification settings - Fork 12
/
unbind.go
61 lines (52 loc) · 1.93 KB
/
unbind.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package instance
import (
"fmt"
"github.com/huaweicloud/huaweicloud-service-broker/pkg/database"
"github.com/pivotal-cf/brokerapi"
)
// Unbind implematation
func (b *DMSBroker) Unbind(instanceID, bindingID string, details brokerapi.UnbindDetails) error {
// Log opts
b.Logger.Debug(fmt.Sprintf("unbind dms instance opts: instanceID: %s bindingID: %s", instanceID, bindingID))
// Check dms bind length in back database
var length int
err := database.BackDBConnection.
Model(&database.BindDetails{}).
Where("bind_id = ? and instance_id = ? and service_id = ? and plan_id = ?", bindingID, instanceID, details.ServiceID, details.PlanID).
Count(&length).Error
if err != nil {
return fmt.Errorf("check dms bind length in back database failed. Error: %s", err)
}
// ErrBindingDoesNotExist
if length == 0 {
return brokerapi.ErrBindingDoesNotExist
}
// Check dms instance length in back database
err = database.BackDBConnection.
Model(&database.InstanceDetails{}).
Where("instance_id = ? and service_id = ? and plan_id = ?", instanceID, details.ServiceID, details.PlanID).
Count(&length).Error
if err != nil {
return fmt.Errorf("check dms instance length in back database failed. Error: %s", err)
}
// ErrInstanceDoesNotExist
if length == 0 {
return brokerapi.ErrInstanceDoesNotExist
}
// Get BindDetails in back database
bds := database.BindDetails{}
err = database.BackDBConnection.
Where("bind_id = ? and instance_id = ? and service_id = ? and plan_id = ?", bindingID, instanceID, details.ServiceID, details.PlanID).
First(&bds).Error
if err != nil {
return brokerapi.ErrBindingDoesNotExist
}
// Delete BindDetails in back database
err = database.BackDBConnection.Delete(&bds).Error
if err != nil {
return fmt.Errorf("delete dms bind in back database failed. Error: %s", err)
}
// Log result
b.Logger.Debug(fmt.Sprintf("unbind dms instance success: instanceID: %s bindingID: %s", instanceID, bindingID))
return nil
}