"os/exec"
"strings"
"text/template"
+ "time"
"github.com/edwarnicke/exechelper"
)
args := "--ulimit nofile=90000:90000 --cap-add=all --privileged --network host --rm"
args += c.getVolumesAsCliOption()
args += c.getEnvVarsAsCliOption()
+ if *vppSourceFileDir != "" {
+ args += fmt.Sprintf(" -v %s:%s", *vppSourceFileDir, *vppSourceFileDir)
+ }
args += " --name " + c.name + " " + c.image
args += " " + c.extraRunningArgs
return args
}
+func (c *Container) runWithRetry(cmd string) error {
+ nTries := 5
+ for i := 0; i < nTries; i++ {
+ err := exechelper.Run(cmd)
+ if err == nil {
+ return nil
+ }
+ time.Sleep(1 * time.Second)
+ }
+ return fmt.Errorf("failed to run container command")
+}
+
func (c *Container) create() error {
cmd := "docker create " + c.getContainerArguments()
c.suite.log(cmd)
func (c *Container) start() error {
cmd := "docker start " + c.name
c.suite.log(cmd)
- return exechelper.Run(cmd)
+ return c.runWithRetry(cmd)
}
func (c *Container) prepareCommand() (string, error) {
if err != nil {
return err
}
-
- return exechelper.Run(cmd)
+ return c.runWithRetry(cmd)
}
func (c *Container) addVolume(hostDir string, containerDir string, isDefaultWorkDir bool) {
return cliOption
}
-func (c *Container) newVppInstance(additionalConfig ...Stanza) (*VppInstance, error) {
+func (c *Container) newVppInstance(cpus []int, additionalConfigs ...Stanza) (*VppInstance, error) {
vpp := new(VppInstance)
vpp.container = c
-
- if len(additionalConfig) > 0 {
- vpp.additionalConfig = additionalConfig[0]
- }
-
+ vpp.cpus = cpus
+ vpp.additionalConfig = append(vpp.additionalConfig, additionalConfigs...)
c.vppInstance = vpp
-
return vpp, nil
}