Skip to content

Commit 72aeb8f

Browse files
authored
Add vr-openwrt kind with overlay bind mount for OpenWRT persistence (srl-labs#2517)
* Added OpenWRT kind * Added vr-openwrt kind with bind mount for /overlay to persist QEMU overlay image * renamed to openwrt
1 parent 12260e1 commit 72aeb8f

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

clab/register.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import (
4747
vr_vsrx "github.com/srl-labs/containerlab/nodes/vr_vsrx"
4848
vr_xrv "github.com/srl-labs/containerlab/nodes/vr_xrv"
4949
vr_xrv9k "github.com/srl-labs/containerlab/nodes/vr_xrv9k"
50+
vr_openwrt "github.com/srl-labs/containerlab/nodes/vr_openwrt"
5051
xrd "github.com/srl-labs/containerlab/nodes/xrd"
5152
)
5253

@@ -89,6 +90,7 @@ func (c *CLab) RegisterNodes() {
8990
vr_xrv9k.Register(c.Reg)
9091
vr_sonic.Register(c.Reg)
9192
vr_cat9kv.Register(c.Reg)
93+
vr_openwrt.Register(c.Reg)
9294
xrd.Register(c.Reg)
9395
rare.Register(c.Reg)
9496
c8000.Register(c.Reg)

nodes/vr_openwrt/vr_openwrt.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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

Comments
 (0)