Skip to content

Commit

Permalink
add spec feature: entrypoint
Browse files Browse the repository at this point in the history
  • Loading branch information
ak1ra24 committed Feb 6, 2020
1 parent 631d89e commit 4c551b6
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 72 deletions.
29 changes: 20 additions & 9 deletions internal/pkg/shell/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,16 @@ type PostFini struct {

// Node
type Node struct {
Name string `yaml:"name" mapstructure:"name"`
Type string `yaml:"type" mapstructure:"type"`
NetBase string `yaml:"net_base" mapstructure:"net_base"`
VolumeBase string `yaml:"volume" mapstructure:"volume"`
Image string `yaml:"image" mapstructure:"image"`
Interfaces []Interface `yaml:"interfaces" mapstructure:"interfaces"`
Sysctls []Sysctl `yaml:"sysctls" mapstructure:"sysctls"`
Mounts []string `yaml:"mounts,flow" mapstructure:"mounts,flow"`
Name string `yaml:"name" mapstructure:"name"`
Type string `yaml:"type" mapstructure:"type"`
NetBase string `yaml:"net_base" mapstructure:"net_base"`
VolumeBase string `yaml:"volume" mapstructure:"volume"`
Image string `yaml:"image" mapstructure:"image"`
Interfaces []Interface `yaml:"interfaces" mapstructure:"interfaces"`
Sysctls []Sysctl `yaml:"sysctls" mapstructure:"sysctls"`
Mounts []string `yaml:"mounts,flow" mapstructure:"mounts,flow"`
HostNameIgnore bool `yaml:"hostname_ignore" mapstructure:"hostname_ignore"`
EntryPoint string `yaml:"entrypoint" mapstructure:"entrypoint"`
}

// Interface
Expand Down Expand Up @@ -397,13 +399,22 @@ func (node *Node) CreateNode() []string {
node.NetBase = "none"
}
if node.Type == "docker" || node.Type == "" {
createNodeCmd = fmt.Sprintf("docker run -td --hostname %s --net %s --name %s --rm --privileged ", node.Name, node.NetBase, node.Name)
createNodeCmd = fmt.Sprintf("docker run -td --net %s --name %s --rm --privileged ", node.NetBase, node.Name)

if !node.HostNameIgnore {
createNodeCmd += fmt.Sprintf("--hostname %s ", node.Name)
}

if len(node.Sysctls) != 0 {
for _, sysctl := range node.Sysctls {
createNodeCmd += fmt.Sprintf("--sysctl %s ", sysctl.Sysctl)
}
}

if node.EntryPoint != "" {
createNodeCmd += fmt.Sprintf("--entrypoint %s ", node.EntryPoint)
}

if node.VolumeBase == "" {
createNodeCmd += fmt.Sprintf("-v /tmp/tinet:/tinet ")
} else {
Expand Down
159 changes: 96 additions & 63 deletions internal/pkg/shell/shell_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,15 @@ func TestNodeConfig_ExecConf(t *testing.T) {

func TestNode_DeleteNode(t *testing.T) {
type fields struct {
Name string
Type string
NetBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
Name string
Type string
NetBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
HostNameIgnore bool
EntryPoint string
}
tests := []struct {
name string
Expand Down Expand Up @@ -172,13 +174,15 @@ func TestNode_DeleteNode(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
node := &Node{
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
HostNameIgnore: tt.fields.HostNameIgnore,
EntryPoint: tt.fields.EntryPoint,
}
if got := node.DeleteNode(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Node.DeleteNode() = %v, want %v", got, tt.want)
Expand Down Expand Up @@ -474,14 +478,16 @@ func TestExecCmd(t *testing.T) {

func TestNode_CreateNode(t *testing.T) {
type fields struct {
Name string
Type string
NetBase string
VolumeBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
Name string
Type string
NetBase string
VolumeBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
HostNameIgnore bool
EntryPoint string
}
tests := []struct {
name string
Expand All @@ -501,7 +507,7 @@ func TestNode_CreateNode(t *testing.T) {
},
},
},
want: []string{"docker run -td --hostname R1 --net none --name R1 --rm --privileged -v /tmp/tinet:/tinet slankdev/frr"},
want: []string{"docker run -td --net none --name R1 --rm --privileged --hostname R1 -v /tmp/tinet:/tinet slankdev/frr"},
},
{
name: "create docker node net None with sysctls",
Expand All @@ -524,7 +530,7 @@ func TestNode_CreateNode(t *testing.T) {
},
},
},
want: []string{"docker run -td --hostname R1 --net none --name R1 --rm --privileged --sysctl net.ipv4.ip_forward=1 --sysctl net.ipv6.conf.all.forwarding=1 -v /tmp/tinet:/tinet slankdev/frr"},
want: []string{"docker run -td --net none --name R1 --rm --privileged --hostname R1 --sysctl net.ipv4.ip_forward=1 --sysctl net.ipv6.conf.all.forwarding=1 -v /tmp/tinet:/tinet slankdev/frr"},
},
{
name: "create docker node net bridge",
Expand All @@ -540,7 +546,7 @@ func TestNode_CreateNode(t *testing.T) {
},
},
},
want: []string{"docker run -td --hostname R1 --net bridge --name R1 --rm --privileged -v /tmp/tinet:/tinet slankdev/frr"},
want: []string{"docker run -td --net bridge --name R1 --rm --privileged --hostname R1 -v /tmp/tinet:/tinet slankdev/frr"},
},
{
name: "create netns node",
Expand Down Expand Up @@ -615,7 +621,7 @@ func TestNode_CreateNode(t *testing.T) {
"/usr/share/vim:/mnt/vim",
},
},
want: []string{"docker run -td --hostname T1 --net none --name T1 --rm --privileged -v /tmp/tinet:/tinet -v `pwd`:/mnt/test -v /usr/share/vim:/mnt/vim slankdev/frr"},
want: []string{"docker run -td --net none --name T1 --rm --privileged --hostname T1 -v /tmp/tinet:/tinet -v `pwd`:/mnt/test -v /usr/share/vim:/mnt/vim slankdev/frr"},
},
{
name: "create node with specify tinet volume",
Expand All @@ -631,20 +637,39 @@ func TestNode_CreateNode(t *testing.T) {
},
},
},
want: []string{"docker run -td --hostname T1 --net none --name T1 --rm --privileged -v /tmp/ak1ra24:/tinet slankdev/frr"},
want: []string{"docker run -td --net none --name T1 --rm --privileged --hostname T1 -v /tmp/ak1ra24:/tinet slankdev/frr"},
},
{
name: "create node with entrypoint",
fields: fields{
Name: "T1",
Image: "slankdev/frr",
VolumeBase: "/tmp/ak1ra24",
Interfaces: []Interface{
Interface{
Name: "net0",
Type: "direct",
Args: "T2#net0",
},
},
EntryPoint: "bash",
},
want: []string{"docker run -td --net none --name T1 --rm --privileged --hostname T1 --entrypoint bash -v /tmp/ak1ra24:/tinet slankdev/frr"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
node := &Node{
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
VolumeBase: tt.fields.VolumeBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
VolumeBase: tt.fields.VolumeBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
HostNameIgnore: tt.fields.HostNameIgnore,
EntryPoint: tt.fields.EntryPoint,
}
if got := node.CreateNode(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Node.CreateNode() = %v, want %v", got, tt.want)
Expand Down Expand Up @@ -941,13 +966,15 @@ func TestInterface_P2cLink(t *testing.T) {

func TestNode_Mount_docker_netns(t *testing.T) {
type fields struct {
Name string
Type string
NetBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
Name string
Type string
NetBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
HostNameIgnore bool
EntryPoint string
}
tests := []struct {
name string
Expand All @@ -974,13 +1001,15 @@ func TestNode_Mount_docker_netns(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
node := &Node{
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
HostNameIgnore: tt.fields.HostNameIgnore,
EntryPoint: tt.fields.EntryPoint,
}
if got := node.Mount_docker_netns(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Node.Mount_docker_netns() = %v, want %v", got, tt.want)
Expand Down Expand Up @@ -1017,13 +1046,15 @@ func TestGetContainerPid(t *testing.T) {

func TestNode_DelNsCmd(t *testing.T) {
type fields struct {
Name string
Type string
NetBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
Name string
Type string
NetBase string
Image string
Interfaces []Interface
Sysctls []Sysctl
Mounts []string
HostNameIgnore bool
EntryPoint string
}
tests := []struct {
name string
Expand All @@ -1050,13 +1081,15 @@ func TestNode_DelNsCmd(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
node := &Node{
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
Name: tt.fields.Name,
Type: tt.fields.Type,
NetBase: tt.fields.NetBase,
Image: tt.fields.Image,
Interfaces: tt.fields.Interfaces,
Sysctls: tt.fields.Sysctls,
Mounts: tt.fields.Mounts,
HostNameIgnore: tt.fields.HostNameIgnore,
EntryPoint: tt.fields.EntryPoint,
}
if got := node.DelNsCmd(); got != tt.want {
t.Errorf("Node.DelNsCmd() = %v, want %v", got, tt.want)
Expand Down

0 comments on commit 4c551b6

Please sign in to comment.