1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

When assigning an address for an endpoint set preferred address and

options.

When requesting a gateway address send a gateway label in the options.

Signed-off-by: Ryan Belgrave <rmb1993@gmail.com>
This commit is contained in:
Ryan Belgrave 2015-12-03 22:20:42 -05:00 committed by root
parent 405a737a48
commit 44f532f16e
3 changed files with 17 additions and 2 deletions

View file

@ -60,6 +60,8 @@ type endpoint struct {
anonymous bool anonymous bool
generic map[string]interface{} generic map[string]interface{}
joinLeaveDone chan struct{} joinLeaveDone chan struct{}
prefAddress net.IP
ipamOptions map[string]string
dbIndex uint64 dbIndex uint64
dbExists bool dbExists bool
sync.Mutex sync.Mutex
@ -685,6 +687,14 @@ func EndpointOptionGeneric(generic map[string]interface{}) EndpointOption {
} }
} }
// CreateOptionIpam function returns an option setter for the ipam configuration for this endpoint
func CreateOptionIpam(prefAddress net.IP, ipamOptions map[string]string) EndpointOption {
return func(ep *endpoint) {
ep.prefAddress = prefAddress
ep.ipamOptions = ipamOptions
}
}
// CreateOptionExposedPorts function returns an option setter for the container exposed // CreateOptionExposedPorts function returns an option setter for the container exposed
// ports option to be passed to network.CreateEndpoint() method. // ports option to be passed to network.CreateEndpoint() method.
func CreateOptionExposedPorts(exposedPorts []types.TransportPort) EndpointOption { func CreateOptionExposedPorts(exposedPorts []types.TransportPort) EndpointOption {
@ -799,7 +809,7 @@ func (ep *endpoint) assignAddressVersion(ipVer int, ipam ipamapi.Ipam) error {
if *address != nil { if *address != nil {
prefIP = (*address).IP prefIP = (*address).IP
} }
addr, _, err := ipam.RequestAddress(d.PoolID, prefIP, nil) addr, _, err := ipam.RequestAddress(d.PoolID, prefIP, ep.ipamOptions)
if err == nil { if err == nil {
ep.Lock() ep.Lock()
*address = addr *address = addr

View file

@ -16,6 +16,8 @@ const (
DefaultIPAM = "default" DefaultIPAM = "default"
// PluginEndpointType represents the Endpoint Type used by Plugin system // PluginEndpointType represents the Endpoint Type used by Plugin system
PluginEndpointType = "IpamDriver" PluginEndpointType = "IpamDriver"
// RequestAddressType represents the Address Type used when requesting an address
RequestAddressType = "RequestAddressType"
) )
// Callback provides a Callback interface for registering an IPAM instance into LibNetwork // Callback provides a Callback interface for registering an IPAM instance into LibNetwork

View file

@ -971,7 +971,10 @@ func (n *network) ipamAllocateVersion(ipVer int, ipam ipamapi.Ipam) error {
// irrespective of whether ipam driver returned a gateway already. // irrespective of whether ipam driver returned a gateway already.
// If none of the above is true, libnetwork will allocate one. // If none of the above is true, libnetwork will allocate one.
if cfg.Gateway != "" || d.Gateway == nil { if cfg.Gateway != "" || d.Gateway == nil {
if d.Gateway, _, err = ipam.RequestAddress(d.PoolID, net.ParseIP(cfg.Gateway), nil); err != nil { var gatewayOpts = map[string]string{
ipamapi.RequestAddressType: netlabel.Gateway,
}
if d.Gateway, _, err = ipam.RequestAddress(d.PoolID, net.ParseIP(cfg.Gateway), gatewayOpts); err != nil {
return types.InternalErrorf("failed to allocate gateway (%v): %v", cfg.Gateway, err) return types.InternalErrorf("failed to allocate gateway (%v): %v", cfg.Gateway, err)
} }
} }