ipam

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2024 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MinSubnetSize = 4 // first and last addresses are excluded, so 2 would be too small

)

Kinds of message we can unicast to other peers

Variables

This section is empty.

Functions

func ParseCIDRSubnet

func ParseCIDRSubnet(cidrStr string) (cidr address.CIDR, err error)

Types

type Allocator

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

Allocator brings together Ring and space.Set, and does the necessary plumbing. Runs as a single-threaded Actor, so no locks are used around data structures.

func NewAllocator

func NewAllocator(config Config) *Allocator

NewAllocator creates and initialises a new Allocator

func (*Allocator) AdminTakeoverRanges

func (alloc *Allocator) AdminTakeoverRanges(peerNameOrNickname string) address.Count

AdminTakeoverRanges (Sync) - take over the ranges owned by a given peer, and return how much space was transferred in the process. Only done on administrator command.

func (*Allocator) Allocate

func (alloc *Allocator) Allocate(ident string, r address.CIDR, isContainer bool, hasBeenCancelled func() bool) (address.Address, error)

Allocate (Sync) - get new IP address for container with given name in range if there isn't any space in that range we block indefinitely

func (*Allocator) Claim

func (alloc *Allocator) Claim(ident string, cidr address.CIDR, isContainer, noErrorOnUnknown bool, hasBeenCancelled func() bool) error

Claim an address that we think we should own (Sync)

func (*Allocator) ContainerDestroyed

func (alloc *Allocator) ContainerDestroyed(ident string)

ContainerDestroyed called from the updater interface. Async.

func (*Allocator) ContainerDied

func (alloc *Allocator) ContainerDied(ident string)

ContainerDied called from the updater interface. Async.

func (*Allocator) ContainerStarted

func (alloc *Allocator) ContainerStarted(ident string)

func (*Allocator) Delete

func (alloc *Allocator) Delete(ident string) error

Delete (Sync) - release all IP addresses for container with given name

func (*Allocator) Encode

func (alloc *Allocator) Encode() []byte

Encode (Sync)

func (*Allocator) Free

func (alloc *Allocator) Free(ident string, addrToFree address.Address) error

Free (Sync) - release single IP address for container

func (*Allocator) Gossip

func (alloc *Allocator) Gossip() mesh.GossipData

Gossip returns a GossipData implementation, which in this case always returns the latest ring state (and does nothing on merge)

func (*Allocator) HandleHTTP

func (alloc *Allocator) HandleHTTP(router *mux.Router, defaultSubnet address.CIDR, dockerCli *docker.Client)

HandleHTTP wires up ipams HTTP endpoints to the provided mux.

func (*Allocator) Lookup

func (alloc *Allocator) Lookup(ident string, r address.Range) ([]address.CIDR, error)

Lookup (Sync) - get existing IP addresses for container with given name in range

func (*Allocator) OnGossip

func (alloc *Allocator) OnGossip(msg []byte) (mesh.GossipData, error)

OnGossip (Sync)

func (*Allocator) OnGossipBroadcast

func (alloc *Allocator) OnGossipBroadcast(sender mesh.PeerName, msg []byte) (mesh.GossipData, error)

OnGossipBroadcast (Sync)

func (*Allocator) OnGossipUnicast

func (alloc *Allocator) OnGossipUnicast(sender mesh.PeerName, msg []byte) error

OnGossipUnicast (Sync)

func (*Allocator) PeerGone

func (alloc *Allocator) PeerGone(peerName mesh.PeerName)

PeerGone removes nicknames of peers which are no longer mentioned in the ring. Async.

NB: the function is invoked by the gossip library routines and should be

registered manually.

func (*Allocator) Prime

func (alloc *Allocator) Prime()

Prime (Sync) - wait for consensus

func (*Allocator) PruneOwned

func (alloc *Allocator) PruneOwned(ids []string)

func (*Allocator) SetInterfaces

func (alloc *Allocator) SetInterfaces(gossip mesh.Gossip)

SetInterfaces gives the allocator two interfaces for talking to the outside world

func (*Allocator) Shutdown

func (alloc *Allocator) Shutdown()

Shutdown (Sync)

func (*Allocator) Start

func (alloc *Allocator) Start()

Start runs the allocator goroutine

func (*Allocator) Stop

func (alloc *Allocator) Stop()

Stop makes the actor routine exit, for test purposes ONLY because any calls after this is processed will hang. Async.

type ClaimStatus

type ClaimStatus struct {
	Ident string
	CIDR  address.CIDR
}

type Config

type Config struct {
	OurName     mesh.PeerName
	OurUID      mesh.PeerUID
	OurNickname string
	Seed        []mesh.PeerName
	Universe    address.CIDR
	IsObserver  bool
	PreClaims   []PreClaim
	Quorum      func() uint
	Db          db.DB
	IsKnownPeer func(name mesh.PeerName) bool
	Tracker     tracker.LocalRangeTracker
}

type EntryStatus

type EntryStatus struct {
	Token       string
	Size        uint32
	Peer        string
	Nickname    string
	IsKnownPeer bool
	Version     uint32
}

type PreClaim

type PreClaim struct {
	Ident       string // a container ID, something like "weave:expose", or api.NoContainerID
	IsContainer bool   // true if Ident is a container ID
	Cidr        address.CIDR
}

PreClaims are IP addresses discovered before we could initialize IPAM

type Status

type Status struct {
	Paxos            *paxos.Status
	Range            string
	RangeNumIPs      int
	ActiveIPs        int
	DefaultSubnet    string
	Entries          []EntryStatus
	PendingClaims    []ClaimStatus
	PendingAllocates []string
}

func NewStatus

func NewStatus(allocator *Allocator, defaultSubnet address.CIDR) *Status

Directories

Path Synopsis
Package ring implements a simple ring CRDT.
Package ring implements a simple ring CRDT.

Jump to

Keyboard shortcuts

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