本文整理汇总了Golang中github.com/juju/juju/state.IPAddress.Value方法的典型用法代码示例。如果您正苦于以下问题:Golang IPAddress.Value方法的具体用法?Golang IPAddress.Value怎么用?Golang IPAddress.Value使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/juju/juju/state.IPAddress
的用法示例。
在下文中一共展示了IPAddress.Value方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestPickNewAddressRace
func (s *SubnetSuite) TestPickNewAddressRace(c *gc.C) {
// represents 192.168.1.0
initialIP := uint32(3232235776)
var index int32 = -1
addresses := []uint32{initialIP, initialIP, initialIP + 1}
// the first two calls will get the same address (which simulates the
// inherent race condition in the code). The third call will get
// a new one. We should see two different addresses come out of the
// two calls: i.e. we will have detected the race condition and tried
// again.
mockPickAddress := func(_, _ uint32, _ map[uint32]bool) uint32 {
theIndex := atomic.AddInt32(&index, 1)
return addresses[theIndex]
}
s.PatchValue(&state.PickAddress, &mockPickAddress)
// 192.168.1.0 and 192.168.1.1 are the only valid addresses
subnet := s.addSubnetWithAllocatableIPHigh(c, "192.168.1.1")
waiter := sync.WaitGroup{}
waiter.Add(2)
var firstResult *state.IPAddress
var firstError error
var secondResult *state.IPAddress
var secondError error
go func() {
firstResult, firstError = subnet.PickNewAddress()
waiter.Done()
}()
go func() {
secondResult, secondError = subnet.PickNewAddress()
waiter.Done()
}()
waiter.Wait()
c.Assert(firstError, jc.ErrorIsNil)
c.Assert(secondError, jc.ErrorIsNil)
c.Assert(firstResult, gc.NotNil)
c.Assert(secondResult, gc.NotNil)
ipAddresses := []string{firstResult.Value(), secondResult.Value()}
sort.Strings(ipAddresses)
expected := []string{"192.168.1.0", "192.168.1.1"}
c.Assert(ipAddresses, jc.DeepEquals, expected)
}
示例2: assertAddress
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)
}
示例3: releaseIPAddress
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)
}
示例4: legacyPrepareOrGetContainerInterfaceInfo
//.........这里部分代码省略.........
continue
}
// The auth function (canAccess) checks that the machine is a
// top level machine (we filter those out next) or that the
// machine has the host as a parent.
container, err := p.getMachine(canAccess, tag)
if err != nil {
result.Results[i].Error = common.ServerError(err)
continue
} else if !container.IsContainer() {
err = errors.Errorf("cannot allocate address for %q: not a container", tag)
result.Results[i].Error = common.ServerError(err)
continue
} else if ciid, cerr := container.InstanceId(); provisionContainer == true && cerr == nil {
// Since we want to configure and create NICs on the
// container before it starts, it must also be not
// provisioned yet.
err = errors.Errorf("container %q already provisioned as %q", container, ciid)
result.Results[i].Error = common.ServerError(err)
continue
} else if cerr != nil && !errors.IsNotProvisioned(cerr) {
// Any other error needs to be reported.
result.Results[i].Error = common.ServerError(cerr)
continue
}
var macAddress string
var address *state.IPAddress
if provisionContainer {
// Allocate and set an address.
macAddress = generateMACAddress()
address, err = p.allocateAddress(environ, subnet, host, container, instId, macAddress)
if err != nil {
err = errors.Annotatef(err, "failed to allocate an address for %q", container)
result.Results[i].Error = common.ServerError(err)
continue
}
} else {
id := container.Id()
addresses, err := p.st.AllocatedIPAddresses(id)
if err != nil {
logger.Warningf("failed to get Id for container %q: %v", tag, err)
result.Results[i].Error = common.ServerError(err)
continue
}
// TODO(dooferlad): if we get more than 1 address back, we ignore everything after
// the first. The calling function expects exactly one result though,
// so we don't appear to have a way of allocating >1 address to a
// container...
if len(addresses) != 1 {
logger.Warningf("got %d addresses for container %q - expected 1: %v", len(addresses), tag, err)
result.Results[i].Error = common.ServerError(err)
continue
}
address = addresses[0]
macAddress = address.MACAddress()
}
// Store it on the machine, construct and set an interface result.
dnsServers := make([]string, len(interfaceInfo.DNSServers))
for l, dns := range interfaceInfo.DNSServers {
dnsServers[l] = dns.Value
}
if macAddress == "" {
macAddress = interfaceInfo.MACAddress
}
interfaceType := string(interfaceInfo.InterfaceType)
if interfaceType == "" {
interfaceType = string(network.EthernetInterface)
}
// TODO(dimitern): Support allocating one address per NIC on
// the host, effectively creating the same number of NICs in
// the container.
result.Results[i] = params.MachineNetworkConfigResult{
Config: []params.NetworkConfig{{
DeviceIndex: interfaceInfo.DeviceIndex,
MACAddress: macAddress,
CIDR: subnetInfo.CIDR,
NetworkName: interfaceInfo.NetworkName,
ProviderId: string(interfaceInfo.ProviderId),
ProviderSubnetId: string(subnetInfo.ProviderId),
VLANTag: interfaceInfo.VLANTag,
InterfaceType: interfaceType,
InterfaceName: interfaceInfo.InterfaceName,
Disabled: interfaceInfo.Disabled,
NoAutoStart: interfaceInfo.NoAutoStart,
DNSServers: dnsServers,
ConfigType: string(network.ConfigStatic),
Address: address.Value(),
GatewayAddress: interfaceInfo.GatewayAddress.Value,
ExtraConfig: interfaceInfo.ExtraConfig,
}},
}
}
return result, nil
}