types

package
v0.0.0-...-c34bea4 Latest Latest
Warning

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

Go to latest
Published: May 20, 2022 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

+groupName=ipam

Index

Constants

View Source
const PoolNotExists = PoolID("")

PoolNotExists indicate that no such pool ID exists

View Source
const PoolUnspec = PoolNotExists

PoolUnspec indicates that the pool ID is unspecified

Variables

This section is empty.

Functions

This section is empty.

Types

type Address

type Address interface{}

type AddressIterator

type AddressIterator func(instanceID, interfaceID, ip, poolID string, address Address) error

AddressIterator is the function called by the ForeachAddress iterator

type AllocationIP

type AllocationIP struct {
	// Owner is the owner of the IP. This field is set if the IP has been
	// allocated. It will be set to the pod name or another identifier
	// representing the usage of the IP
	//
	// The owner field is left blank for an entry in Spec.IPAM.Pool and
	// filled out as the IP is used and also added to Status.IPAM.Used.
	//
	// +optional
	Owner string `json:"owner,omitempty"`

	// Resource is set for both available and allocated IPs, it represents
	// what resource the IP is associated with, e.g. in combination with
	// AWS ENI, this will refer to the ID of the ENI
	//
	// +optional
	Resource string `json:"resource,omitempty"`
}

AllocationIP is an IP which is available for allocation, or already has been allocated

func (*AllocationIP) DeepCopy

func (in *AllocationIP) DeepCopy() *AllocationIP

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllocationIP.

func (*AllocationIP) DeepCopyInto

func (in *AllocationIP) DeepCopyInto(out *AllocationIP)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AllocationIP) DeepEqual

func (in *AllocationIP) DeepEqual(other *AllocationIP) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type AllocationMap

type AllocationMap map[string]AllocationIP

AllocationMap is a map of allocated IPs indexed by IP

func (AllocationMap) DeepCopy

func (in AllocationMap) DeepCopy() AllocationMap

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllocationMap.

func (AllocationMap) DeepCopyInto

func (in AllocationMap) DeepCopyInto(out *AllocationMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AllocationMap) DeepEqual

func (in *AllocationMap) DeepEqual(other *AllocationMap) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type IPAMSpec

type IPAMSpec struct {
	// Pool is the list of IPs available to the node for allocation. When
	// an IP is used, the IP will remain on this list but will be added to
	// Status.IPAM.Used
	//
	// +optional
	Pool AllocationMap `json:"pool,omitempty"`

	// PodCIDRs is the list of CIDRs available to the node for allocation.
	// When an IP is used, the IP will be added to Status.IPAM.Used
	//
	// +optional
	PodCIDRs []string `json:"podCIDRs,omitempty"`

	// MinAllocate is the minimum number of IPs that must be allocated when
	// the node is first bootstrapped. It defines the minimum base socket
	// of addresses that must be available. After reaching this watermark,
	// the PreAllocate and MaxAboveWatermark logic takes over to continue
	// allocating IPs.
	//
	// +kubebuilder:validation:Minimum=0
	MinAllocate int `json:"min-allocate,omitempty"`

	// MaxAllocate is the maximum number of IPs that can be allocated to the
	// node. When the current amount of allocated IPs will approach this value,
	// the considered value for PreAllocate will decrease down to 0 in order to
	// not attempt to allocate more addresses than defined.
	//
	// +kubebuilder:validation:Minimum=0
	MaxAllocate int `json:"max-allocate,omitempty"`

	// PreAllocate defines the number of IP addresses that must be
	// available for allocation in the IPAMspec. It defines the buffer of
	// addresses available immediately without requiring cilium-operator to
	// get involved.
	//
	// +kubebuilder:validation:Minimum=0
	PreAllocate int `json:"pre-allocate,omitempty"`

	// MaxAboveWatermark is the maximum number of addresses to allocate
	// beyond the addresses needed to reach the PreAllocate watermark.
	// Going above the watermark can help reduce the number of API calls to
	// allocate IPs, e.g. when a new ENI is allocated, as many secondary
	// IPs as possible are allocated. Limiting the amount can help reduce
	// waste of IPs.
	//
	// +kubebuilder:validation:Minimum=0
	MaxAboveWatermark int `json:"max-above-watermark,omitempty"`

	// PodCIDRAllocationThreshold defines the minimum number of free IPs which
	// must be available to this node via its pod CIDR pool. If the total number
	// of IP addresses in the pod CIDR pool is less than this value, the pod
	// CIDRs currently in-use by this node will be marked as depleted and
	// cilium-operator will allocate a new pod CIDR to this node.
	// This value effectively defines the buffer of IP addresses available
	// immediately without requiring cilium-operator to get involved.
	//
	// +kubebuilder:validation:Minimum=0
	PodCIDRAllocationThreshold int `json:"pod-cidr-allocation-threshold,omitempty"`

	// PodCIDRReleaseThreshold defines the maximum number of free IPs which may
	// be available to this node via its pod CIDR pool. While the total number
	// of free IP addresses in the pod CIDR pool is larger than this value,
	// cilium-agent will attempt to release currently unused pod CIDRs.
	//
	// +kubebuilder:validation:Minimum=0
	PodCIDRReleaseThreshold int `json:"pod-cidr-release-threshold,omitempty"`
}

