| package main |
| |
| import ( |
| "context" |
| "flag" |
| "io/ioutil" |
| "net/http" |
| "time" |
| |
| "code.hackerspace.pl/hscloud/go/mirko" |
| "github.com/golang/glog" |
| ) |
| |
| var ( |
| flagListen = "127.0.0.1:8080" |
| flagConfig = "" |
| flagTLSKey = "" |
| flagTLSCert = "" |
| ) |
| |
| func main() { |
| flag.StringVar(&flagListen, "admitomatic_listen", flagListen, "Address to listen on for HTTP traffic") |
| flag.StringVar(&flagTLSKey, "admitomatic_tls_key", flagTLSKey, "TLS key to serve HTTP with") |
| flag.StringVar(&flagTLSCert, "admitomatic_tls_cert", flagTLSCert, "TLS certificate to serve HTTP with") |
| flag.StringVar(&flagConfig, "admitomatic_config", flagConfig, "Config path (prototext format)") |
| flag.Parse() |
| |
| if flagConfig == "" { |
| glog.Exitf("-admitomatic_config must be set") |
| } |
| if flagTLSKey == "" { |
| glog.Exitf("-admitomatic_tls_key must be set") |
| } |
| if flagTLSCert == "" { |
| glog.Exitf("-admitomatic_tls_cert must be set") |
| } |
| |
| m := mirko.New() |
| if err := m.Listen(); err != nil { |
| glog.Exitf("Listen(): %v", err) |
| } |
| |
| if err := m.Serve(); err != nil { |
| glog.Exitf("Serve(): %v", err) |
| } |
| |
| configData, err := ioutil.ReadFile(flagConfig) |
| if err != nil { |
| glog.Exitf("Could not read config: %v", err) |
| } |
| |
| s, err := newService(configData) |
| if err != nil { |
| glog.Exitf("Could not start service: %v", err) |
| } |
| |
| mux := http.NewServeMux() |
| mux.HandleFunc("/", s.handler) |
| // TODO(q3k): implement admission controller |
| srv := &http.Server{Addr: flagListen, Handler: mux} |
| |
| glog.Infof("Listening on %q...", flagListen) |
| go func() { |
| if err := srv.ListenAndServeTLS(flagTLSCert, flagTLSKey); err != nil { |
| glog.Error(err) |
| } |
| }() |
| |
| <-m.Done() |
| ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) |
| defer cancel() |
| srv.Shutdown(ctx) |
| } |