mirror of
https://gerrit.hackerspace.pl/hscloud
synced 2025-01-24 15:43:53 +00:00
Serge Bazanski
c6118649ab
This turns admitomatic into a self-standing service that can be used as an admission controller. I've tested this E2E on a local k3s server, and have some early test code for that - but that'll land up in a follow up CR, as it first needs to be cleaned up. Change-Id: I46da0fc49f9d1a3a1a96700a36deb82e5057249b
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
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)
|
|
}
|