Documentation ¶
Index ¶
- Constants
- func AddVxLanInterface(vxlan VxLAN) (err error)
- func AppendHostsFileEntries(containers []types.GenericContainer, labname string) error
- func BindIfacesWithTC(if1, if2 string) (err error)
- func DeleteEntriesFromHostsFile(labname string) error
- func GetLinksByNamePrefix(prefix string) ([]netlink.Link, error)
- func SetIngressMirror(src, dst string) (err error)
- type CLab
- func (c *CLab) BuildGraphFromDeployedLab(g *GraphTopo, containers []types.GenericContainer)
- func (c *CLab) BuildGraphFromTopo(g *GraphTopo)
- func (c *CLab) CheckResources() error
- func (c *CLab) CheckTopologyDefinition(ctx context.Context) error
- func (c *CLab) CreateAuthzKeysFile() error
- func (c *CLab) CreateLinks(ctx context.Context, workers uint)
- func (c *CLab) CreateNetwork(ctx context.Context) error
- func (c *CLab) CreateNodes(ctx context.Context, maxWorkers uint, serialNodes map[string]struct{}) (*sync.WaitGroup, *sync.WaitGroup)
- func (c *CLab) CreateVirtualWiring(l *types.Link) (err error)
- func (c *CLab) DeleteNetnsSymlinks() (err error)
- func (c *CLab) DeleteNodes(ctx context.Context, workers uint, serialNodes map[string]struct{})
- func (c *CLab) GenerateExports(f io.Writer, p string) error
- func (c *CLab) GenerateGraph(_ string) error
- func (c *CLab) GenerateInventories() error
- func (c *CLab) GetNodeRuntime(contName string) (runtime.ContainerRuntime, error)
- func (c *CLab) GetTopology(topo, varsFile string) error
- func (c *CLab) GlobalRuntime() runtime.ContainerRuntime
- func (c *CLab) HasKind(k string) bool
- func (c *CLab) ListContainers(ctx context.Context, labels []*types.GenericFilter) ([]types.GenericContainer, error)
- func (c *CLab) NewEndpoint(e string) *types.Endpoint
- func (c *CLab) NewLink(l *types.LinkConfig) *types.Link
- func (c *CLab) NewNode(nodeName, nodeRuntime string, nodeDef *types.NodeDefinition, idx int) error
- func (c *CLab) RemoveHostVeth(l *types.Link) (err error)
- func (c *CLab) ServeTopoGraph(tmpl, staticDir, srv string, topoD TopoData) error
- func (c *CLab) VerifyContainersUniqueness(ctx context.Context) error
- func (c *CLab) VerifyImages(ctx context.Context) error
- func (c *CLab) VethCleanup(_ context.Context) error
- type ClabOption
- type Config
- type Directory
- type GraphTopo
- type Link
- type TopoData
- type TopoFile
- type TopologyExport
- type VxLAN
Constants ¶
const ( // veth link mtu DefaultVethLinkMTU = 9500 // containerlab's reserved OUI ClabOUI = "aa:c1:ab" // label names ContainerlabLabel = "containerlab" NodeNameLabel = "clab-node-name" NodeKindLabel = "clab-node-kind" NodeTypeLabel = "clab-node-type" NodeGroupLabel = "clab-node-group" NodeLabDirLabel = "clab-node-lab-dir" TopoFileLabel = "clab-topo-file" NodeMgmtNetBr = "clab-mgmt-net-bridge" )
Variables ¶
This section is empty.
Functions ¶
func AddVxLanInterface ¶
AddVxLanInterface creates VxLan interface by given vxlan object
func AppendHostsFileEntries ¶ added in v0.16.2
func AppendHostsFileEntries(containers []types.GenericContainer, labname string) error
func BindIfacesWithTC ¶
BindIfacesWithTC creates TC ingress mirred redirection between a pair of interfaces to make them virtually form a kind of a veth pair see https://netdevops.me/2021/transparently-redirecting-packets/frames-between-interfaces/#4-tc-to-the-rescue used https://github.com/redhat-nfvpe/koko/blob/bd156c82bf25837545fb109c69c7b91c3457b318/api/koko_api.go#L224 and https://gist.github.com/mcastelino/7d85f4164ffdaf48242f9281bb1d0f9b#gistcomment-2734521
func DeleteEntriesFromHostsFile ¶ added in v0.16.2
func GetLinksByNamePrefix ¶ added in v0.14.0
GetLinksByNamePrefix returns a list of links whose name matches a prefix
func SetIngressMirror ¶
SetIngressMirror sets TC to mirror ingress from given port as MirrorIngress.
Types ¶
type CLab ¶
type CLab struct { Config *Config `json:"config,omitempty"` TopoFile *TopoFile `json:"topofile,omitempty"` Nodes map[string]nodes.Node `json:"nodes,omitempty"` Links map[int]*types.Link `json:"links,omitempty"` Runtimes map[string]runtime.ContainerRuntime `json:"runtimes,omitempty"` Dir *Directory `json:"dir,omitempty"` // contains filtered or unexported fields }
func NewContainerLab ¶
func NewContainerLab(opts ...ClabOption) (*CLab, error)
NewContainerLab function defines a new container lab
func (*CLab) BuildGraphFromDeployedLab ¶ added in v0.25.0
func (c *CLab) BuildGraphFromDeployedLab(g *GraphTopo, containers []types.GenericContainer)
func (*CLab) BuildGraphFromTopo ¶ added in v0.25.0
func (*CLab) CheckResources ¶
CheckResources runs container host resources check
func (*CLab) CheckTopologyDefinition ¶
CheckTopologyDefinition runs topology checks and returns any errors found
func (*CLab) CreateAuthzKeysFile ¶ added in v0.22.0
CreateAuthzKeysFile creats the authorized_keys file in the lab directory if any files ~/.ssh/*.pub found
func (*CLab) CreateLinks ¶
CreateLinks creates links using the specified number of workers
func (*CLab) CreateNetwork ¶ added in v0.24.0
func (*CLab) CreateNodes ¶
func (c *CLab) CreateNodes(ctx context.Context, maxWorkers uint, serialNodes map[string]struct{}) (*sync.WaitGroup, *sync.WaitGroup)
CreateNodes will schedule nodes creation returns waitgroups for nodes with static and dynamic IPs, since static nodes are scheduled first
func (*CLab) CreateVirtualWiring ¶
CreateVirtualWiring creates the virtual topology between the containers
func (*CLab) DeleteNetnsSymlinks ¶
DeleteNetnsSymlinks deletes the symlink file created for each container netns
func (*CLab) DeleteNodes ¶ added in v0.15.0
func (*CLab) GenerateExports ¶ added in v0.26.0
GenerateExports generates various export files and writes it to a lab location
func (*CLab) GenerateGraph ¶
GenerateGraph generates a graph of the lab topology
func (*CLab) GenerateInventories ¶
GenerateInventories generate various inventory files and writes it to a lab location
func (*CLab) GetNodeRuntime ¶ added in v0.15.0
func (c *CLab) GetNodeRuntime(contName string) (runtime.ContainerRuntime, error)
func (*CLab) GetTopology ¶
GetTopology parses the topology file into c.Conf structure as well as populates the TopoFile structure with the topology file related information
func (*CLab) GlobalRuntime ¶ added in v0.15.0
func (c *CLab) GlobalRuntime() runtime.ContainerRuntime
func (*CLab) HasKind ¶ added in v0.25.0
HasKind returns true if kind k is found in the list of nodes
func (*CLab) ListContainers ¶
func (c *CLab) ListContainers(ctx context.Context, labels []*types.GenericFilter) ([]types.GenericContainer, error)
func (*CLab) NewEndpoint ¶
NewEndpoint initializes a new endpoint object
func (*CLab) NewLink ¶
func (c *CLab) NewLink(l *types.LinkConfig) *types.Link
NewLink initializes a new link object
func (*CLab) RemoveHostVeth ¶ added in v0.26.0
RemoveHostVeth tries to remove veths connected to the host network namespace And does nothing in case they are not found
func (*CLab) ServeTopoGraph ¶ added in v0.25.0
func (*CLab) VerifyContainersUniqueness ¶
VerifyContainersUniqueness ensures that nodes defined in the topology do not have names of the existing containers additionally it checks that the lab name is unique and no containers are currently running with the same lab name label
func (*CLab) VerifyImages ¶
VerifyImages will check if image referred in the node config either pullable or is available in the local image store
func (*CLab) VethCleanup ¶ added in v0.26.0
VethCleanup iterates over links found in clab topology to initiate removal of dangling veths in host networking namespace See https://github.com/srl-labs/containerlab/issues/842 for the reference
type ClabOption ¶
func WithKeepMgmtNet ¶ added in v0.15.0
func WithKeepMgmtNet() ClabOption
func WithRuntime ¶ added in v0.14.0
func WithRuntime(name string, rtconfig *runtime.RuntimeConfig) ClabOption
func WithTimeout ¶
func WithTimeout(dur time.Duration) ClabOption
func WithTopoFile ¶
func WithTopoFile(file, varsFile string) ClabOption
type Config ¶
type Config struct { Name string `json:"name,omitempty"` Prefix *string `json:"prefix,omitempty"` Mgmt *types.MgmtNet `json:"mgmt,omitempty"` Topology *types.Topology `json:"topology,omitempty"` }
Config defines lab configuration as it is provided in the YAML file
type GraphTopo ¶ added in v0.25.0
type GraphTopo struct { Nodes []types.ContainerDetails `json:"nodes,omitempty"` Links []Link `json:"links,omitempty"` }
type TopoFile ¶
type TopoFile struct {
// contains filtered or unexported fields
}
TopoFile type is a struct which defines parameters of the topology file
type TopologyExport ¶ added in v0.26.0
type TopologyExport struct { Name string `json:"name"` Type string `json:"type"` Clab *CLab `json:"clab,omitempty"` NodeConfigs map[string]*types.NodeConfig `json:"nodeconfigs,omitempty"` }
TopologyExport holds a combination of CLab structure and map of NodeConfig types, which expands Node definitions with dynamically created values
type VxLAN ¶
type VxLAN struct { Name string // interface name ParentIf string // parent interface name ID int // VxLan ID Remote net.IP // VxLan destination address MTU int // VxLan Interface MTU (with VxLan encap), used mirroring UDPPort int // VxLan UDP port (src/dest, no range, single value) }
VxLAN is a structure to describe vxlan endpoint adopted from https://github.com/redhat-nfvpe/koko/blob/bd156c82bf25837545fb109c69c7b91c3457b318/api/koko_api.go#L46