Move initial DNS population into Go code

This commit is contained in:
Bryan Boreham committed 2017-04-17 19:41:47 +00:00
1 parent ef9f95f653
commit 4ad1c22ef6
3 files changed
+52 -13

No files matched your search

+3
View File
@@ -384,6 +384,9 @@ func main() {
ns.Start()
defer ns.Stop()
dnsserver.ActivateAndServe()
if dockerCli != nil {
populateDNS(ns, dockerCli, name, bridgeConfig.WeaveBridgeName)
}
defer dnsserver.Stop()
}
+49
View File
@@ -2,13 +2,16 @@ package main
import (
"net"
"strings"
docker "github.com/fsouza/go-dockerclient"
"github.com/weaveworks/mesh"
"github.com/weaveworks/weave/api"
"github.com/weaveworks/weave/common"
weavedocker "github.com/weaveworks/weave/common/docker"
"github.com/weaveworks/weave/ipam"
"github.com/weaveworks/weave/nameserver"
weavenet "github.com/weaveworks/weave/net"
"github.com/weaveworks/weave/net/address"
)
@@ -87,3 +90,49 @@ func findExistingAddresses(dockerCli *weavedocker.Client, bridgeName string) (ad
}
return addrs, nil
}
func populateDNS(ns *nameserver.Nameserver, dockerCli *weavedocker.Client, ourName mesh.PeerName, bridgeName string) (addrs []ipam.PreClaim, err error) {
// Find all veths connected to the bridge
peerIDs, err := weavenet.ConnectedToBridgeVethPeerIds(bridgeName)
if err != nil {
return nil, err
}
// Now iterate over all containers to see if they have a network
// namespace with an attached interface
if dockerCli != nil {
containerIDs, err := dockerCli.RunningContainerIDs()
if err != nil {
return nil, err
}
for _, cid := range containerIDs {
container, err := dockerCli.InspectContainer(cid)
if err != nil {
if _, ok := err.(*docker.NoSuchContainer); ok {
continue
}
return nil, err
}
if container.State.Pid != 0 {
// Docker allows containers to have fqdns in two wauys:
// where the container explicitly has a domain name, and when its
// hostname contains the domain name, recognized by it having dots.
if container.Config.Domainname == "" && !strings.Contains(container.Config.Hostname, ".") {
continue
}
netDevs, err := weavenet.GetNetDevsByVethPeerIds(container.State.Pid, peerIDs)
if err != nil {
return nil, err
}
fqdn := container.Config.Hostname + "." + container.Config.Domainname
for _, netDev := range netDevs {
for _, cidr := range netDev.CIDRs {
ns.AddEntryFQDN(fqdn, cid, ourName, address.FromIP4(cidr.IP))
}
}
}
}
}
return addrs, nil
}
-13
View File
@@ -1417,7 +1417,6 @@ launch_router() {
"$@")
wait_for_status $CONTAINER_NAME http_call $HTTP_ADDR
setup_awsvpc
populate_router
if [ -n "$ENABLE_PLUGIN" ]; then
wait_for_status $CONTAINER_NAME http_call_unix $CONTAINER_NAME plugin-status.sock
@@ -1437,17 +1436,6 @@ fetch_router_args() {
NO_DNS_OPT=$(echo $CONTAINER_ARGS | grep -o -e '--no-dns') || true
}
populate_dns_for_one_container() {
[ -z "$4" ] || with_container_fqdn $1 put_dns_fqdn $4
}
populate_router() {
if [ -z "$NO_DNS_OPT" ] ; then
# Tell the newly-started weaveDNS about existing weave IPs
with_container_addresses populate_dns_for_one_container weave:allids
fi
}
stop_router() {
! is_plugin_v1_enabled || util_op remove-plugin-network weave || true
stop $CONTAINER_NAME "Weave"
@@ -1673,7 +1661,6 @@ EOF
fetch_router_args
wait_for_status $CONTAINER_NAME http_call $HTTP_ADDR
setup_awsvpc
populate_router
;;
launch-proxy)
deprecation_warnings "$@"