97 lines
4.8 KiB
Go
97 lines
4.8 KiB
Go
// Copyright (c) 2017-2019 Tigera, Inc. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package ipam
|
|
|
|
import (
|
|
"context"
|
|
|
|
cnet "github.com/projectcalico/libcalico-go/lib/net"
|
|
)
|
|
|
|
// ipam.Interface has methods to perform IP address management.
|
|
type Interface interface {
|
|
// AssignIP assigns the provided IP address to the provided host. The IP address
|
|
// must fall within a configured pool. AssignIP will claim block affinity as needed
|
|
// in order to satisfy the assignment. An error will be returned if the IP address
|
|
// is already assigned, or if StrictAffinity is enabled and the address is within
|
|
// a block that does not have affinity for the given host.
|
|
AssignIP(ctx context.Context, args AssignIPArgs) error
|
|
|
|
// AutoAssign automatically assigns one or more IP addresses as specified by the
|
|
// provided AutoAssignArgs. AutoAssign returns the list of the assigned IPv4 addresses,
|
|
// and the list of the assigned IPv6 addresses in IPNet format.
|
|
//
|
|
// In case of error, returns the IPs allocated so far along with the error.
|
|
AutoAssign(ctx context.Context, args AutoAssignArgs) ([]cnet.IPNet, []cnet.IPNet, error)
|
|
|
|
// ReleaseIPs releases any of the given IP addresses that are currently assigned,
|
|
// so that they are available to be used in another assignment.
|
|
ReleaseIPs(ctx context.Context, ips []cnet.IP) ([]cnet.IP, error)
|
|
|
|
// GetAssignmentAttributes returns the attributes stored with the given IP address
|
|
// upon assignment.
|
|
GetAssignmentAttributes(ctx context.Context, addr cnet.IP) (map[string]string, error)
|
|
|
|
// IPsByHandle returns a list of all IP addresses that have been
|
|
// assigned using the provided handle.
|
|
IPsByHandle(ctx context.Context, handleID string) ([]cnet.IP, error)
|
|
|
|
// ReleaseByHandle releases all IP addresses that have been assigned
|
|
// using the provided handle. Returns an error if no addresses
|
|
// are assigned with the given handle.
|
|
ReleaseByHandle(ctx context.Context, handleID string) error
|
|
|
|
// ClaimAffinity claims affinity to the given host for all blocks
|
|
// within the given CIDR. The given CIDR must fall within a configured
|
|
// pool. If an empty string is passed as the host, then the value returned by os.Hostname is used.
|
|
ClaimAffinity(ctx context.Context, cidr cnet.IPNet, host string) ([]cnet.IPNet, []cnet.IPNet, error)
|
|
|
|
// ReleaseAffinity releases affinity for all blocks within the given CIDR
|
|
// on the given host. If an empty string is passed as the host, then the
|
|
// value returned by os.Hostname will be used. If mustBeEmpty is true, then an error
|
|
// will be returned if any blocks within the CIDR are not empty - in this case, this
|
|
// function may release some but not all blocks within the given CIDR.
|
|
ReleaseAffinity(ctx context.Context, cidr cnet.IPNet, host string, mustBeEmpty bool) error
|
|
|
|
// ReleaseHostAffinities releases affinity for all blocks that are affine
|
|
// to the given host. If an empty string is passed as the host, the value returned by
|
|
// os.Hostname will be used. If mustBeEmpty is true, then an error
|
|
// will be returned if any blocks within the CIDR are not empty - in this case, this
|
|
// function may release some but not all blocks attached to this host.
|
|
ReleaseHostAffinities(ctx context.Context, host string, mustBeEmpty bool) error
|
|
|
|
// ReleasePoolAffinities releases affinity for all blocks within
|
|
// the specified pool across all hosts.
|
|
ReleasePoolAffinities(ctx context.Context, pool cnet.IPNet) error
|
|
|
|
// GetIPAMConfig returns the global IPAM configuration. If no IPAM configuration
|
|
// has been set, returns a default configuration with StrictAffinity disabled
|
|
// and AutoAllocateBlocks enabled.
|
|
GetIPAMConfig(ctx context.Context) (*IPAMConfig, error)
|
|
|
|
// SetIPAMConfig sets global IPAM configuration. This can only
|
|
// be done when there are no allocated blocks and IP addresses.
|
|
SetIPAMConfig(ctx context.Context, cfg IPAMConfig) error
|
|
|
|
// RemoveIPAMHost releases affinity for all blocks on the given host,
|
|
// and removes all host-specific IPAM data from the datastore.
|
|
// RemoveIPAMHost does not release any IP addresses claimed on the given host.
|
|
// If an empty string is passed as the host then the value returned by os.Hostname is used.
|
|
RemoveIPAMHost(ctx context.Context, host string) error
|
|
|
|
// GetUtilization returns IP utilization info for the specified pools, or for all pools.
|
|
GetUtilization(ctx context.Context, args GetUtilizationArgs) ([]*PoolUtilization, error)
|
|
}
|