mirror of
https://github.com/ibuildthecloud/klum.git
synced 2026-02-14 14:39:50 +00:00
133 lines
3.2 KiB
Go
133 lines
3.2 KiB
Go
//go:generate go run pkg/codegen/cleanup/main.go
|
|
//go:generate go run pkg/codegen/main.go
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/ibuildthecloud/klum/pkg/controllers/user"
|
|
"github.com/ibuildthecloud/klum/pkg/crd"
|
|
"github.com/ibuildthecloud/klum/pkg/generated/controllers/klum.cattle.io"
|
|
"github.com/rancher/wrangler-api/pkg/generated/controllers/core"
|
|
"github.com/rancher/wrangler-api/pkg/generated/controllers/rbac"
|
|
"github.com/rancher/wrangler/pkg/apply"
|
|
"github.com/rancher/wrangler/pkg/kubeconfig"
|
|
"github.com/rancher/wrangler/pkg/signals"
|
|
"github.com/rancher/wrangler/pkg/start"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
var (
|
|
Version = "v0.0.0-dev"
|
|
GitCommit = "HEAD"
|
|
cfg user.Config
|
|
kubeConfig string
|
|
)
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
app.Name = "klum"
|
|
app.Version = fmt.Sprintf("%s (%s)", Version, GitCommit)
|
|
app.Usage = "Kubernetes Lazy User Manager"
|
|
app.Flags = []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "kubeconfig",
|
|
EnvVar: "KUBECONFIG",
|
|
Destination: &kubeConfig,
|
|
},
|
|
cli.StringFlag{
|
|
Name: "namespace",
|
|
EnvVar: "NAMESPACE",
|
|
Usage: "Namespace to create secrets and SAs in",
|
|
Value: "klum",
|
|
Destination: &cfg.Namespace,
|
|
},
|
|
cli.StringFlag{
|
|
Name: "context-name",
|
|
Usage: "Context name to put in Kubeconfigs",
|
|
EnvVar: "CONTEXT_NAME",
|
|
Value: "default",
|
|
Destination: &cfg.ContextName,
|
|
},
|
|
cli.StringFlag{
|
|
Name: "server",
|
|
Usage: "The external server field to put in the Kubeconfigs",
|
|
EnvVar: "SERVER_NAME",
|
|
Value: "https://localhost:6443",
|
|
Destination: &cfg.Server,
|
|
},
|
|
cli.StringFlag{
|
|
Name: "ca",
|
|
Usage: "The value of the CA data to put in the Kubeconfig",
|
|
EnvVar: "CA",
|
|
Destination: &cfg.CA,
|
|
},
|
|
cli.StringFlag{
|
|
Name: "default-cluster-role",
|
|
Usage: "Default cluster-role to assign to users with no roles",
|
|
EnvVar: "DEFAULT_CLUSTER_ROLE",
|
|
Value: "cluster-admin",
|
|
Destination: &cfg.DefaultClusterRole,
|
|
},
|
|
}
|
|
app.Action = run
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func run(c *cli.Context) error {
|
|
logrus.Info("Starting klum controller")
|
|
ctx := signals.SetupSignalContext()
|
|
|
|
restConfig, err := kubeconfig.GetNonInteractiveClientConfig(kubeConfig).ClientConfig()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := crd.Create(ctx, restConfig); err != nil {
|
|
return err
|
|
}
|
|
|
|
core, err := core.NewFactoryFromConfig(restConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
klum, err := klum.NewFactoryFromConfigWithNamespace(restConfig, cfg.Namespace)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
rbac, err := rbac.NewFactoryFromConfig(restConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
apply, err := apply.NewForConfig(restConfig)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
user.Register(ctx,
|
|
cfg,
|
|
apply,
|
|
core.Core().V1().ServiceAccount(),
|
|
rbac.Rbac().V1().ClusterRoleBinding(),
|
|
rbac.Rbac().V1().RoleBinding(),
|
|
core.Core().V1().Secret(),
|
|
klum.Klum().V1alpha1().Kubeconfig(),
|
|
klum.Klum().V1alpha1().User())
|
|
|
|
if err := start.All(ctx, 2, klum, core, rbac); err != nil {
|
|
logrus.Fatalf("Error starting: %s", err.Error())
|
|
}
|
|
|
|
<-ctx.Done()
|
|
return nil
|
|
}
|