add 'weave launch-proxy --with-ipam' flag

This commit is contained in:
Paul Bellamy committed 2015-05-22 15:52:36 +01:00
1 parent d0320b43f9
commit cc82213147
6 files changed
+24 -25

No files matched your search

+4 -2
View File
@@ -22,9 +22,10 @@ type Proxy struct {
client *docker.Client
withDNS bool
dockerBridgeIP string
withIPAM bool
}
func NewProxy(targetURL string, withDNS bool) (*Proxy, error) {
func NewProxy(targetURL string, withDNS, withIPAM bool) (*Proxy, error) {
u, err := url.Parse(targetURL)
if err != nil {
return nil, err
@@ -58,6 +59,7 @@ func NewProxy(targetURL string, withDNS bool) (*Proxy, error) {
client: client,
withDNS: withDNS,
dockerBridgeIP: string(dockerBridgeIP),
withIPAM: withIPAM,
}, nil
}
@@ -68,7 +70,7 @@ func (proxy *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
case containerCreateRegexp.MatchString(path):
proxy.serveWithInterceptor(&createContainerInterceptor{proxy.client, proxy.withDNS, proxy.dockerBridgeIP}, w, r)
case containerStartRegexp.MatchString(path):
proxy.serveWithInterceptor(&startContainerInterceptor{proxy.client, proxy.withDNS}, w, r)
proxy.serveWithInterceptor(&startContainerInterceptor{proxy.client, proxy.withDNS, proxy.withIPAM}, w, r)
case execCreateRegexp.MatchString(path):
proxy.serveWithInterceptor(&createExecInterceptor{proxy.client}, w, r)
case strings.HasPrefix(path, "/weave"):
+4 -12
View File
@@ -9,8 +9,9 @@ import (
)
type startContainerInterceptor struct {
client *docker.Client
withDNS bool
client *docker.Client
withDNS bool
withIPAM bool
}
func (i *startContainerInterceptor) InterceptRequest(r *http.Request) error {
@@ -24,25 +25,16 @@ func (i *startContainerInterceptor) InterceptResponse(r *http.Response) error {
}
cidrs, ok := weaveCIDRsFromConfig(container.Config)
if !ok {
if !ok && !i.withIPAM {
Debug.Print("No Weave CIDR, ignoring")
return nil
}
if len(cidrs) == 0 {
ipamCIDR, err := callWeave("ipam-cidr", container.ID)
if err != nil {
Warning.Printf("Determining container %s IP via IPAM failed: %v, %v", container.ID, err, string(ipamCIDR))
return nil
}
cidrs = strings.Fields(string(ipamCIDR))
}
Info.Printf("Attaching container %s with WEAVE_CIDR \"%s\" to weave network", container.ID, strings.Join(cidrs, " "))
args := []string{"attach"}
args = append(args, cidrs...)
args = append(args, container.ID)
if _, err := callWeave(args...); err != nil {
Warning.Printf("Attaching container %s to weave network failed: %v", container.ID, err)
return nil
}
return nil
}
+5 -1
View File
@@ -65,7 +65,11 @@ With this done, we can automtaically assign an address to a container by providi
host1$ docker run -e WEAVE_CIDR= -ti ubuntu /bin/sh
More details on IPAM can be found in the [IPAM documentstion](ipam.html).
Alternatively, to enable automatic allocation of all containers without a `WEAVE_CIDR`, we can launch the proxy with the `--with-ipam` option. For example:
host1$ weave launch-proxy --with-ipam
More details on IPAM can be found in the [IPAM documentation](ipam.html).
## Limitations
+7 -4
View File
@@ -9,11 +9,14 @@ start_suite "Ping proxied containers over cross-host weave network (with IPAM)"
weave_on $HOST1 launch -iprange $UNIVERSE
weave_on $HOST1 launch-proxy
weave_on $HOST2 launch -iprange $UNIVERSE $HOST1
weave_on $HOST2 launch-proxy
weave_on $HOST2 launch-proxy --with-ipam
proxy start_container $HOST1 -e WEAVE_CIDR= --name=c1
proxy start_container $HOST2 -e WEAVE_CIDR= --name=c2
proxy docker_on $HOST1 run -e WEAVE_CIDR= --name=c1 -dt $SMALL_IMAGE /bin/sh
proxy docker_on $HOST2 run --name=c2 -dt $SMALL_IMAGE /bin/sh
C1=$(container_ip $HOST1 c1)
C2=$(container_ip $HOST2 c2)
assert_raises "exec_on $HOST1 c1 $PING $C2"
assert_raises "proxy exec_on $HOST1 c1 $PING $C2"
assert_raises "proxy exec_on $HOST2 c2 $PING $C1"
end_suite
+1 -4
View File
@@ -27,7 +27,7 @@ usage() {
echo "weave setup"
echo "weave launch [-password <password>] [-nickname <nickname>] [-iprange <cidr>] <peer> ..."
echo "weave launch-dns <cidr>"
echo "weave launch-proxy [-H <docker_endpoint>] [--with-dns]"
echo "weave launch-proxy [-H <docker_endpoint>] [--with-dns] [--with-ipam]"
echo "weave connect <peer>"
echo "weave forget <peer>"
echo "weave run [--with-dns] [<cidr> ...] <docker run args> ..."
@@ -928,9 +928,6 @@ case "$COMMAND" in
docker_bridge_ip
echo -n $DOCKER_BRIDGE_IP
;;
ipam-cidr)
get_ipam_cidr "$@" && echo "$CIDR_ARGS"
;;
start)
collect_cidr_args "$@"
shift $CIDR_COUNT
+3 -2
View File
@@ -16,12 +16,13 @@ var (
func main() {
var target, listen string
var withDNS, debug bool
var withDNS, withIPAM, debug bool
getopt.BoolVarLong(&debug, "debug", 'd', "log debugging information")
getopt.StringVar(&target, 'H', fmt.Sprintf("docker daemon URL to proxy (default %s)", defaultTarget))
getopt.StringVar(&listen, 'L', fmt.Sprintf("address on which to listen (default %s)", defaultListen))
getopt.BoolVarLong(&withDNS, "with-dns", 'w', "instruct created containers to use weaveDNS as their nameserver")
getopt.BoolVarLong(&withIPAM, "with-ipam", 'i', "automatically allocate addresses for containers without a WEAVE_CIDR")
getopt.Parse()
if target == "" {
@@ -36,7 +37,7 @@ func main() {
InitDefaultLogging(true)
}
p, err := proxy.NewProxy(target, withDNS)
p, err := proxy.NewProxy(target, withDNS, withIPAM)
if err != nil {
Error.Fatalf("Could not start proxy: %s", err)
}