kubectl-persistent-logger/main.go

73 lines
1.3 KiB
Go

package main
import (
"context"
"flag"
"log"
"os"
"git.netflux.io/rob/kubectl-persistent-logger/logs"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
clientconfig "sigs.k8s.io/controller-runtime/pkg/client/config"
)
func main() {
var (
container string
strictExist bool
)
flag.StringVar(&container, "container", "", "name of a specific container")
flag.BoolVar(&strictExist, "strict", false, "require deployment to exist on launch")
flag.Parse()
var params logs.WatcherParams
switch len(flag.Args()) {
case 1:
// TODO: handle type/name style
flag.Usage()
os.Exit(1)
case 2:
kind, err := logs.ParseType(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
params = logs.WatcherParams{
Type: kind,
Name: flag.Arg(1),
Namespace: "default",
}
default:
flag.Usage()
os.Exit(1)
}
cfg, err := clientconfig.GetConfig()
if err != nil {
log.Fatal(err)
}
clientset, err := kubernetes.NewForConfig(cfg)
if err != nil {
log.Fatal(err)
}
dynamicclient, err := dynamic.NewForConfig(cfg)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
watcher := logs.NewWatcher(
params,
logs.KubernetesClient{Typed: clientset, Untyped: dynamicclient},
logs.NewPodWatcher,
os.Stdout,
)
if err := watcher.Watch(ctx); err != nil {
log.Fatal(err)
}
}