Files
klum/main.go
2022-01-06 13:29:31 +01:00

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
}