From ad5845b67f2bd48ef78024aaac94d29a4e620f15 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Fri, 6 May 2016 14:11:34 +0100 Subject: [PATCH 1/3] Fix echo_ips --- weave | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave b/weave index 3662412f..2ddc1aae 100755 --- a/weave +++ b/weave @@ -1154,7 +1154,7 @@ echo_addresses() { echo_ips() { for CIDR in $3; do - echo ${3%/*} + echo ${CIDR%/*} done } From 260b416cd779fce1a12fa8ac878d320828017849 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Fri, 6 May 2016 12:02:45 +0100 Subject: [PATCH 2/3] Include interface name in container-addrs output --- common/utils.go | 3 ++- prog/weaveutil/addrs.go | 2 +- weave | 14 +++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/common/utils.go b/common/utils.go index 19b736d2..d856e40e 100644 --- a/common/utils.go +++ b/common/utils.go @@ -45,6 +45,7 @@ func WithNetNS(ns netns.NsHandle, work func() error) error { } type NetDev struct { + Name string MAC net.HardwareAddr CIDRs []*net.IPNet } @@ -97,7 +98,7 @@ func linkToNetDev(link netlink.Link) (*NetDev, error) { return nil, err } - netDev := &NetDev{MAC: link.Attrs().HardwareAddr} + netDev := &NetDev{Name: link.Attrs().Name, MAC: link.Attrs().HardwareAddr} for _, addr := range addrs { netDev.CIDRs = append(netDev.CIDRs, addr.IPNet) } diff --git a/prog/weaveutil/addrs.go b/prog/weaveutil/addrs.go index 06e9424b..9c0d45f5 100644 --- a/prog/weaveutil/addrs.go +++ b/prog/weaveutil/addrs.go @@ -27,7 +27,7 @@ func containerAddrs(args []string) error { } for _, netDev := range netDevs { - fmt.Printf("%12s %s", containerID, netDev.MAC.String()) + 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) diff --git a/weave b/weave index 2ddc1aae..673f70a2 100755 --- a/weave +++ b/weave @@ -1143,23 +1143,23 @@ with_container_addresses() { shift 1 CONTAINER_ADDRS=$(util_op container-addrs $BRIDGE "$@") || return 1 - echo "$CONTAINER_ADDRS" | while read CONTAINER_ID CONTAINER_MAC CONTAINER_IPS; do - $COMMAND "$CONTAINER_ID" "$CONTAINER_MAC" "$CONTAINER_IPS" + echo "$CONTAINER_ADDRS" | while read CONTAINER_ID CONTAINER_IFACE CONTAINER_MAC CONTAINER_IPS; do + $COMMAND "$CONTAINER_ID" "$CONTAINER_IFACE" "$CONTAINER_MAC" "$CONTAINER_IPS" done } echo_addresses() { - echo $1 $2 $3 + echo $1 $3 $4 } echo_ips() { - for CIDR in $3; do + for CIDR in $4; do echo ${CIDR%/*} done } echo_cidrs() { - echo $3 + echo $4 } peer_args() { @@ -1382,13 +1382,13 @@ check_overlap() { # Claim addresses for a container in IPAM. Expects to be called from # with_container_addresses. ipam_reclaim() { - for CIDR in $3 ; do + for CIDR in $4 ; do http_call $HTTP_ADDR PUT "/ip/$1/$CIDR?noErrorOnUnknown=true&?check-alive=true" || true done } ipam_reclaim_no_check_alive() { - for CIDR in $3 ; do + for CIDR in $4 ; do http_call $HTTP_ADDR PUT /ip/$1/$CIDR?noErrorOnUnknown=true || true done } From 158fa9d8e5ba0a70ce0130135f344fbd33e7340d Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Fri, 6 May 2016 12:35:36 +0100 Subject: [PATCH 3/3] Reclaim plugin addresses using container ID of '_' --- weave | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/weave b/weave index 673f70a2..3910f2c5 100755 --- a/weave +++ b/weave @@ -1382,8 +1382,13 @@ check_overlap() { # Claim addresses for a container in IPAM. Expects to be called from # with_container_addresses. ipam_reclaim() { + CONTAINER_ID="$1" + # The weave IP addresses of containers attached by the plugin are + # recorded specially in IPAM, since the container id is not know + # at the time. + [ "$2" = "$CONTAINER_IFNAME" ] || CONTAINER_ID="_" for CIDR in $4 ; do - http_call $HTTP_ADDR PUT "/ip/$1/$CIDR?noErrorOnUnknown=true&?check-alive=true" || true + http_call $HTTP_ADDR PUT "/ip/$CONTAINER_ID/$CIDR?noErrorOnUnknown=true&?check-alive=true" || true done }