options, app: - Handle more config errors

- Add --help/-h for usage information
This commit is contained in:
bzub 2017-07-05 21:58:09 -05:00
parent cb661f871c
commit 7dedc3fa00
3 changed files with 17 additions and 9 deletions

View File

@ -7,6 +7,7 @@ import (
) )
type KubeRouterConfig struct { type KubeRouterConfig struct {
HelpRequested bool
Kubeconfig string Kubeconfig string
Master string Master string
ConfigSyncPeriod time.Duration ConfigSyncPeriod time.Duration
@ -41,6 +42,7 @@ func NewKubeRouterConfig() *KubeRouterConfig {
} }
func (s *KubeRouterConfig) AddFlags(fs *pflag.FlagSet) { func (s *KubeRouterConfig) AddFlags(fs *pflag.FlagSet) {
fs.BoolVarP(&s.HelpRequested, "help", "h", false, "Print usage information.")
fs.BoolVar(&s.RunServiceProxy, "run-service-proxy", s.RunServiceProxy, "If false, kube-router wont setup IPVS for services proxy. True by default.") fs.BoolVar(&s.RunServiceProxy, "run-service-proxy", s.RunServiceProxy, "If false, kube-router wont setup IPVS for services proxy. True by default.")
fs.BoolVar(&s.RunFirewall, "run-firewall", s.RunFirewall, "If false, kube-router wont setup iptables to provide ingress firewall for pods. True by default.") fs.BoolVar(&s.RunFirewall, "run-firewall", s.RunFirewall, "If false, kube-router wont setup iptables to provide ingress firewall for pods. True by default.")
fs.BoolVar(&s.RunRouter, "run-router", s.RunRouter, "If true each node advertise routes the rest of the nodes and learn the routes for the pods. True by default.") fs.BoolVar(&s.RunRouter, "run-router", s.RunRouter, "If true each node advertise routes the rest of the nodes and learn the routes for the pods. True by default.")

View File

@ -24,19 +24,19 @@ func NewKubeRouterDefault(config *options.KubeRouterConfig) (*KubeRouter, error)
if len(config.Master) == 0 && len(config.Kubeconfig) == 0 { if len(config.Master) == 0 && len(config.Kubeconfig) == 0 {
if _, err := os.Stat("/var/lib/kube-router/kubeconfig"); os.IsNotExist(err) { if _, err := os.Stat("/var/lib/kube-router/kubeconfig"); os.IsNotExist(err) {
panic("Either one of --master or --kubeconfig must be specified. Or valid kubeconfig file must exist as /var/lib/kube-router/kubeconfig") return nil, errors.New("Either one of --master or --kubeconfig must be specified. Or valid kubeconfig file must exist as /var/lib/kube-router/kubeconfig")
} }
config.Kubeconfig = "/var/lib/kube-router/kubeconfig" config.Kubeconfig = "/var/lib/kube-router/kubeconfig"
} }
clientconfig, err := clientcmd.BuildConfigFromFlags(config.Master, config.Kubeconfig) clientconfig, err := clientcmd.BuildConfigFromFlags(config.Master, config.Kubeconfig)
if err != nil { if err != nil {
panic(err.Error()) return nil, errors.New("Failed to build configuration from CLI: " + err.Error())
} }
clientset, err := kubernetes.NewForConfig(clientconfig) clientset, err := kubernetes.NewForConfig(clientconfig)
if err != nil { if err != nil {
panic(err.Error()) return nil, errors.New("Failed to create Kubernetes client: " + err.Error())
} }
return &KubeRouter{Client: clientset, Config: config}, nil return &KubeRouter{Client: clientset, Config: config}, nil
@ -108,7 +108,7 @@ func (kr *KubeRouter) Run() error {
err = kr.startApiWatchers() err = kr.startApiWatchers()
if err != nil { if err != nil {
panic("Failed to start API watchers: " + err.Error()) return errors.New("Failed to start API watchers: " + err.Error())
} }
if !(kr.Config.RunFirewall || kr.Config.RunServiceProxy || kr.Config.RunRouter) { if !(kr.Config.RunFirewall || kr.Config.RunServiceProxy || kr.Config.RunRouter) {
@ -119,7 +119,7 @@ func (kr *KubeRouter) Run() error {
if kr.Config.RunFirewall { if kr.Config.RunFirewall {
npc, err := controllers.NewNetworkPolicyController(kr.Client, kr.Config) npc, err := controllers.NewNetworkPolicyController(kr.Client, kr.Config)
if err != nil { if err != nil {
panic("Failed to create network policy controller: " + err.Error()) return errors.New("Failed to create network policy controller: " + err.Error())
} }
npcStopCh = make(chan struct{}) npcStopCh = make(chan struct{})
wg.Add(1) wg.Add(1)
@ -129,7 +129,7 @@ func (kr *KubeRouter) Run() error {
if kr.Config.RunRouter { if kr.Config.RunRouter {
nrc, err := controllers.NewNetworkRoutingController(kr.Client, kr.Config) nrc, err := controllers.NewNetworkRoutingController(kr.Client, kr.Config)
if err != nil { if err != nil {
panic("Failed to create network routing controller: " + err.Error()) return errors.New("Failed to create network routing controller: " + err.Error())
} }
nrcStopCh = make(chan struct{}) nrcStopCh = make(chan struct{})
wg.Add(1) wg.Add(1)
@ -139,7 +139,7 @@ func (kr *KubeRouter) Run() error {
if kr.Config.RunServiceProxy { if kr.Config.RunServiceProxy {
nsc, err := controllers.NewNetworkServicesController(kr.Client, kr.Config) nsc, err := controllers.NewNetworkServicesController(kr.Client, kr.Config)
if err != nil { if err != nil {
panic("Failed to create network services controller: " + err.Error()) return errors.New("Failed to create network services controller: " + err.Error())
} }
nscStopCh = make(chan struct{}) nscStopCh = make(chan struct{})
wg.Add(1) wg.Add(1)

View File

@ -18,8 +18,13 @@ func main() {
flag.Set("logtostderr", "true") flag.Set("logtostderr", "true")
if config.HelpRequested {
pflag.Usage()
os.Exit(0)
}
if os.Geteuid() != 0 { if os.Geteuid() != 0 {
fmt.Fprintf(os.Stderr, "kube-router need to be run by user with previlages to execute iptables, ipset and configure ipvs\n") fmt.Fprintf(os.Stderr, "kube-router needs to be run with privileges to execute iptables, ipset and configure ipvs\n")
os.Exit(1) os.Exit(1)
} }
@ -34,7 +39,8 @@ func main() {
os.Exit(1) os.Exit(1)
} }
if err = kubeRouter.Run(); err != nil { err = kubeRouter.Run()
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to run kube-router: %v\n", err) fmt.Fprintf(os.Stderr, "Failed to run kube-router: %v\n", err)
os.Exit(1) os.Exit(1)
} }