IPAMSpec is the IPAM specification of the node

This structure is embedded into v2.CiliumNode

func (*IPAMSpec) DeepCopy

func (in *IPAMSpec) DeepCopy() *IPAMSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAMSpec.

func (*IPAMSpec) DeepCopyInto

func (in *IPAMSpec) DeepCopyInto(out *IPAMSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*IPAMSpec) DeepEqual

func (in *IPAMSpec) DeepEqual(other *IPAMSpec) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type IPAMStatus

type IPAMStatus struct {
	// Used lists all IPs out of Spec.IPAM.Pool which have been allocated
	// and are in use.
	//
	// +optional
	Used AllocationMap `json:"used,omitempty"`

	// PodCIDRs lists the status of each pod CIDR allocated to this node.
	//
	// +optional
	PodCIDRs PodCIDRMap `json:"pod-cidrs,omitempty"`

	// Operator is the Operator status of the node
	//
	// +optional
	OperatorStatus OperatorStatus `json:"operator-status,omitempty"`

	// ReleaseIPs tracks the state for every IP considered for release.
	// value can be one of the following string :
	// * marked-for-release : Set by operator as possible candidate for IP
	// * ready-for-release  : Acknowledged as safe to release by agent
	// * do-not-release     : IP already in use / not owned by the node. Set by agent
	// * released           : IP successfully released. Set by operator
	//
	// +optional
	ReleaseIPs map[string]IPReleaseStatus `json:"release-ips,omitempty"`
}

IPAMStatus is the IPAM status of a node

This structure is embedded into v2.CiliumNode

func (*IPAMStatus) DeepCopy

func (in *IPAMStatus) DeepCopy() *IPAMStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAMStatus.

func (*IPAMStatus) DeepCopyInto

func (in *IPAMStatus) DeepCopyInto(out *IPAMStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*IPAMStatus) DeepEqual

func (in *IPAMStatus) DeepEqual(other *IPAMStatus) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type IPReleaseStatus

type IPReleaseStatus string

IPReleaseStatus defines the valid states in IP release handshake

+kubebuilder:validation:Enum=marked-for-release;ready-for-release;do-not-release;released

type Instance

type Instance struct {
	// interfaces is a map of all interfaces attached to the instance
	// indexed by the interface ID
	Interfaces map[string]InterfaceRevision
}

Instance is the representation of an instance, typically a VM, subject to per-node IPAM logic

+k8s:deepcopy-gen=false +deepequal-gen=false

type InstanceMap

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

InstanceMap is the list of all instances indexed by instance ID

+k8s:deepcopy-gen=false +deepequal-gen=false

func NewInstanceMap

func NewInstanceMap() *InstanceMap

NewInstanceMap returns a new InstanceMap

func (*InstanceMap) DeepCopy

func (m *InstanceMap) DeepCopy() *InstanceMap

DeepCopy returns a deep copy

func (*InstanceMap) ForeachAddress

func (m *InstanceMap) ForeachAddress(instanceID string, fn AddressIterator) error

ForeachAddress calls fn for each address on each interface attached to each instance. If an instanceID is specified, the only the interfaces and addresses of the specified instance are considered.

The InstanceMap is read-locked throughout the iteration process, i.e., no updates will occur. However, the address object given to the AddressIterator will point to live data and must be deep copied if used outside of the context of the iterator function.

func (*InstanceMap) ForeachInterface

func (m *InstanceMap) ForeachInterface(instanceID string, fn InterfaceIterator) error

ForeachInterface calls fn for each interface on each interface attached to each instance. If an instanceID is specified, the only the interfaces and addresses of the specified instance are considered.

The InstanceMap is read-locked throughout the iteration process, i.e., no updates will occur. However, the address object given to the InterfaceIterator will point to live data and must be deep copied if used outside of the context of the iterator function.

func (*InstanceMap) GetInterface

func (m *InstanceMap) GetInterface(instanceID, interfaceID string) (InterfaceRevision, bool)

GetInterface returns returns a particular interface of an instance. The boolean indicates whether the interface was found or not.

