allocator

package
v0.6.0-rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2017 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type IPAMArgs

type IPAMArgs struct {
	IPs []net.IP `json:"ips"`
}

type IPAMConfig

type IPAMConfig struct {
	*Range
	Name       string
	Type       string         `json:"type"`
	Routes     []*types.Route `json:"routes"`
	DataDir    string         `json:"dataDir"`
	ResolvConf string         `json:"resolvConf"`
	Ranges     []Range        `json:"ranges"`
	IPArgs     []net.IP       `json:"-"` // Requested IPs from CNI_ARGS and args
}

IPAMConfig represents the IP related network configuration. This nests Range because we initially only supported a single range directly, and wish to preserve backwards compatability

func LoadIPAMConfig

func LoadIPAMConfig(bytes []byte, envArgs string) (*IPAMConfig, string, error)

NewIPAMConfig creates a NetworkConfig from the given network name.

type IPAMEnvArgs

type IPAMEnvArgs struct {
	types.CommonArgs
	IP net.IP `json:"ip,omitempty"`
}

type IPAllocator

type IPAllocator struct {
	// contains filtered or unexported fields
}

func NewIPAllocator

func NewIPAllocator(netName string, r Range, store backend.Store) *IPAllocator

func (*IPAllocator) Get

func (a *IPAllocator) Get(id string, requestedIP net.IP) (*current.IPConfig, error)

Get alocates an IP

func (*IPAllocator) GetIter

func (a *IPAllocator) GetIter() (*RangeIter, error)

GetIter encapsulates the strategy for this allocator. We use a round-robin strategy, attempting to evenly use the whole subnet. More specifically, a crash-looping container will not see the same IP until the entire range has been run through. We may wish to consider avoiding recently-released IPs in the future.

func (*IPAllocator) Release

func (a *IPAllocator) Release(id string) error

Release clears all IPs allocated for the container with given ID

type Net

type Net struct {
	Name       string      `json:"name"`
	CNIVersion string      `json:"cniVersion"`
	IPAM       *IPAMConfig `json:"ipam"`
	Args       *struct {
		A *IPAMArgs `json:"cni"`
	} `json:"args"`
}

The top-level network config, just so we can get the IPAM block

type Range

type Range struct {
	RangeStart net.IP      `json:"rangeStart,omitempty"` // The first ip, inclusive
	RangeEnd   net.IP      `json:"rangeEnd,omitempty"`   // The last ip, inclusive
	Subnet     types.IPNet `json:"subnet"`
	Gateway    net.IP      `json:"gateway,omitempty"`
}

func (*Range) Canonicalize

func (r *Range) Canonicalize() error

Canonicalize takes a given range and ensures that all information is consistent, filling out Start, End, and Gateway with sane values if missing

func (*Range) IPInRange

func (r *Range) IPInRange(addr net.IP) error

IsValidIP checks if a given ip is a valid, allocatable address in a given Range

func (*Range) Overlaps

func (r *Range) Overlaps(r1 *Range) bool

Overlaps returns true if there is any overlap between ranges

type RangeIter

type RangeIter struct {
	// contains filtered or unexported fields
}

func (*RangeIter) Next

func (i *RangeIter) Next() net.IP

Next returns the next IP in the iterator, or nil if end is reached

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL