From af6f6647ae762be43adc825bb76a95ab1276a199 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Mon, 3 Aug 2015 17:34:42 +0100 Subject: [PATCH] Handle optional IPAM and DNS --- ipam/status.go | 11 ++++++++--- nameserver/status.go | 8 ++++++-- prog/weaver/http.go | 4 ++++ prog/weaver/status.go | 6 +++--- router/status.go | 4 ++-- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/ipam/status.go b/ipam/status.go index 1b650dbaa7..2dbce118c0 100644 --- a/ipam/status.go +++ b/ipam/status.go @@ -18,15 +18,20 @@ type IPAMEntryStatus struct { Version uint32 } -func NewIPAMStatus(allocator *Allocator, defaultSubnet address.CIDR) IPAMStatus { - resultChan := make(chan IPAMStatus) +func NewIPAMStatus(allocator *Allocator, defaultSubnet address.CIDR) *IPAMStatus { + if allocator == nil { + return nil + } + + resultChan := make(chan *IPAMStatus) allocator.actionChan <- func() { - resultChan <- IPAMStatus{ + resultChan <- &IPAMStatus{ paxos.NewPaxosStatus(allocator.paxos), allocator.universe.String(), defaultSubnet.String(), newIPAMEntryStatusSlice(allocator)} } + return <-resultChan } diff --git a/nameserver/status.go b/nameserver/status.go index 6e2cb2abbe..4a425f9363 100644 --- a/nameserver/status.go +++ b/nameserver/status.go @@ -15,8 +15,12 @@ type DNSEntryStatus struct { Version int } -func NewDNSStatus(ns *Nameserver, dnsServer *DNSServer) DNSStatus { - return DNSStatus{ +func NewDNSStatus(ns *Nameserver, dnsServer *DNSServer) *DNSStatus { + if dnsServer == nil { + return nil + } + + return &DNSStatus{ dnsServer.domain, dnsServer.address, dnsServer.ttl, diff --git a/prog/weaver/http.go b/prog/weaver/http.go index ab6cc913ed..10bec99e91 100644 --- a/prog/weaver/http.go +++ b/prog/weaver/http.go @@ -63,6 +63,7 @@ var statusTemplate = defTemplate("status", `\ DirectPeers: {{len .Router.ConnectionMaker.DirectPeers}} Reconnecting: {{len .Router.ConnectionMaker.Reconnects}} Unestablished: {{countUnestablished .Router.Peers}} +{{if .IPAM}}\ Service: ipam {{if .IPAM.Paxos}}\ @@ -73,12 +74,15 @@ var statusTemplate = defTemplate("status", `\ Range: {{.IPAM.Range}} DefaultSubnet: {{.IPAM.DefaultSubnet}} Entries: {{len .IPAM.Entries}} +{{end}}\ +{{if .DNS}}\ Service: dns Domain: {{.DNS.Domain}} Address: {{.DNS.Address}} TTL: {{.DNS.TTL}} Entries: {{len .DNS.Entries}} +{{end}}\ `) var peersTemplate = defTemplate("peers", `\ diff --git a/prog/weaver/status.go b/prog/weaver/status.go index bec2006f0a..7190e5b12d 100644 --- a/prog/weaver/status.go +++ b/prog/weaver/status.go @@ -8,9 +8,9 @@ import ( ) type WeaveStatus struct { - Router router.RouterStatus - IPAM ipam.IPAMStatus - DNS nameserver.DNSStatus + Router *router.RouterStatus `json:"Router,omitempty"` + IPAM *ipam.IPAMStatus `json:"IPAM,omitempty"` + DNS *nameserver.DNSStatus `json:"DNS,omitempty"` } func NewWeaveStatus( diff --git a/router/status.go b/router/status.go index a5cb13af06..4af26504da 100644 --- a/router/status.go +++ b/router/status.go @@ -64,8 +64,8 @@ type BroadcastRouteStatus struct { Via []string } -func NewRouterStatus(router *Router) RouterStatus { - return RouterStatus{ +func NewRouterStatus(router *Router) *RouterStatus { + return &RouterStatus{ router.UsingPassword(), router.PeerDiscovery, router.Ourself.Name.String(),