|
| 1 | +// Copyright 2020 Nokia |
| 2 | +// Licensed under the BSD 3-Clause License. |
| 3 | +// SPDX-License-Identifier: BSD-3-Clause |
| 4 | +package vr_openwrt |
| 5 | + |
| 6 | +import ( |
| 7 | + "context" |
| 8 | + "fmt" |
| 9 | + "path/filepath" |
| 10 | + |
| 11 | + "github.com/srl-labs/containerlab/nodes" |
| 12 | + "github.com/srl-labs/containerlab/types" |
| 13 | + "github.com/srl-labs/containerlab/utils" |
| 14 | +) |
| 15 | + |
| 16 | +var kindNames = []string{"openwrt"} |
| 17 | + |
| 18 | +const ( |
| 19 | + generateable = true |
| 20 | + generateIfFormat = "eth%d" |
| 21 | +) |
| 22 | + |
| 23 | +// Register registers the node in the NodeRegistry. |
| 24 | +func Register(r *nodes.NodeRegistry) { |
| 25 | + generateNodeAttributes := nodes.NewGenerateNodeAttributes(generateable, generateIfFormat) |
| 26 | + nrea := nodes.NewNodeRegistryEntryAttributes(nil, generateNodeAttributes) |
| 27 | + |
| 28 | + r.Register(kindNames, func() nodes.Node { |
| 29 | + return new(vrOpenWrt) |
| 30 | + }, nrea) |
| 31 | +} |
| 32 | + |
| 33 | +type vrOpenWrt struct { |
| 34 | + nodes.DefaultNode |
| 35 | +} |
| 36 | + |
| 37 | +func (n *vrOpenWrt) Init(cfg *types.NodeConfig, opts ...nodes.NodeOption) error { |
| 38 | + // Init DefaultNode |
| 39 | + n.DefaultNode = *nodes.NewDefaultNode(n) |
| 40 | + |
| 41 | + n.Cfg = cfg |
| 42 | + for _, o := range opts { |
| 43 | + o(n) |
| 44 | + } |
| 45 | + |
| 46 | + // Add a simple bind-mount for the 'overlay' directory |
| 47 | + n.Cfg.Binds = append(n.Cfg.Binds, |
| 48 | + fmt.Sprint(filepath.Join(n.Cfg.LabDir, "overlay"), ":/overlay"), |
| 49 | + ) |
| 50 | + |
| 51 | + return nil |
| 52 | +} |
| 53 | + |
| 54 | +func (n *vrOpenWrt) PreDeploy(_ context.Context, params *nodes.PreDeployParams) error { |
| 55 | + // Ensure the overlay directory exists |
| 56 | + utils.CreateDirectory(filepath.Join(n.Cfg.LabDir, "overlay"), 0777) |
| 57 | + return nil |
| 58 | +} |
0 commit comments