Files
weave/prog/weaveutil/addrs.go
T

58 lines
1.2 KiB
Go

package main
import (
"fmt"
"github.com/fsouza/go-dockerclient"
"github.com/weaveworks/weave/common"
)
func containerAddrs(args []string) error {
if len(args) < 1 {
cmdUsage("container-addrs", "<bridgeName> [containerID ...]")
}
bridgeName := args[0]
c, err := docker.NewVersionedClientFromEnv("1.18")
if err != nil {
return err
}
for _, containerID := range args[1:] {
netDevs, err := getNetDevs(bridgeName, c, containerID)
if err != nil {
if _, ok := err.(*docker.NoSuchContainer); ok {
continue
}
return err
}
for _, netDev := range netDevs {
fmt.Printf("%12s %s %s", containerID, netDev.Name, netDev.MAC.String())
for _, cidr := range netDev.CIDRs {
prefixLength, _ := cidr.Mask.Size()
fmt.Printf(" %v/%v", cidr.IP, prefixLength)
}
fmt.Println()
}
}
return nil
}
func getNetDevs(bridgeName string, c *docker.Client, containerID string) ([]common.NetDev, error) {
if containerID == "weave:expose" {
return common.GetBridgeNetDev(bridgeName)
}
container, err := c.InspectContainer(containerID)
if err != nil {
return nil, err
}
if container.State.Pid == 0 {
return nil, nil
}
return common.GetWeaveNetDevs(container.State.Pid)
}