diff --git a/main.go b/main.go index 3fc95d372e..6e9a6a8569 100644 --- a/main.go +++ b/main.go @@ -3,8 +3,22 @@ package main import ( "fmt" + "time" + + "github.com/nirmata/kube-policy/server" +) + +var ( + kubeConfigFile string ) func main() { - fmt.Println("Hello from Policy Controller!") + server := server.NewWebhookServer() + fmt.Println("WebHook server is running!") + + server.RunAsync() + time.Sleep(5 * time.Second) + + server.Stop() + fmt.Println("WebHook server is stopped.") } diff --git a/server/server.debug b/server/server.debug new file mode 100644 index 0000000000..f10ff30b84 Binary files /dev/null and b/server/server.debug differ diff --git a/server/server.go b/server/server.go new file mode 100644 index 0000000000..1389d8e369 --- /dev/null +++ b/server/server.go @@ -0,0 +1,52 @@ +package server + +import ( + "context" + "fmt" + "log" + "net/http" + "time" +) + +const ( // TODO: read these files from ~/.kube/config + clientCertFile = "/home/quest/.minikube/client.crt" + clientKeyFile = "/home/quest/.minikube/client.key" +) + +type WebhookServer struct { + server http.Server +} + +func (ws *WebhookServer) serve(w http.ResponseWriter, r *http.Request) { + fmt.Println("/mutate is called!") +} + +func (ws *WebhookServer) RunAsync() { + go func(server http.Server) { + err := server.ListenAndServeTLS(clientCertFile, clientKeyFile) + if err != nil { + log.Fatal(err) + } + }(ws.server) +} + +func (ws *WebhookServer) Stop() { + err := ws.server.Shutdown(context.Background()) + if err != nil { + // Error from closing listeners, or context timeout: + log.Printf("Server Shutdown error: %v", err) + ws.server.Close() + } +} + +func NewWebhookServer() WebhookServer { + var ws WebhookServer + mux := http.NewServeMux() + mux.HandleFunc("/mutate", ws.serve) + ws.server = http.Server{ + Addr: ":443", + Handler: mux, + ReadTimeout: 5 * time.Second, + WriteTimeout: 5 * time.Second} + return ws +}