func releaseExternalIP(svc *ec2.EC2, instanceid string) error { keyname := "instance-id" filter := ec2.Filter{ Name: &keyname, Values: []*string{&instanceid}} filters := []*ec2.Filter{ &filter, } dai := &ec2.DescribeAddressesInput{Filters: filters} dao, err := svc.DescribeAddresses(dai) if err != nil { return err } for i := range dao.Addresses { //fmt.Println("Address ",dao.Addresses[i]) dai := &ec2.DisassociateAddressInput{AssociationId: dao.Addresses[i].AssociationId} _, err := svc.DisassociateAddress(dai) //fmt.Println(daio) if err != nil { return err } rai := &ec2.ReleaseAddressInput{AllocationId: dao.Addresses[i].AllocationId} _, err = svc.ReleaseAddress(rai) //fmt.Println(rao) if err != nil { return err } } return nil }
func GetNotAssociateEIP(cli *ec2.EC2) (*ec2.Address, error) { params := &ec2.DescribeAddressesInput{} resp, err := cli.DescribeAddresses(params) if err != nil { return nil, err } if len(resp.Addresses) >= 1 { for _, address := range resp.Addresses { if address.InstanceId == nil { return address, nil } } } return nil, nil }
func GetEIPFromInstance(cli *ec2.EC2, instanceId string) (*ec2.Address, error) { params := &ec2.DescribeAddressesInput{ Filters: []*ec2.Filter{ &ec2.Filter{ Name: aws.String("instance-id"), Values: []*string{ aws.String(instanceId), }, }, }, } resp, err := cli.DescribeAddresses(params) if err != nil { return nil, err } if len(resp.Addresses) != 1 { return nil, errors.New("this instance has not EIP.") } address := resp.Addresses[0] return address, nil }