@@ -7,11 +7,11 @@ package main
77
88import (
99 "context"
10- "flag"
1110 "fmt"
1211 "os"
13- "path "
12+ "strings "
1413
14+ flag "github.com/spf13/pflag"
1515 "k8s.io/component-base/featuregate"
1616 "k8s.io/component-base/logs"
1717 logsapi "k8s.io/component-base/logs/api/v1"
@@ -22,30 +22,51 @@ import (
2222 "github.com/leaseweb/cloudstack-csi-driver/pkg/driver"
2323)
2424
25- var (
26- endpoint = flag .String ("endpoint" , "unix:///tmp/csi.sock" , "CSI endpoint" )
27- cloudstackconfig = flag .String ("cloudstackconfig" , "./cloud-config" , "CloudStack configuration file" )
28- nodeName = flag .String ("nodeName" , "" , "Node name" )
29- showVersion = flag .Bool ("version" , false , "Show version" )
30-
31- // Version is set by the build process.
32- version = ""
33- )
34-
3525func main () {
26+ fs := flag .NewFlagSet ("cloudstack-csi-driver" , flag .ExitOnError )
3627 if err := logsapi .RegisterLogFormat (logsapi .JSONLogFormat , json.Factory {}, logsapi .LoggingBetaOptions ); err != nil {
3728 klog .ErrorS (err , "failed to register JSON log format" )
3829 }
3930
31+ var (
32+ showVersion = fs .Bool ("version" , false , "Show version" )
33+ args = os .Args [1 :]
34+ cmd = string (driver .AllMode )
35+ options = driver.Options {}
36+ )
4037 fg := featuregate .NewFeatureGate ()
4138 err := logsapi .AddFeatureGates (fg )
4239 if err != nil {
4340 klog .ErrorS (err , "failed to add feature gates" )
4441 }
4542
4643 c := logsapi .NewLoggingConfiguration ()
47- logsapi .AddGoFlags (c , flag .CommandLine )
48- flag .Parse ()
44+ logsapi .AddFlags (c , fs )
45+
46+ if len (os .Args ) > 1 && ! strings .HasPrefix (os .Args [1 ], "-" ) {
47+ cmd = os .Args [1 ]
48+ args = os .Args [2 :]
49+ }
50+
51+ switch cmd {
52+ case string (driver .ControllerMode ), string (driver .NodeMode ), string (driver .AllMode ):
53+ options .Mode = driver .Mode (cmd )
54+ default :
55+ klog .Errorf ("Unknown driver mode %s: Expected %s, %s, or %s" , cmd , driver .ControllerMode , driver .NodeMode , driver .AllMode )
56+ klog .FlushAndExit (klog .ExitFlushTimeout , 0 )
57+ }
58+
59+ options .AddFlags (fs )
60+
61+ if err = fs .Parse (args ); err != nil {
62+ klog .ErrorS (err , "Failed to parse options" )
63+ klog .FlushAndExit (klog .ExitFlushTimeout , 0 )
64+ }
65+ if err = options .Validate (); err != nil {
66+ klog .ErrorS (err , "Invalid options" )
67+ klog .FlushAndExit (klog .ExitFlushTimeout , 0 )
68+ }
69+
4970 logs .InitLogs ()
5071 logger := klog .Background ()
5172 if err = logsapi .ValidateAndApply (c , fg ); err != nil {
@@ -54,23 +75,27 @@ func main() {
5475 }
5576
5677 if * showVersion {
57- baseName := path .Base (os .Args [0 ])
58- fmt .Println (baseName , version ) //nolint:forbidigo
78+ versionInfo , versionErr := driver .GetVersionJSON ()
79+ if versionErr != nil {
80+ logger .Error (err , "failed to get version" )
81+ klog .FlushAndExit (klog .ExitFlushTimeout , 1 )
82+ }
83+ fmt .Println (versionInfo ) //nolint:forbidigo
5984 os .Exit (0 )
6085 }
6186
6287 // Setup cloud connector.
63- config , err := cloud .ReadConfig (* cloudstackconfig )
88+ config , err := cloud .ReadConfig (options . CloudStackConfig )
6489 if err != nil {
6590 logger .Error (err , "Cannot read CloudStack configuration" )
6691 klog .FlushAndExit (klog .ExitFlushTimeout , 1 )
6792 }
68- logger .Info ("Successfully read CloudStack configuration" , "cloudstackconfig" , * cloudstackconfig )
93+ logger .Info ("Successfully read CloudStack configuration" , "cloudstackconfig" , options . CloudStackConfig )
6994
7095 ctx := klog .NewContext (context .Background (), logger )
7196 csConnector := cloud .New (config )
7297
73- d , err := driver .New (* endpoint , csConnector , nil , * nodeName , version )
98+ d , err := driver .New (ctx , csConnector , & options , nil )
7499 if err != nil {
75100 logger .Error (err , "Failed to initialize driver" )
76101 klog .FlushAndExit (klog .ExitFlushTimeout , 1 )
0 commit comments