diff --git a/Makefile b/Makefile index bf324b4..378d1b8 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,14 @@ ORGANIZATION = RackHD PROJECT = neighborhood-manager -PROXY = rackhd +RACKHD = rackhd REGISTRY = registry - TTY = $(shell if [ -t 0 ]; then echo "-ti"; fi) DOCKER_DIR = /go/src/github.com/${ORGANIZATION}/${PROJECT} DOCKER_IMAGE = rackhd/golang:1.7.0-wheezy DOCKER_CMD = docker run --rm -v ${PWD}:${DOCKER_DIR} ${TTY} -w ${DOCKER_DIR} ${DOCKER_IMAGE} - # variable definitions COMMITHASH = $(shell git describe --tags --always --dirty) BUILDDATE = $(shell date -u) @@ -19,10 +17,8 @@ GOVERSION = $(shell go version) OSARCH = $(shell uname -sm) RELEASEVERSION = 0.1 - - #Flags to pass to main.go -PROXYFLAGS = -ldflags "-X 'main.binaryName=${PROXY}' \ +RACKHDFLAGS = -ldflags "-X 'main.binaryName=${RACKHD}' \ -X 'main.buildDate=${BUILDDATE}' \ -X 'main.buildUser=${BUILDER}' \ -X 'main.commitHash=${COMMITHASH}' \ @@ -43,7 +39,7 @@ SLOWTEST = 10 .PHONY: shell deps deps-local build build-local lint lint-local test test-local release -default: deps test build +default: deps test coveralls: @go get github.com/mattn/goveralls @@ -60,9 +56,19 @@ consul-shell: clean: @${DOCKER_CMD} make clean-local + @-docker-compose -f ${RACKHD}/docker-compose-${RACKHD}.yaml kill + @-docker-compose -f ${RACKHD}/docker-compose-${RACKHD}.yaml rm -f + @-docker rmi rackhd/${RACKHD} + @-docker rmi rackhd/endpoint + @-docker-compose -f ${REGISTRY}/docker-compose-${REGISTRY}.yaml kill + @-docker-compose -f ${REGISTRY}/docker-compose-${REGISTRY}.yaml rm -f + @-docker rmi rackhd/${REGISTRY} + @-docker rmi rackhd/ssdpspoofer + @-docker rm rackhd/consul:server + @-docker rm rackhd/consul:client clean-local: - @rm -rf bin vendor + @rm -rf ${RACKHD}/bin ${REGISTRY}/bin vendor deps: @${DOCKER_CMD} make deps-local @@ -79,21 +85,22 @@ build-proxy: @${DOCKER_CMD} make build-proxy-local build-proxy-local: lint-local - @go build -o bin/${PROXY} ${PROXYFLAGS} rackhd/cmd/rackhd/*.go - @go build -o bin/endpoint rackhd/cmd/utils/*.go + @go build -o ${RACKHD}/bin/${RACKHD} ${RACKHDFLAGS} rackhd/cmd/rackhd/*.go + @go build -o rackhd/bin/endpoint rackhd/cmd/utils/*.go build-reg: @${DOCKER_CMD} make build-reg-local build-reg-local: lint-local - @go build -o bin/${REGISTRY} ${REGFLAGS} registry/cmd/registry/*.go - @go build -o registry/cmd/ssdpspoofer/bin/ssdpspoofer registry/cmd/ssdpspoofer/*.go + @go build -o ${REGISTRY}/bin/${REGISTRY} ${REGFLAGS} registry/cmd/registry/*.go + @go build -o registry/bin/ssdpspoofer registry/cmd/ssdpspoofer/*.go lint: @${DOCKER_CMD} make lint-local lint-local: @gometalinter --vendor --fast --disable=dupl --disable=gotype --skip=grpc ./... + test: @make test-proxy @make test-reg @@ -103,7 +110,7 @@ test-proxy: @make build-proxy test-proxy-local: lint-local - @ginkgo -r -race -trace -cover -randomizeAllSpecs --slowSpecThreshold=${SLOWTEST} ${PROXY} + @ginkgo -r -race -trace -cover -randomizeAllSpecs ${RACKHD} test-reg: @${DOCKER_CMD} make test-reg-local @@ -113,11 +120,13 @@ test-reg-local: lint-local @ginkgo -r -race -trace -cover -randomizeAllSpecs --slowSpecThreshold=${SLOWTEST} ${REGISTRY} release: deps build - @docker build -t rackhd/${PROXY} rackhd - @docker build -t rackhd/endpoint rackhd/cmd/utils/ - @docker build -t rackhd/${REGISTRY} registry - @docker build -t rackhd/ssdpspoofer registry/cmd/ssdpspoofer/ + @docker build -t rackhd/${RACKHD} -f ${RACKHD}/Dockerfile-${RACKHD} ${RACKHD}/ + @docker build -t rackhd/endpoint -f ${RACKHD}/Dockerfile-endpoint ${RACKHD}/ + @docker build -t rackhd/${REGISTRY} -f ${REGISTRY}/Dockerfile-${REGISTRY} ${REGISTRY}/ + @docker build -t rackhd/ssdpspoofer -f ${REGISTRY}/Dockerfile-ssdp ${REGISTRY}/ +run-proxy: release + @docker-compose -f ${RACKHD}/docker-compose-${RACKHD}.yaml up --force-recreate -run: release - @docker-compose up --force-recreate +run-reg: release + @docker-compose -f ${REGISTRY}/docker-compose-${REGISTRY}.yaml up --force-recreate diff --git a/libreg/registry/consul/consul.go b/libreg/registry/consul/consul.go index de7d3bc..110ca80 100644 --- a/libreg/registry/consul/consul.go +++ b/libreg/registry/consul/consul.go @@ -254,3 +254,9 @@ func (s *Consul) getQueryOptions(options *registry.QueryOptions) *api.QueryOptio } return ops } + +// Leader returns the cluster leader +func (s *Consul) Leader() (string, error) { + status := s.client.Status() + return status.Leader() +} diff --git a/libreg/registry/mock/mock.go b/libreg/registry/mock/mock.go index f9cfe92..5b07333 100644 --- a/libreg/registry/mock/mock.go +++ b/libreg/registry/mock/mock.go @@ -171,3 +171,8 @@ func (m *Mock) Node(node string, options *registry.QueryOptions) (*registry.Cata } return &catalogNode, nil } + +// Leader returns the cluster leader +func (m *Mock) Leader() (string, error) { + return "", nil +} diff --git a/libreg/registry/registry.go b/libreg/registry/registry.go index 09336dc..1b317d1 100644 --- a/libreg/registry/registry.go +++ b/libreg/registry/registry.go @@ -72,6 +72,9 @@ type Registry interface { // Node lists the services provided by a given node Node(node string, options *QueryOptions) (*CatalogNode, error) + + // Leader returns the leader of the cluster + Leader() (string, error) } // Node is ... diff --git a/rackhd/Dockerfile b/rackhd/Dockerfile deleted file mode 100644 index 5156e8a..0000000 --- a/rackhd/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM rackhd/golang:1.7.0-wheezy - -ADD ./bin/rackhd /bin/rackhd - -ENTRYPOINT ["/bin/rackhd"] diff --git a/rackhd/Dockerfile-endpoint b/rackhd/Dockerfile-endpoint new file mode 100644 index 0000000..431b6c8 --- /dev/null +++ b/rackhd/Dockerfile-endpoint @@ -0,0 +1,5 @@ +FROM rackhd/golang:1.7.0-wheezy + +ADD ./bin/endpoint /go/bin/endpoint + +ENTRYPOINT ["/go/bin/endpoint"] diff --git a/rackhd/Dockerfile-rackhd b/rackhd/Dockerfile-rackhd new file mode 100644 index 0000000..1e35846 --- /dev/null +++ b/rackhd/Dockerfile-rackhd @@ -0,0 +1,5 @@ +FROM rackhd/golang:1.7.0-wheezy + +ADD ./bin/rackhd /go/bin/rackhd + +ENTRYPOINT ["/go/bin/rackhd"] diff --git a/rackhd/cmd/utils/Dockerfile b/rackhd/cmd/utils/Dockerfile deleted file mode 100644 index b3263d8..0000000 --- a/rackhd/cmd/utils/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM rackhd/golang:1.7.0-wheezy - -ADD ../../bin/entrypoint /bin/entrypoint - -ENTRYPOINT ["/bin/entrypoint"] diff --git a/rackhd/cmd/utils/api/api.go b/rackhd/cmd/utils/api/api.go index d43bec8..b99ece7 100644 --- a/rackhd/cmd/utils/api/api.go +++ b/rackhd/cmd/utils/api/api.go @@ -2,6 +2,7 @@ package api import ( "encoding/json" + "errors" "fmt" "io" "log" @@ -52,7 +53,15 @@ func NewServer(endpointIP, serviceName, datacenter, backendAddr string, backend s.Address = endpointIP s.Port = endpointPort - return s, nil + for i := 0; i < 5; i++ { + _, err = s.Store.Leader() + if err == nil { + return s, nil + } + time.Sleep(5 * time.Second) + } + + return nil, errors.New("Unable to find backend cluster") } // HandleTest is....well a test @@ -95,7 +104,7 @@ func (e *Server) HandleServeObject(w http.ResponseWriter, r *http.Request) { // Register is... func (e *Server) Register(datacenter, serviceName string) { n := fmt.Sprintf("%d", rand.Int()) - _ = e.Store.Register(®Store.CatalogRegistration{ + err := e.Store.Register(®Store.CatalogRegistration{ Node: n, Address: e.Address, Datacenter: datacenter, @@ -115,4 +124,8 @@ func (e *Server) Register(datacenter, serviceName string) { }, }, nil) + if err != nil { + log.Printf("Error registering serviceName: %s\n", err) + } + } diff --git a/rackhd/cmd/utils/main.go b/rackhd/cmd/utils/main.go index 6ca92bf..9478cf9 100644 --- a/rackhd/cmd/utils/main.go +++ b/rackhd/cmd/utils/main.go @@ -18,7 +18,7 @@ var backendAddr, endpointAddr, serviceName string // init takes in configurable flags func init() { flag.StringVar(&backendAddr, "backend-address", "127.0.0.1:8500", "address:port of the backend store") - flag.StringVar(&endpointAddr, "endpoint-address", "http://0.0.0.0:10001", "http://address:port of the endpoint server") + flag.StringVar(&endpointAddr, "endpoint-address", "http://0.0.0.0:10002", "http://address:port of the endpoint server") flag.StringVar(&serviceName, "service-name", "RackHD-service:api:2.0:TEST", "The service being spoofed") } @@ -45,14 +45,6 @@ func extractIPPort(location string) (string, int, error) { // Main func main() { - log.Println(binaryName) - log.Println(" Release version: " + releaseVersion) - log.Println(" Built On: " + buildDate) - log.Println(" Build By: " + buildUser) - log.Println(" Commit Hash: " + commitHash) - log.Println(" Go version: " + goVersion) - log.Println(" OS/Arch: " + osArch) - flag.Parse() // Parse proxyAddr @@ -62,11 +54,12 @@ func main() { } // Proxy server configuration - h, err := api.NewServer(endpointIP, serviceName, "dc1", backendAddr, registry.CONSUL, endpointPort) + h, err := api.NewServer(endpointIP, serviceName, "dc-docker", backendAddr, registry.CONSUL, endpointPort) if err != nil { log.Fatalf("Endpoint server configuration failed: %s\n", err) } - h.Register("dc1", serviceName) + + h.Register("dc-docker", serviceName) fmt.Printf("Endpoint is served on => %s:%d\n", h.Address, h.Port) diff --git a/rackhd/docker-compose.yaml b/rackhd/docker-compose-rackhd.yaml similarity index 57% rename from rackhd/docker-compose.yaml rename to rackhd/docker-compose-rackhd.yaml index 5481577..bdabb31 100644 --- a/rackhd/docker-compose.yaml +++ b/rackhd/docker-compose-rackhd.yaml @@ -1,4 +1,5 @@ -#NM_RACKHD +#neighborhood-manager +#rackhd version: "2" @@ -7,29 +8,31 @@ services: image: "rackhd/consul:server" container_name: "consulserver" hostname: "consulserver" - ports: - - "8300:8300" - - "8301:8301" - - "8301:8301/udp" - - "8302:8302" - - "8302:8302/udp" - - "8400:8400" - - "8500:8500" - - "8600:8600" - - "8600:8600/udp" + expose: + - "8300" + - "8301" + - "8301/udp" + - "8302" + - "8302/udp" + - "8400" + - "8500" + - "8600" + - "8600/udp" command: "agent -config-dir /etc/consul.d/server.json -bootstrap" nm-rackhd-proxy: - build: . + build: + context: . + dockerfile: Dockerfile-proxy image: "rackhd/rackhd:latest" container_name: "rackhd" hostname: "rackhd" links: - consulclient + ports: + - "10001:10001" expose: - "10001" - - "10001/udp" - "10002" - - "10002/udp" - "8300" - "8301" - "8301/udp" @@ -40,24 +43,42 @@ services: - "8500/udp" - "8600" - "8600/udp" - command: "-proxy-address=http://localhost:10001 -backend-address=consulclient:8500" + command: "-proxy-address=http://0.0.0.0:10001 -backend-address=consulclient:8500 -service-name=RackHD-service:api:2.0:TEST" depends_on: - consulclient - ssdpspoofer: - build: ./cmd/utils + endpoint: + build: + context: . + dockerfile: Dockerfile-endpoint image: "rackhd/endpoint:latest" container_name: "endpoint" hostname: "endpoint" + links: + - consulclient + ports: + - "10002:10002" expose: + - "10001" - "10002" - - "10002/udp" - command: "-endpoint-address=http://localhost:10002 -backend-address=consulclient:8500" + - "8300" + - "8301" + - "8301/udp" + - "8302" + - "8302/udp" + - "8400" + - "8500" + - "8500/udp" + - "8600" + - "8600/udp" + command: "-endpoint-address=http://0.0.0.0:10002 -backend-address=consulclient:8500" depends_on: - consulclient consulclient: image: "rackhd/consul:client" container_name: "consulclient" hostname: "consulclient" + ports: + - "8500:8500" expose: - "8300" - "8301" diff --git a/registry/Dockerfile b/registry/Dockerfile-registry similarity index 76% rename from registry/Dockerfile rename to registry/Dockerfile-registry index 904cc46..b64e10b 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile-registry @@ -3,4 +3,4 @@ FROM rackhd/golang:1.7.0-wheezy ADD ./bin/registry /go/bin/registry ADD ./registry.json /go/bin/registry.json -ENTRYPOINT ["/go/bin/nm-registry"] +ENTRYPOINT ["/go/bin/registry"] diff --git a/registry/cmd/ssdpspoofer/Dockerfile b/registry/Dockerfile-ssdp similarity index 61% rename from registry/cmd/ssdpspoofer/Dockerfile rename to registry/Dockerfile-ssdp index 508f857..5220784 100644 --- a/registry/cmd/ssdpspoofer/Dockerfile +++ b/registry/Dockerfile-ssdp @@ -1,6 +1,6 @@ FROM debian:wheezy ADD ./bin/ssdpspoofer /bin/ssdpspoofer -ADD ./ssdpSpoof.json /bin/ssdpSpoof.json +ADD ./cmd/ssdpspoofer/ssdpSpoof.json /bin/ssdpSpoof.json ENTRYPOINT ["/bin/ssdpspoofer"] diff --git a/registry/docker-compose.yaml b/registry/docker-compose-registry.yaml similarity index 91% rename from registry/docker-compose.yaml rename to registry/docker-compose-registry.yaml index d9e983d..4900dad 100644 --- a/registry/docker-compose.yaml +++ b/registry/docker-compose-registry.yaml @@ -19,7 +19,9 @@ services: - "8600:8600/udp" command: "agent -config-dir /etc/consul.d/server.json -bootstrap" registry: - build: . + build: + context: . + dockerfile: Dockerfile-registry image: "rackhd/registry:latest" container_name: "registry" hostname: "registry" @@ -42,7 +44,9 @@ services: depends_on: - consulclient ssdpspoofer: - build: ./cmd/ssdpspoofer + build: + context: . + dockerfile: Dockerfile-ssdp image: "rackhd/ssdpspoofer:latest" container_name: "ssdpspoofer" hostname: "ssdpspoofer"