@@ -23,6 +23,10 @@ import (
23
23
"github.com/srl-labs/containerlab/utils"
24
24
)
25
25
26
+ const (
27
+ ifWaitScriptContainerPath = "/mnt/flash/if-wait.sh"
28
+ )
29
+
26
30
var (
27
31
// defined env vars for the ceos
28
32
ceosEnv = map [string ]string {
@@ -72,11 +76,14 @@ func (s *ceos) Init(cfg *types.NodeConfig, opts ...nodes.NodeOption) error {
72
76
s .cfg .Env = utils .MergeStringMaps (ceosEnv , s .cfg .Env )
73
77
74
78
// the node.Cmd should be aligned with the environment.
79
+ // prepending original Cmd with if-wait.sh script to make sure that interfaces are available
80
+ // before init process starts
75
81
var envSb strings.Builder
76
- envSb .WriteString ("/sbin/init " )
82
+ envSb .WriteString ("bash -c '" + ifWaitScriptContainerPath + " ; exec /sbin/init " )
77
83
for k , v := range s .cfg .Env {
78
84
envSb .WriteString ("systemd.setenv=" + k + "=" + v + " " )
79
85
}
86
+ envSb .WriteString ("'" )
80
87
s .cfg .Cmd = envSb .String ()
81
88
s .cfg .MacAddress = utils .GenMac ("00:1c:73" )
82
89
@@ -182,6 +189,11 @@ func createCEOSFiles(node *types.NodeConfig) error {
182
189
err = utils .CreateFile (sysMacPath , m .String ())
183
190
}
184
191
192
+ // adding if-wait.sh script to flash dir
193
+ ifScriptP := path .Join (node .LabDir , "flash" , "if-wait.sh" )
194
+ utils .CreateFile (ifScriptP , utils .IfWaitScript )
195
+ os .Chmod (ifScriptP , 0777 ) // skipcq: GSC-G302
196
+
185
197
return err
186
198
}
187
199
0 commit comments