func (*InstanceMap) NumInstances

func (m *InstanceMap) NumInstances() (size int)

NumInstances returns the number of instances in the instance map

func (*InstanceMap) Update

func (m *InstanceMap) Update(instanceID string, iface InterfaceRevision)

Update updates the definition of an interface for a particular instance. If the interface is already known, the definition is updated, otherwise the interface is added to the instance.

type Interface

type Interface interface {
	// InterfaceID must return the identifier of the interface
	InterfaceID() string

	// ForeachAddress must iterate over all addresses of the interface and
	// call fn for each address
	ForeachAddress(instanceID string, fn AddressIterator) error
}

Interface is the implementation of a IPAM relevant network interface +k8s:deepcopy-gen=false +deepequal-gen=false

type InterfaceIterator

type InterfaceIterator func(instanceID, interfaceID string, iface InterfaceRevision) error

InterfaceIterator is the function called by the ForeachInterface iterator

type InterfaceRevision

type InterfaceRevision struct {
	// Resource is the interface resource
	Resource Interface

	// Fingerprint is the fingerprint reprsenting the network interface
	// configuration. It is typically implemented as the result of a hash
	// function calculated off the resource. This field is optional, not
	// all IPAM backends make use of fingerprints.
	Fingerprint string
}

InterfaceRevision is the configurationr revision of a network interface. It consists of a revision hash representing the current configuration version and the resource itself.

+k8s:deepcopy-gen=false +deepequal-gen=false

type Limits

type Limits struct {
	// Adapters specifies the maximum number of interfaces that can be
	// attached to the instance
	Adapters int

	// IPv4 is the maximum number of IPv4 addresses per adapter/interface
	IPv4 int

	// IPv6 is the maximum number of IPv6 addresses per adapter/interface
	IPv6 int

	// HypervisorType tracks the instance's hypervisor type if available. Used to determine if features like prefix
	// delegation are supported on an instance. Bare metal instances would have empty string.
	HypervisorType string
}

Limits specifies the IPAM relevant instance limits

func (*Limits) DeepCopy

func (in *Limits) DeepCopy() *Limits

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Limits.

func (*Limits) DeepCopyInto

func (in *Limits) DeepCopyInto(out *Limits)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Limits) DeepEqual

func (in *Limits) DeepEqual(other *Limits) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type OperatorStatus

type OperatorStatus struct {
	// Error is the error message set by cilium-operator.
	//
	// +optional
	Error string `json:"error,omitempty"`
}

OperatorStatus is the status used by cilium-operator to report errors in case the allocation CIDR failed.

func (*OperatorStatus) DeepCopy

func (in *OperatorStatus) DeepCopy() *OperatorStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperatorStatus.

func (*OperatorStatus) DeepCopyInto

func (in *OperatorStatus) DeepCopyInto(out *OperatorStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*OperatorStatus) DeepEqual

func (in *OperatorStatus) DeepEqual(other *OperatorStatus) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type PodCIDRMap

type PodCIDRMap map[string]PodCIDRMapEntry

func (PodCIDRMap) DeepCopy

func (in PodCIDRMap) DeepCopy() PodCIDRMap

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCIDRMap.

func (PodCIDRMap) DeepCopyInto

func (in PodCIDRMap) DeepCopyInto(out *PodCIDRMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCIDRMap) DeepEqual

func (in *PodCIDRMap) DeepEqual(other *PodCIDRMap) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type PodCIDRMapEntry

type PodCIDRMapEntry struct {
	// Status describes the status of a pod CIDR
	//
	// +optional
	Status PodCIDRStatus `json:"status,omitempty"`
}

func (*PodCIDRMapEntry) DeepCopy

func (in *PodCIDRMapEntry) DeepCopy() *PodCIDRMapEntry

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCIDRMapEntry.

func (*PodCIDRMapEntry) DeepCopyInto

func (in *PodCIDRMapEntry) DeepCopyInto(out *PodCIDRMapEntry)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCIDRMapEntry) DeepEqual

func (in *PodCIDRMapEntry) DeepEqual(other *PodCIDRMapEntry) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type PodCIDRStatus

type PodCIDRStatus string

+kubebuilder:validation:Enum=released;depleted;in-use

const (
	PodCIDRStatusReleased PodCIDRStatus = "released"
	PodCIDRStatusDepleted PodCIDRStatus = "depleted"
	PodCIDRStatusInUse    PodCIDRStatus = "in-use"
)

type PoolID

type PoolID string

PoolID is the type used to identify an IPAM pool

type PoolQuota

