func (a *addresserHandler) releaseIPAddress(addr *state.IPAddress) (err error) { defer errors.DeferredAnnotatef(&err, "failed to release address %v", addr.Value()) logger.Debugf("attempting to release dead address %#v", addr.Value()) subnetId := network.Id(addr.SubnetId()) for attempt := common.ShortAttempt.Start(); attempt.Next(); { err = a.releaser.ReleaseAddress(addr.InstanceId(), subnetId, addr.Address(), addr.MACAddress()) if err == nil { return nil } } // Don't remove the address from state so we // can retry releasing the address later. logger.Warningf("cannot release address %q: %v (will retry)", addr.Value(), err) return errors.Trace(err) }
func (s *IPAddressSuite) assertAddress( c *gc.C, ipAddr *state.IPAddress, addr network.Address, ipState state.AddressState, machineId, ifaceId, subnetId string, ) { c.Assert(ipAddr, gc.NotNil) c.Assert(ipAddr.MachineId(), gc.Equals, machineId) c.Assert(ipAddr.InterfaceId(), gc.Equals, ifaceId) c.Assert(ipAddr.SubnetId(), gc.Equals, subnetId) c.Assert(ipAddr.Value(), gc.Equals, addr.Value) c.Assert(ipAddr.Type(), gc.Equals, addr.Type) c.Assert(ipAddr.Scope(), gc.Equals, addr.Scope) c.Assert(ipAddr.State(), gc.Equals, ipState) c.Assert(ipAddr.Address(), jc.DeepEquals, addr) c.Assert(ipAddr.String(), gc.Equals, addr.String()) c.Assert(ipAddr.Id(), gc.Equals, s.State.EnvironUUID()+":"+addr.Value) c.Assert(ipAddr.InstanceId(), gc.Equals, instance.UnknownId) }