Skip to content

Commit

Permalink
elastic ip release fix (#77)
Browse files Browse the repository at this point in the history
elastic ip release fix

Reviewed-by: Sergei Martynov
Reviewed-by: Artem Lifshits
  • Loading branch information
anton-sidelnikov authored Apr 15, 2024
1 parent 726240d commit 6db6f73
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 8 deletions.
14 changes: 14 additions & 0 deletions driver/compute.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/opentelekomcloud/docker-machine-opentelekomcloud/driver/ssh"
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/ecs/v1/cloudservers"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/networking/v1/eips"
)

func (d *Driver) initCompute() error {
Expand Down Expand Up @@ -172,6 +173,11 @@ func (d *Driver) deleteInstance() error {
if err != nil {
return fmt.Errorf("failed to get ECS security groups: %s", err)
}
elasticIP, err := d.client.GetServerEIP(d.InstanceID)
if err != nil {
return fmt.Errorf("failed to get ECS elastic ip: %s", err)
}

if err := d.client.DeleteInstance(d.InstanceID); err != nil {
return fmt.Errorf("failed to delete instance: %s", logHTTP500(err))
}
Expand All @@ -191,5 +197,13 @@ func (d *Driver) deleteInstance() error {
}
}
}
if d.ElasticIP.DriverManaged && elasticIP != "" {
if err := d.client.ReleaseEIP(eips.ListOpts{
PublicAddress: elasticIP,
}); err != nil {
return fmt.Errorf("failed to delete floating IP: %s", logHTTP500(err))
}
d.ElasticIP.Value = ""
}
return nil
}
16 changes: 8 additions & 8 deletions driver/opentelekomcloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,35 +213,35 @@ func (d *Driver) Stop() error {

// Remove the server
func (d *Driver) Remove() error {
var errs error
mErr := &multierror.Error{}
if err := d.Authenticate(); err != nil {
return err
}
if err := d.deleteInstance(); err != nil {
errs = multierror.Append(errs, err)
mErr = multierror.Append(mErr, err)
}
if d.KeyPairName.DriverManaged {
if err := d.client.DeleteKeyPair(d.KeyPairName.Value); err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to delete key pair: %s", logHTTP500(err)))
mErr = multierror.Append(mErr, fmt.Errorf("failed to delete key pair: %s", logHTTP500(err)))
}
}
if d.ElasticIP.DriverManaged && d.ElasticIP.Value != "" {
if err := d.client.ReleaseEIP(eips.ListOpts{
PublicAddress: d.ElasticIP.Value,
}); err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to delete floating IP: %s", logHTTP500(err)))
mErr = multierror.Append(mErr, fmt.Errorf("failed to delete floating IP: %s", logHTTP500(err)))
}
}
if err := d.deleteSubnet(); err != nil {
errs = multierror.Append(errs, err)
mErr = multierror.Append(mErr, err)
}
if err := d.deleteSecGroups(); err != nil {
errs = multierror.Append(errs, err)
mErr = multierror.Append(mErr, err)
}
if err := d.deleteVPC(); err != nil {
errs = multierror.Append(errs, err)
mErr = multierror.Append(mErr, err)
}
return errs
return mErr.ErrorOrNil()
}

// Restart the server
Expand Down
18 changes: 18 additions & 0 deletions driver/services/compute.go
Original file line number Diff line number Diff line change
Expand Up @@ -481,3 +481,21 @@ func (c *Client) CreateServerGroup(opts *servergroups.CreateOpts) (*servergroups
func (c *Client) DeleteServerGroup(id string) error {
return servergroups.Delete(c.ComputeV2, id).Err
}

// GetServerEIP - get floating ip by instance ID
func (c *Client) GetServerEIP(id string) (string, error) {
server, err := servers.Get(c.ComputeV2, id).Extract()
if err != nil {
return "", err
}
floatingIp := ""
for _, ips := range server.Addresses {
for _, ip := range ips.([]interface{}) {
address := ip.(map[string]interface{})
if address["OS-EXT-IPS:type"] == "floating" {
floatingIp = address["addr"].(string)
}
}
}
return floatingIp, nil
}

0 comments on commit 6db6f73

Please sign in to comment.