diff -Nru ubuntu-fan-0.12.0/debian/changelog ubuntu-fan-0.12.0.1/debian/changelog --- ubuntu-fan-0.12.0/debian/changelog 2016-07-01 18:10:50.000000000 +0000 +++ ubuntu-fan-0.12.0.1/debian/changelog 2017-01-16 16:01:42.000000000 +0000 @@ -1,3 +1,12 @@ +ubuntu-fan (0.12.0.1) yakkety; urgency=low + + * fanatic: Support new (>=1.12) docker network management commands + (LP: #1656875). + * dep8: Added ADT test case for docker. This also required a minor change + to the test setup in fanatic to suppress output to stderr. + + -- Stefan Bader Mon, 16 Jan 2017 17:01:42 +0100 + ubuntu-fan (0.12.0) yakkety; urgency=medium * fanatic: install ping and nc when needed (LP: #1586176) diff -Nru ubuntu-fan-0.12.0/debian/tests/control ubuntu-fan-0.12.0.1/debian/tests/control --- ubuntu-fan-0.12.0/debian/tests/control 1970-01-01 00:00:00.000000000 +0000 +++ ubuntu-fan-0.12.0.1/debian/tests/control 2017-01-16 16:01:42.000000000 +0000 @@ -0,0 +1,3 @@ +Tests: docker +Depends: ubuntu-fan, docker.io +Restrictions: needs-root, isolation-machine diff -Nru ubuntu-fan-0.12.0/debian/tests/docker ubuntu-fan-0.12.0.1/debian/tests/docker --- ubuntu-fan-0.12.0/debian/tests/docker 1970-01-01 00:00:00.000000000 +0000 +++ ubuntu-fan-0.12.0.1/debian/tests/docker 2017-01-16 16:01:42.000000000 +0000 @@ -0,0 +1,69 @@ +#!/bin/bash + +function Abort() +{ + echo "FAIL: $*" >&2 + exit 1 +} + +http_proxy="" +https_proxy="" +if echo "" | nc -w 2 squid.internal 3128 >/dev/null 2>&1; then + INFO="Running in the Canonical CI environment" + http_proxy="http://squid.internal:3128" + https_proxy="https://squid.internal:3128" +elif echo "" | nc -w 2 10.245.64.1 3128 >/dev/null 2>&1; then + INFO="Running in the Canonical enablement environment" + http_proxy="http://10.245.64.1:3128" + https_proxy="https://10.245.64.1:3128" +elif echo "" | nc -w 2 91.189.89.216 3128 >/dev/null 2>&1; then + INFO="Running in the Canonical enablement environment" + http_proxy="http://91.189.89.216:3128" + https_proxy="https://91.189.89.216:3128" +fi +export http_proxy +export https_proxy + +URI="http://index.docker.io/v1/repositories/library/ubuntu/images" +if wget -q -O/dev/null $URI; then + echo $INFO +else + unset http_proxy + unset https_proxy +fi + +if [ -n "$http_proxy" ]; then + if [ ! -d /etc/systemd/system/docker.service.d ]; then + mkdir /etc/systemd/system/docker.service.d + fi + echo -ne "[Service]\nEnvironment=\"HTTP_PROXY=$http_proxy\"\n" \ + >/etc/systemd/system/docker.service.d/http-proxy.conf + systemctl daemon-reload + systemctl restart docker.service +fi + +echo "II: Auto-create Fan Bridge..." +echo -e '\n\n' | fanatic enable-fan || Abort "error on enable-fan" + +FAN_BRIDGE=$(brctl show | awk '/fan-[0-9]/{print $1}') +if [ "$FAN_BRIDGE" = "" ]; then + Abort "there seems to be no Fan Bridge" +fi + +echo "II: Create docker Fan Network..." +echo -e '\n\n' | fanatic enable-docker || Abort "error on enable-docker" + +echo "II: Test docker..." +echo -e '\n\n' | fanatic test-local-docker || Abort "error on docker test" + +echo "II: Undefining docker Fan Network..." +echo -e '\n\n' | fanatic disable-docker || Abort "error on disable-docker" + +ifconfig $FAN_BRIDGE || Abort "disable docker deconfigured $FAN_BRIDGE" + +echo "II: Removing Fan Bridge..." +echo -e '\n\n' | fanatic disable-fan + +echo "PASS" + +exit 0 diff -Nru ubuntu-fan-0.12.0/fanatic ubuntu-fan-0.12.0.1/fanatic --- ubuntu-fan-0.12.0/fanatic 2016-06-30 14:10:24.000000000 +0000 +++ ubuntu-fan-0.12.0.1/fanatic 2017-01-16 16:01:42.000000000 +0000 @@ -157,7 +157,7 @@ if twiddle_lxd_config remove-check "$device" "$fan_bridge"; then fail "LXD still configured, unable to disable fan" fi - if twiddle_docker_config remove-check "$device"; then + if twiddle_docker_config remove-check "$device" "$fan_bridge"; then fail "docker still configured, unable to disable fan" fi @@ -179,7 +179,7 @@ fi } -twiddle_docker_config() +twiddle_docker_config_old() { local cmd="$1" local tag="$2" @@ -242,6 +242,65 @@ esac } +twiddle_docker_config_1_12() +{ + local cmd="$1" + local tag="$2" + local fan_bridge="$3" + + local conf="$(docker network inspect $fan_bridge 2>/dev/null)" + + case "$cmd" in + add) + local fan_cidr="$4" + local fan_mtu="$5" + local fan_overlay="$6" + local fan_host="$7" + local fan_rsvd="$(echo $fan_cidr | cut -d/ -f1)" + + docker -D network create --driver bridge \ + -o "com.docker.network.bridge.name=$fan_bridge" \ + -o "com.docker.network.driver.mtu=$fan_mtu" \ + --subnet $fan_overlay \ + --ip-range $fan_cidr \ + --gateway $fan_host \ + --aux-address "reserved0=$fan_rsvd" \ + "$fan_bridge" + return $? + ;; + remove) + local clist=$(echo "$conf"|awk '/Containers/{print $NF}') + + if [ "$clist" != "{}," ]; then + fail "$0: $fan_bridge still has bound containers!" + fi + docker network rm "$fan_bridge" + return $? + ;; + remove-check) + if [ ! -e /usr/bin/docker -o "$conf" = "[]" ]; then + return 1 + fi + return 0 + ;; + esac + + return 1 +} + +twiddle_docker_config() +{ + local dver=$(docker -v | awk '{sub(/,/, "", $3); print $3}') + + if dpkg --compare-versions "$dver" lt 1.12; then + twiddle_docker_config_old "$@" + else + twiddle_docker_config_1_12 "$@" + fi + + return $? +} + enable_docker() { local device="$1" @@ -259,7 +318,7 @@ fi # If we are alreday configured, skip. - if twiddle_docker_config remove-check "$device"; then + if twiddle_docker_config remove-check "$device" "$fan_bridge"; then echo "Docker already configured" return fi @@ -276,7 +335,9 @@ done fi progress "configuring docker for underlay:$underlay overlay:$overlay ($fan_bridge $fan_cidr)" - twiddle_docker_config add "$device" "$fan_bridge" "$fan_cidr" "$network_mtu" + + local fan_host=$( fan_to_host_ip "$overlay" "$underlay_addr" "$network_mode" ) + twiddle_docker_config add "$device" "$fan_bridge" "$fan_cidr" "$network_mtu" "$overlay" "$fan_host" # Restart docker for this to take effect. [ "$O_docker_restart" = '' ] && service docker restart @@ -289,7 +350,8 @@ local underlay="$3" local underlay_addr="$4" - if twiddle_docker_config remove-check "$device"; then + local fan_bridge=$( fan_to_bridge "$overlay" "$underlay" "$network_mode" ) + if twiddle_docker_config remove-check "$device" "$fan_bridge"; then if [ "$interactive" -eq 1 ]; then while : do @@ -302,7 +364,7 @@ done fi progress "de-configuring docker underlay:$underlay overlay:$overlay" - twiddle_docker_config remove "$device" + twiddle_docker_config remove "$device" "$fan_bridge" # Restart docker for this to take effect. [ "$O_docker_restart" = '' ] && service docker restart @@ -712,7 +774,7 @@ apt-get -qq update update=0 fi - apt-get -qq install -y iputils-ping + apt-get -qq install -y iputils-ping 2>&1 fi if ! type nc >/dev/null 2>&1; then echo "$test $master: installing nc ..." @@ -720,7 +782,7 @@ apt-get -q update update=0 fi - apt-get -qq install -y netcat-openbsd + apt-get -qq install -y netcat-openbsd 2>&1 fi } __payload_test() @@ -909,7 +971,7 @@ local ip=$( fan_to_host_ip "$overlay" "$underlay" "$network_mode" ) local name="fanatic-test" - if ! twiddle_docker_config remove-check "$device"; then + if ! twiddle_docker_config remove-check "$device" "$fan_bridge"; then return fi @@ -939,10 +1001,20 @@ fi fi + local dver=$(docker -v | awk '{sub(/,/, "", $3); print $3}') + local net_opt="" + if dpkg --compare-versions "$dver" ge 1.12; then + net_opt="--network $fan_bridge" + fi + # Start a test container. echo "local docker test: creating test container ..." - docker run --name "$name" -d ubuntu sleep 3600 - ip_container=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$name") + docker run --name "$name" $net_opt -d ubuntu sleep 3600 + if [ "$net_opt" != "" ]; then + ip_container=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$name") + else + ip_container=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$name") + fi # Prepare the local host. local_prepare 'master' "$ip" "$ip_container"