1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/main.go

97 lines
2.7 KiB
Go
Raw Normal View History

package main
import (
"flag"
"log"
"github.com/nirmata/kube-policy/kubeclient"
2019-05-10 00:05:21 -07:00
"github.com/nirmata/kube-policy/policycontroller"
"github.com/nirmata/kube-policy/server"
"github.com/nirmata/kube-policy/webhooks"
2019-05-10 00:05:21 -07:00
policyclientset "github.com/nirmata/kube-policy/pkg/client/clientset/versioned"
informers "github.com/nirmata/kube-policy/pkg/client/informers/externalversions"
2019-05-10 10:38:38 -07:00
policyviolation "github.com/nirmata/kube-policy/pkg/policyviolation"
2019-05-10 00:05:21 -07:00
event "github.com/nirmata/kube-policy/pkg/event"
"k8s.io/sample-controller/pkg/signals"
)
var (
kubeconfig string
cert string
key string
)
func main() {
clientConfig, err := createClientConfig(kubeconfig)
if err != nil {
log.Fatalf("Error building kubeconfig: %v\n", err)
}
kubeclient, err := kubeclient.NewKubeClient(clientConfig, nil)
if err != nil {
log.Fatalf("Error creating kubeclient: %v\n", err)
}
2019-05-10 00:05:21 -07:00
policyClientset, err := policyclientset.NewForConfig(clientConfig)
if err != nil {
2019-05-10 00:05:21 -07:00
log.Fatalf("Error creating policyClient: %v\n", err)
}
2019-05-10 00:05:21 -07:00
//TODO wrap the policyInformer inside a factory
policyInformerFactory := informers.NewSharedInformerFactory(policyClientset, 0)
policyInformer := policyInformerFactory.Nirmata().V1alpha1().Policies()
eventController := event.NewEventController(kubeclient, policyInformer.Lister(), nil)
2019-05-10 10:38:38 -07:00
violationBuilder := policyviolation.NewPolicyViolationBuilder(kubeclient, policyInformer.Lister(), policyClientset, eventController, nil)
2019-05-10 00:05:21 -07:00
policyController := policycontroller.NewPolicyController(policyClientset,
policyInformer,
violationBuilder,
2019-05-10 10:38:38 -07:00
eventController,
2019-05-10 00:05:21 -07:00
nil,
kubeclient)
mutationWebhook, err := webhooks.CreateMutationWebhook(clientConfig,
kubeclient,
policyInformer.Lister(),
violationBuilder,
2019-05-10 10:38:38 -07:00
eventController,
2019-05-10 00:05:21 -07:00
nil)
if err != nil {
log.Fatalf("Error creating mutation webhook: %v\n", err)
}
tlsPair, err := initTlsPemPair(cert, key, clientConfig, kubeclient)
if err != nil {
log.Fatalf("Failed to initialize TLS key/certificate pair: %v\n", err)
}
server, err := server.NewWebhookServer(tlsPair, mutationWebhook, nil)
if err != nil {
log.Fatalf("Unable to create webhook server: %v\n", err)
}
server.RunAsync()
stopCh := signals.SetupSignalHandler()
2019-05-10 00:05:21 -07:00
policyInformerFactory.Start(stopCh)
if err = eventController.Run(stopCh); err != nil {
log.Fatalf("Error running EventController: %v\n", err)
}
2019-05-10 00:05:21 -07:00
if err = policyController.Run(stopCh); err != nil {
log.Fatalf("Error running PolicyController: %v\n", err)
}
<-stopCh
server.Stop()
}
func init() {
flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
flag.StringVar(&cert, "cert", "", "TLS certificate used in connection with cluster.")
flag.StringVar(&key, "key", "", "Key, used in TLS connection.")
flag.Parse()
}