introduce 'weave connect' to connect a running router to other peers

Getting this to work with 'wget' is just too cumbersome especially
when it comes to getting the error message out. So 'curl' only.
This commit is contained in:
Matthias Radestock committed 2014-10-27 09:15:14 +00:00
1 parent acbabc4f9e
commit 6393e545ae
2 files changed
+38 -15

No files matched your search

+30 -15
View File
@@ -3,13 +3,14 @@ set -e
usage() {
echo "Usage:"
echo "weave launch <cidr> [-password <password>] <peer> ..."
echo "weave run <cidr> <docker run args> ..."
echo "weave start <cidr> <container_id>"
echo "weave attach <cidr> <container_id>"
echo "weave detach <cidr> <container_id>"
echo "weave expose <cidr>"
echo "weave hide <cidr>"
echo "weave launch <cidr> [-password <password>] <peer> ..."
echo "weave run <cidr> <docker run args> ..."
echo "weave start <cidr> <container_id>"
echo "weave attach <cidr> <container_id>"
echo "weave detach <cidr> <container_id>"
echo "weave expose <cidr>"
echo "weave hide <cidr>"
echo "weave connect <peer>"
echo "weave status"
echo "weave version"
echo "weave stop"
@@ -126,6 +127,17 @@ stop_masquerading() {
run_iptables -t nat -X WEAVE >/dev/null 2>&1 || true
}
docker_ip() {
if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' $CONTAINER_NAME 2>/dev/null) ; then
echo "Weave is not running." >&2
exit 1
fi
if [ -z "$DOCKERIP" ] ; then
echo "Weave is not running." >&2
exit 1
fi
}
# the following borrows from https://github.com/jpetazzo/pipework
with_container_netns () {
CONTAINER="$1"
@@ -269,16 +281,19 @@ case "$COMMAND" in
with_container_netns $CONTAINER attach $CIDR eth0
echo $CONTAINER
;;
connect)
[ $# -eq 1 ] || usage
docker_ip
if command_exists curl ; then
curl -d peer=$1 $DOCKERIP:$HTTP_PORT/connect
else
echo "Cannot find curl. Install it for 'weave connect' to function." >&2
exit 1
fi
;;
status)
[ $# -eq 0 ] || usage
if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' $CONTAINER_NAME 2>/dev/null) ; then
echo "Weave is not running." >&2
exit 1
fi
if [ -z "$DOCKERIP" ] ; then
echo "Weave is not running." >&2
exit 1
fi
docker_ip
if command_exists wget ; then
wget -O - -q $DOCKERIP:$HTTP_PORT/status
elif command_exists curl ; then
+8
View File
@@ -141,6 +141,14 @@ func handleHttp(router *weave.Router) {
http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, router.Status())
})
http.HandleFunc("/connect", func (w http.ResponseWriter, r *http.Request) {
peer := r.FormValue("peer")
if addr, err := net.ResolveTCPAddr("tcp4", weave.NormalisePeerAddr(peer)); err == nil {
router.ConnectionMaker.InitiateConnection(addr.String())
} else {
http.Error(w, fmt.Sprint("invalid peer address: ", err), http.StatusBadRequest)
}
})
address := fmt.Sprintf(":%d", weave.HttpPort)
err := http.ListenAndServe(address, nil)
if err != nil {