Merge branch 'master' into 130_launch_without_ip
Plus a bit of a refactoring, to avoid duplicating the CIDR regexp. Plus some minor cosmetic tweaks. Conflicts: README.md weave
This commit is contained in:
commit
de82adce46
3 files changed
+58
-31
No files matched your search
@@ -86,9 +86,10 @@ We repeat similar steps on $HOST2...
|
||||
|
||||
The only difference, apart from the choice of IP address for the
|
||||
application container, is that we tell our weave that it should peer
|
||||
with the weave on $HOST1 (specified as the IP address or hostname by
|
||||
which $HOST2 can reach it). NB: if there is a firewall between $HOST1
|
||||
and $HOST2, you must open port 6783 for TCP and UDP.
|
||||
with the weave on $HOST1 (specified as the IP address or hostname, and
|
||||
optional `:port`, by which $HOST2 can reach it). NB: if there is a
|
||||
firewall between $HOST1 and $HOST2, you must open port 6783 for TCP
|
||||
and UDP.
|
||||
|
||||
Note that we could instead have told the weave on $HOST1 to connect to
|
||||
$HOST2, or told both about each other. Order does not matter here;
|
||||
|
||||
Vendored
+1
-1
@@ -6,7 +6,7 @@ pkgs = "lxc-docker golang ethtool libpcap-dev git mercurial"
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
config.vm.box = "phusion/ubuntu-14.04-amd64"
|
||||
config.vm.box_url = "https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box"
|
||||
|
||||
|
||||
config.vm.network "private_network", ip: vm_ip
|
||||
|
||||
config.vm.synced_folder "./", "/home/vagrant/src/github.com/zettio/weave"
|
||||
|
||||
@@ -3,7 +3,7 @@ set -e
|
||||
|
||||
usage() {
|
||||
echo "Usage:"
|
||||
echo "weave launch [-password <password>] <peer_host> ..."
|
||||
echo "weave launch [-password <password>] <peer> ..."
|
||||
echo "weave run <cidr> <docker run args> ..."
|
||||
echo "weave start <cidr> <container_id>"
|
||||
echo "weave attach <cidr> <container_id>"
|
||||
@@ -15,7 +15,8 @@ usage() {
|
||||
echo "weave stop"
|
||||
echo "weave reset"
|
||||
echo
|
||||
echo "where <cidr> is of the form <ip_address>/<routing_prefix_length>"
|
||||
echo "where <cidr> is of the form <ip_address>/<routing_prefix_length>, and"
|
||||
echo " <peer> is of the form <ip_address_or_fqdn>[:<port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -33,9 +34,12 @@ command_exists () {
|
||||
[ $# -gt 0 ] || usage
|
||||
|
||||
IMAGE=zettio/weave
|
||||
CONTAINER_NAME=weave
|
||||
BRIDGE=weave
|
||||
CONTAINER_IFNAME=ethwe
|
||||
MTU=65535
|
||||
PORT=6783
|
||||
HTTP_PORT=6784
|
||||
|
||||
COMMAND=$1
|
||||
|
||||
@@ -51,6 +55,19 @@ check_command_and_run() {
|
||||
fi
|
||||
}
|
||||
|
||||
is_cidr() {
|
||||
# The regexp here is far from precise, but good enough.
|
||||
echo "$1" | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$' >/dev/null
|
||||
}
|
||||
|
||||
validate_cidr() {
|
||||
if ! is_cidr "$1" ; then
|
||||
echo "Invalid CIDR: $1" >&2
|
||||
echo "CIDR must of be of form <ip_address>/<routing_prefix_length>, e.g. 10.0.1.1/24" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
run_iptables() {
|
||||
# -w is recent addition to iptables
|
||||
if [ -z "$CHECKED_IPTABLES_W" ] ; then
|
||||
@@ -228,7 +245,7 @@ detach() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -n "$(ip netns exec $NETNS ip -f inet addr show dev ethwe)" ] ; then
|
||||
if [ -n "$(ip netns exec $NETNS ip -f inet addr show dev $CONTAINER_IFNAME)" ] ; then
|
||||
# other addresses are left, leave the device alone
|
||||
return 0
|
||||
fi
|
||||
@@ -239,20 +256,20 @@ detach() {
|
||||
|
||||
case "$COMMAND" in
|
||||
launch)
|
||||
case $(docker inspect --format '{{ .State.Running }} {{ .Config.Image }}' weave 2>/dev/null) in
|
||||
case $(docker inspect --format '{{ .State.Running }} {{ .Config.Image }}' $CONTAINER_NAME 2>/dev/null) in
|
||||
"true $IMAGE")
|
||||
echo "Weave is already running." >&2
|
||||
exit 1
|
||||
;;
|
||||
"false $IMAGE")
|
||||
docker rm weave >/dev/null
|
||||
docker rm $CONTAINER_NAME >/dev/null
|
||||
;;
|
||||
true*)
|
||||
echo "Found another running container named 'weave'. Aborting." >&2
|
||||
echo "Found another running container named '$CONTAINER_NAME'. Aborting." >&2
|
||||
exit 1
|
||||
;;
|
||||
false*)
|
||||
echo "Found another container named 'weave'. Aborting." >&2
|
||||
echo "Found another container named '$CONTAINER_NAME'. Aborting." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -264,21 +281,21 @@ case "$COMMAND" in
|
||||
# (eth0, wlan0, etc) so the name becomes stable across host
|
||||
# restarts.
|
||||
MACADDR=`cat /sys/class/net/$BRIDGE/address`
|
||||
# Backward compatibility... Note that the regexp here is far
|
||||
# from precise, but good enough.
|
||||
if echo "$1" | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$' >/dev/null ; then
|
||||
echo "WARNING: $1 parameter swallowed; 'weave launch' no longer takes a CIDR as the first parameter" >&2
|
||||
# backward compatibility...
|
||||
if is_cidr "$1" ; then
|
||||
echo "WARNING: $1 parameter ignored; 'weave launch' no longer takes a CIDR as the first parameter" >&2
|
||||
shift 1
|
||||
fi
|
||||
# Set WEAVE_DOCKER_ARGS in the environment in order to supply
|
||||
# additional parameters, such as resource limits, to docker
|
||||
# when launching the weave container.
|
||||
CONTAINER=$(docker run --privileged -d --name=weave -p 6783:6783/tcp -p 6783:6783/udp $WEAVE_DOCKER_ARGS $IMAGE -name $MACADDR "$@" | tail -n 1)
|
||||
CONTAINER=$(docker run --privileged -d --name=$CONTAINER_NAME -p $PORT:$PORT/tcp -p $PORT:$PORT/udp $WEAVE_DOCKER_ARGS $IMAGE -name $MACADDR "$@" | tail -n 1)
|
||||
with_container_netns $CONTAINER launch
|
||||
echo $CONTAINER
|
||||
;;
|
||||
status)
|
||||
if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave 2>/dev/null) ; then
|
||||
[ $# -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
|
||||
@@ -287,17 +304,18 @@ case "$COMMAND" in
|
||||
exit 1
|
||||
fi
|
||||
if command_exists wget ; then
|
||||
wget -O - -q $DOCKERIP:6784/status
|
||||
wget -O - -q $DOCKERIP:$HTTP_PORT/status
|
||||
elif command_exists curl ; then
|
||||
curl $DOCKERIP:6784/status
|
||||
curl $DOCKERIP:$HTTP_PORT/status
|
||||
else
|
||||
echo "Cannot find wget or curl. Install one of them for 'weave status' to function." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
version)
|
||||
[ $# -eq 0 ] || usage
|
||||
# Try the running container first; if no luck try the image
|
||||
if ! DOCKERIMAGE=$(docker inspect --format='{{ .Image }}' weave 2>/dev/null) ; then
|
||||
if ! DOCKERIMAGE=$(docker inspect --format='{{ .Image }}' $CONTAINER_NAME 2>/dev/null) ; then
|
||||
if ! DOCKERIMAGE=$(docker inspect --format='{{ .Id }}' $IMAGE 2>/dev/null) ; then
|
||||
echo "Unable to find $IMAGE image." >&2
|
||||
exit 1
|
||||
@@ -307,6 +325,7 @@ case "$COMMAND" in
|
||||
;;
|
||||
run)
|
||||
[ $# -gt 0 ] || usage
|
||||
validate_cidr $1
|
||||
CIDR=$1
|
||||
shift 1
|
||||
create_bridge
|
||||
@@ -315,23 +334,27 @@ case "$COMMAND" in
|
||||
echo $CONTAINER
|
||||
;;
|
||||
start)
|
||||
[ $# -gt 1 ] || usage
|
||||
[ $# -eq 2 ] || usage
|
||||
validate_cidr $1
|
||||
create_bridge
|
||||
CONTAINER=$(docker start $2)
|
||||
with_container_netns $CONTAINER attach $1
|
||||
echo $CONTAINER
|
||||
;;
|
||||
attach)
|
||||
[ $# -gt 1 ] || usage
|
||||
[ $# -eq 2 ] || usage
|
||||
validate_cidr $1
|
||||
create_bridge
|
||||
with_container_netns $2 attach $1
|
||||
;;
|
||||
detach)
|
||||
[ $# -gt 1 ] || usage
|
||||
[ $# -eq 2 ] || usage
|
||||
validate_cidr $1
|
||||
with_container_netns $2 detach $1
|
||||
;;
|
||||
expose)
|
||||
[ $# -gt 0 ] || usage
|
||||
[ $# -eq 1 ] || usage
|
||||
validate_cidr $1
|
||||
create_bridge
|
||||
if ! ip addr show dev $BRIDGE | grep -qF $1
|
||||
then
|
||||
@@ -341,7 +364,8 @@ case "$COMMAND" in
|
||||
fi
|
||||
;;
|
||||
hide)
|
||||
[ $# -gt 0 ] || usage
|
||||
[ $# -eq 1 ] || usage
|
||||
validate_cidr $1
|
||||
create_bridge
|
||||
if ip addr show dev $BRIDGE | grep -qF $1
|
||||
then
|
||||
@@ -351,16 +375,18 @@ case "$COMMAND" in
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
if ! docker kill weave >/dev/null 2>&1 ; then
|
||||
[ $# -eq 0 ] || usage
|
||||
if ! docker kill $CONTAINER_NAME >/dev/null 2>&1 ; then
|
||||
echo "Weave is not running."
|
||||
fi
|
||||
docker rm -f weave >/dev/null 2>&1 || true
|
||||
check_command_and_run conntrack conntrack -D -p udp --dport 6783 >/dev/null 2>&1 || true
|
||||
docker rm -f $CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
check_command_and_run conntrack conntrack -D -p udp --dport $PORT >/dev/null 2>&1 || true
|
||||
;;
|
||||
reset)
|
||||
docker kill weave >/dev/null 2>&1 || true
|
||||
docker rm -f weave >/dev/null 2>&1 || true
|
||||
check_command_and_run conntrack conntrack -D -p udp --dport 6783 >/dev/null 2>&1 || true
|
||||
[ $# -eq 0 ] || usage
|
||||
docker kill $CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
docker rm -f $CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
check_command_and_run conntrack conntrack -D -p udp --dport $PORT >/dev/null 2>&1 || true
|
||||
destroy_bridge
|
||||
;;
|
||||
*)
|
||||
|
||||
Reference in new issue
Block a user