Skip to content

Commit

Permalink
fix controller/node-server command line arguments (#642)
Browse files Browse the repository at this point in the history
Signed-off-by: Bala.FA <bala@minio.io>

Signed-off-by: Bala.FA <bala@minio.io>
  • Loading branch information
balamurugana committed Sep 19, 2022
1 parent 22a9c8f commit d9ff9e2
Show file tree
Hide file tree
Showing 14 changed files with 356 additions and 328 deletions.
131 changes: 0 additions & 131 deletions cmd/directpv/cmd.go

This file was deleted.

75 changes: 75 additions & 0 deletions cmd/directpv/controller.go
@@ -0,0 +1,75 @@
// This file is part of MinIO DirectPV
// Copyright (c) 2021, 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package main

import (
"context"

"github.com/container-storage-interface/spec/lib/go/csi"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/controller"
pkgidentity "github.com/minio/directpv/pkg/identity"
"github.com/spf13/cobra"
"k8s.io/klog/v2"
)

var controllerCmd = &cobra.Command{
Use: "controller",
Short: "Start controller server of " + consts.AppPrettyName + ".",
SilenceUsage: true,
SilenceErrors: true,
RunE: func(c *cobra.Command, args []string) error {
return startController(c.Context(), args)
},
}

func startController(ctx context.Context, args []string) error {
var cancel context.CancelFunc
ctx, cancel = context.WithCancel(ctx)
defer cancel()

idServer, err := pkgidentity.NewServer(identity, Version, map[string]string{})
if err != nil {
return err
}
klog.V(3).Infof("Identity server started")

var ctrlServer csi.ControllerServer
ctrlServer, err = controller.NewServer(ctx, identity, kubeNodeName, rack, zone, region)
if err != nil {
return err
}
klog.V(3).Infof("Controller server started")

errCh := make(chan error)

go func() {
if err := runServers(ctx, csiEndpoint, idServer, ctrlServer, nil); err != nil {
klog.ErrorS(err, "unable to start GRPC servers")
errCh <- err
}
}()

go func() {
if err := serveReadinessEndpoint(ctx); err != nil {
klog.ErrorS(err, "unable to start readiness endpoint")
errCh <- err
}
}()

return <-errCh
}
99 changes: 98 additions & 1 deletion cmd/directpv/main.go
Expand Up @@ -18,14 +18,110 @@ package main

import (
"context"
"flag"
"fmt"
"os"
"os/signal"
"syscall"
"time"

"github.com/minio/directpv/pkg/client"
"github.com/minio/directpv/pkg/consts"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"k8s.io/klog/v2"
)

// Version of this application populated by `go build`
// e.g. $ go build -ldflags="-X main.Version=v4.0.1"
var Version string

// flags
var (
identity = consts.Identity
kubeNodeName = ""
rack = "default"
zone = "default"
region = "default"
csiEndpoint = consts.UnixCSIEndpoint
kubeconfig = ""
conversionHealthzURL = ""
metricsPort = consts.MetricsPort
readinessPort = consts.ReadinessPort
)

var mainCmd = &cobra.Command{
Use: consts.AppName,
Short: "Start " + consts.AppPrettyName + " controller and driver. This binary is usually executed by Kubernetes.",
SilenceUsage: true,
SilenceErrors: false,
Version: Version,
CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: true,
DisableNoDescFlag: true,
DisableDescriptions: true,
HiddenDefaultCmd: true,
},
PersistentPreRunE: func(c *cobra.Command, args []string) error {
if kubeNodeName == "" {
return fmt.Errorf("value to --kube-node-name must be provided")
}

client.Init()
return nil
},
}

func init() {
if mainCmd.Version == "" {
mainCmd.Version = "dev"
}

viper.AutomaticEnv()

kflags := flag.NewFlagSet("klog", flag.ExitOnError)
klog.InitFlags(kflags)

// parse the go default flagset to get flags for glog and other packages in future
mainCmd.PersistentFlags().AddGoFlagSet(flag.CommandLine)
mainCmd.PersistentFlags().AddGoFlagSet(kflags)

flag.Set("logtostderr", "true")
flag.Set("alsologtostderr", "true")

mainCmd.PersistentFlags().StringVarP(&kubeconfig, "kubeconfig", "k", kubeconfig, "Path to the kubeconfig file to use for Kubernetes requests.")
mainCmd.PersistentFlags().StringVarP(&identity, "identity", "", identity, "Identity of "+consts.AppPrettyName+" instances")
mainCmd.PersistentFlags().StringVarP(&csiEndpoint, "csi-endpoint", "", csiEndpoint, "CSI endpoint")
mainCmd.PersistentFlags().StringVarP(&kubeNodeName, "kube-node-name", "", kubeNodeName, "Kubernetes node name (MUST BE SET)")
mainCmd.PersistentFlags().StringVarP(&rack, "rack", "", rack, "Rack ID of "+consts.AppPrettyName+" instances")
mainCmd.PersistentFlags().StringVarP(&zone, "zone", "", zone, "Zone ID of "+consts.AppPrettyName+" instances")
mainCmd.PersistentFlags().StringVarP(&region, "region", "", region, "Region ID of "+consts.AppPrettyName+" instances")
mainCmd.PersistentFlags().StringVarP(&conversionHealthzURL, "conversion-healthz-url", "", conversionHealthzURL, "URL to conversion webhook health endpoint")
mainCmd.PersistentFlags().IntVarP(&readinessPort, "readiness-port", "", readinessPort, "Readiness port at "+consts.AppPrettyName+" exports readiness of services")

mainCmd.PersistentFlags().MarkHidden("alsologtostderr")
mainCmd.PersistentFlags().MarkHidden("add_dir_header")
mainCmd.PersistentFlags().MarkHidden("log_file")
mainCmd.PersistentFlags().MarkHidden("log_file_max_size")
mainCmd.PersistentFlags().MarkHidden("one_output")
mainCmd.PersistentFlags().MarkHidden("skip_headers")
mainCmd.PersistentFlags().MarkHidden("skip_log_headers")
mainCmd.PersistentFlags().MarkHidden("v")
mainCmd.PersistentFlags().MarkHidden("log_backtrace_at")
mainCmd.PersistentFlags().MarkHidden("log_dir")
mainCmd.PersistentFlags().MarkHidden("logtostderr")
mainCmd.PersistentFlags().MarkHidden("master")
mainCmd.PersistentFlags().MarkHidden("stderrthreshold")
mainCmd.PersistentFlags().MarkHidden("vmodule")

// suppress the incorrect prefix in glog output
flag.CommandLine.Parse([]string{})
viper.BindPFlags(mainCmd.PersistentFlags())

mainCmd.AddCommand(controllerCmd)
mainCmd.AddCommand(nodeServerCmd)
}

func main() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGSEGV)
Expand All @@ -39,7 +135,8 @@ func main() {
os.Exit(1)
}()

if err := Execute(ctx); err != nil {
if err := mainCmd.ExecuteContext(ctx); err != nil {
klog.ErrorS(err, "unable to execute command")
os.Exit(1)
}
}

0 comments on commit d9ff9e2

Please sign in to comment.