db823ed6e9
Definition of shared volumes and containers has been moved to yaml files to be together with network topology. Containers are automatically run at the beginning of each test case and stopped afterward. Type: test Signed-off-by: Maros Ondrejicka <maros.ondrejicka@pantheon.tech> Change-Id: I264cbb4f1355f8bd7aade221e9609fb5b9bd693e
79 lines
1.6 KiB
Go
Executable File
79 lines
1.6 KiB
Go
Executable File
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type NetDevConfig map[string]interface{}
|
|
type ContainerConfig map[string]interface{}
|
|
|
|
type YamlTopology struct {
|
|
Devices []NetDevConfig `yaml:"devices"`
|
|
Containers []ContainerConfig `yaml:"containers"`
|
|
Volumes []string `yaml:"volumes"`
|
|
}
|
|
|
|
func AddAddress(device, address, ns string) error {
|
|
c := []string{"ip", "addr", "add", address, "dev", device}
|
|
cmd := appendNetns(c, ns)
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to set ip address for %s: %v", device, err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func convertToNetConfig(t *YamlTopology) (*NetTopology, error) {
|
|
var topology NetTopology
|
|
for _, dev := range t.Devices {
|
|
topology = append(topology, NewNetConfig(dev))
|
|
}
|
|
return &topology, nil
|
|
}
|
|
|
|
func loadTopoFile(topoName string) (*NetTopology, error) {
|
|
var yamlTopo YamlTopology
|
|
|
|
data, err := ioutil.ReadFile(topoName)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("read error: %v", err)
|
|
}
|
|
|
|
err = yaml.Unmarshal(data, &yamlTopo)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing topology data: %v", err)
|
|
}
|
|
|
|
return convertToNetConfig(&yamlTopo)
|
|
}
|
|
|
|
func LoadTopology(path, topoName string) (*NetTopology, error) {
|
|
dir, err := os.Open(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer dir.Close()
|
|
|
|
files, err := dir.Readdir(0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for i := range files {
|
|
file := files[i]
|
|
fileName := file.Name()
|
|
|
|
// cut off file extension
|
|
f := strings.Split(fileName, ".")[0]
|
|
if f == topoName {
|
|
return loadTopoFile(path + fileName)
|
|
}
|
|
}
|
|
return nil, fmt.Errorf("topology '%s' not found", topoName)
|
|
}
|