From bb8837024379b2ef30868053c843b3e57101bb54 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Sun, 23 Nov 2014 23:37:19 +0800 Subject: [PATCH] Hold serve_hostname code in kubernetes repo --- contrib/for-demos/serve_hostname/Dockerfile | 8 ++ contrib/for-demos/serve_hostname/Makefile | 13 +++ contrib/for-demos/serve_hostname/README.md | 4 + .../serve_hostname/serve_hostname.go | 91 +++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 contrib/for-demos/serve_hostname/Dockerfile create mode 100644 contrib/for-demos/serve_hostname/Makefile create mode 100644 contrib/for-demos/serve_hostname/README.md create mode 100644 contrib/for-demos/serve_hostname/serve_hostname.go diff --git a/contrib/for-demos/serve_hostname/Dockerfile b/contrib/for-demos/serve_hostname/Dockerfile new file mode 100644 index 00000000000..0fc5d20f7d7 --- /dev/null +++ b/contrib/for-demos/serve_hostname/Dockerfile @@ -0,0 +1,8 @@ +# https://github.com/thockin/serve_hostname + +FROM scratch +MAINTAINER Tim Hockin +ADD serve_hostname serve_hostname +ADD serve_hostname.go serve_hostname.go +EXPOSE 9376 +ENTRYPOINT ["/serve_hostname"] diff --git a/contrib/for-demos/serve_hostname/Makefile b/contrib/for-demos/serve_hostname/Makefile new file mode 100644 index 00000000000..7f30114dc12 --- /dev/null +++ b/contrib/for-demos/serve_hostname/Makefile @@ -0,0 +1,13 @@ +all: serve_hostname + +serve_hostname: serve_hostname.go + CGO_ENABLED=0 go build -a --ldflags '-w' ./serve_hostname.go + +container: serve_hostname + sudo docker build -t kubernetes/serve_hostname . + +push: + sudo docker push kubernetes/serve_hostname + +clean: + rm -f serve_hostname diff --git a/contrib/for-demos/serve_hostname/README.md b/contrib/for-demos/serve_hostname/README.md new file mode 100644 index 00000000000..9ae9ae7f4ab --- /dev/null +++ b/contrib/for-demos/serve_hostname/README.md @@ -0,0 +1,4 @@ +serve_hostname +============== + +Util app to serve your hostname on TCP and/or UDP. Useful for testing. diff --git a/contrib/for-demos/serve_hostname/serve_hostname.go b/contrib/for-demos/serve_hostname/serve_hostname.go new file mode 100644 index 00000000000..293b88588d9 --- /dev/null +++ b/contrib/for-demos/serve_hostname/serve_hostname.go @@ -0,0 +1,91 @@ +/* +Copyright 2014 Google Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// A small utility to just serve the hostname on TCP and/or UDP. +package main + +import ( + "flag" + "fmt" + "log" + "net" + "net/http" + "os" +) + +var ( + doTcp = flag.Bool("tcp", false, "Serve raw over TCP.") + doUdp = flag.Bool("udp", false, "Serve raw over UDP.") + doHttp = flag.Bool("http", true, "Serve HTTP.") + port = flag.Int("port", 9376, "Port number.") +) + +func main() { + flag.Parse() + + if *doHttp && (*doTcp || *doUdp) { + log.Fatalf("Can't server TCP/UDP mode and HTTP mode at the same time") + } + + hostname, err := os.Hostname() + if err != nil { + log.Fatalf("Error from os.Hostname(): %s", err) + } + hostname += "\n" + + if *doTcp { + listener, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) + if err != nil { + log.Fatalf("Error from net.Listen(): %s", err) + } + go func() { + for { + conn, err := listener.Accept() + if err != nil { + log.Fatalf("Error from Accept(): %s", err) + } + conn.Write([]byte(hostname)) + conn.Close() + } + }() + } + if *doUdp { + addr, err := net.ResolveUDPAddr("udp", fmt.Sprintf(":%d", *port)) + if err != nil { + log.Fatalf("Error from net.ResolveUDPAddr(): %s", err) + } + sock, err := net.ListenUDP("udp", addr) + if err != nil { + log.Fatalf("Error from ListenUDP(): %s", err) + } + go func() { + var buffer [16]byte + for { + _, cliAddr, err := sock.ReadFrom(buffer[0:]) + if err != nil { + log.Fatalf("Error from ReadFrom(): %s", err) + } + sock.WriteTo([]byte(hostname), cliAddr) + } + }() + } + if *doHttp { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s", hostname) }) + go log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)) + } + + select {} +}