type PoolQuota struct {
	// AvailabilityZone is the availability zone in which the IPAM pool resides in
	AvailabilityZone string

	// AvailableIPs is the number of available IPs in the pool
	AvailableIPs int
}

PoolQuota defines the limits of an IPAM pool

func (*PoolQuota) DeepCopy

func (in *PoolQuota) DeepCopy() *PoolQuota

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolQuota.

func (*PoolQuota) DeepCopyInto

func (in *PoolQuota) DeepCopyInto(out *PoolQuota)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PoolQuota) DeepEqual

func (in *PoolQuota) DeepEqual(other *PoolQuota) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type PoolQuotaMap

type PoolQuotaMap map[PoolID]PoolQuota

PoolQuotaMap is a map of pool quotas indexes by pool identifier

func (PoolQuotaMap) DeepCopy

func (in PoolQuotaMap) DeepCopy() PoolQuotaMap

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolQuotaMap.

func (PoolQuotaMap) DeepCopyInto

func (in PoolQuotaMap) DeepCopyInto(out *PoolQuotaMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PoolQuotaMap) DeepEqual

func (in *PoolQuotaMap) DeepEqual(other *PoolQuotaMap) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type Subnet

type Subnet struct {
	// ID is the subnet ID
	ID string

	// Name is the subnet name
	Name string

	// CIDR is the CIDR associated with the subnet
	CIDR *cidr.CIDR

	// AvailabilityZone is the availability zone of the subnet
	AvailabilityZone string

	// VirtualNetworkID is the virtual network the subnet is in
	VirtualNetworkID string

	// AvailableAddresses is the number of addresses available for
	// allocation
	AvailableAddresses int

	// Tags is the tags of the subnet
	Tags Tags
}

Subnet is a representation of a subnet

func (*Subnet) DeepCopy

func (in *Subnet) DeepCopy() *Subnet

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subnet.

func (*Subnet) DeepCopyInto

func (in *Subnet) DeepCopyInto(out *Subnet)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Subnet) DeepEqual

func (in *Subnet) DeepEqual(other *Subnet) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type SubnetMap

type SubnetMap map[string]*Subnet

SubnetMap indexes subnets by subnet ID

func (SubnetMap) DeepCopy

func (in SubnetMap) DeepCopy() SubnetMap

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetMap.

func (SubnetMap) DeepCopyInto

func (in SubnetMap) DeepCopyInto(out *SubnetMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*SubnetMap) DeepEqual

func (in *SubnetMap) DeepEqual(other *SubnetMap) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

func (SubnetMap) FirstSubnetWithAvailableAddresses

func (m SubnetMap) FirstSubnetWithAvailableAddresses(preferredPoolIDs []PoolID) (PoolID, int)

FirstSubnetWithAvailableAddresses returns the first pool ID in the list of subnets with available addresses. If any of the preferred pool IDs have available addresses, the first pool ID with available addresses is returned.

type Tags

type Tags map[string]string

Tags implements generic key value tags

func (Tags) DeepCopy

func (in Tags) DeepCopy() Tags

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Tags.

func (Tags) DeepCopyInto

func (in Tags) DeepCopyInto(out *Tags)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Tags) DeepEqual

func (in *Tags) DeepEqual(other *Tags) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

func (Tags) Match

func (t Tags) Match(required Tags) bool

Match returns true if the required tags are all found

type VirtualNetwork

type VirtualNetwork struct {
	// ID is the ID of the virtual network
	ID string

	// PrimaryCIDR is the primary IPv4 CIDR
	PrimaryCIDR string

	// CIDRs is the list of secondary IPv4 CIDR ranges associated with the VPC
	CIDRs []string
}

VirtualNetwork is the representation of a virtual network

func (*VirtualNetwork) DeepCopy

func (in *VirtualNetwork) DeepCopy() *VirtualNetwork

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualNetwork.

func (*VirtualNetwork) DeepCopyInto

func (in *VirtualNetwork) DeepCopyInto(out *VirtualNetwork)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*VirtualNetwork) DeepEqual

func (in *VirtualNetwork) DeepEqual(other *VirtualNetwork) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type VirtualNetworkMap

type VirtualNetworkMap map[string]*VirtualNetwork

VirtualNetworkMap indexes virtual networks by their ID

func (VirtualNetworkMap) DeepCopy

func (in VirtualNetworkMap) DeepCopy() VirtualNetworkMap

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualNetworkMap.

func (VirtualNetworkMap) DeepCopyInto

func (in VirtualNetworkMap) DeepCopyInto(out *VirtualNetworkMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*VirtualNetworkMap) DeepEqual

func (in *VirtualNetworkMap) DeepEqual(other *VirtualNetworkMap) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

Jump to

Keyboard shortcuts

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