@@ -760,47 +760,62 @@ use the value from the flag, Not compatible with -fuse.`,
760760 return 0
761761}
762762
763+ type TranslationResult struct {
764+ V2Args []string
765+ LogDebugStdout bool
766+ Verbose bool
767+ Unsupported []string
768+ LegacySet bool
769+ V2Compat bool
770+ V2Mode bool
771+ Projects []string
772+ OK bool
773+ }
774+
763775func main () {
764- translatedArgs , logDebugStdout , verbose , unsupported , legacySet , v2Compat , v2Mode , ok := translateV2Args ()
776+ tr := translateV2Args ()
765777
766- if v2Mode {
778+ if tr . V2Mode {
767779 v2cmd := proxyv2cmd .NewCommand ()
768- v2cmd .SetArgs (translatedArgs )
780+ v2cmd .SetArgs (tr . V2Args )
769781 proxyv2cmd .ExecuteCommand (v2cmd )
770782 return
771783 }
772784
773- if ok {
785+ if tr . OK {
774786 fmt .Fprintln (os .Stderr , "This proxy running Auth Proxy v2 in compatibility mode." )
775787 fmt .Fprintln (os .Stderr , "To use Proxy v1, add the -legacy-v1-proxy flag." )
776788
777789 opts := []proxyv2cmd.Option {
778790 proxyv2cmd .WithProxyV1Compatibility (),
779- proxyv2cmd .WithProxyV1Verbose (verbose ),
791+ proxyv2cmd .WithProxyV1Verbose (tr . Verbose ),
780792 }
781- if logDebugStdout {
793+ if tr . LogDebugStdout {
782794 opts = append (opts , proxyv2cmd .WithProxyV1LogDebugStdout ())
783795 }
796+ if len (tr .Projects ) > 0 {
797+ opts = append (opts , proxyv2cmd .WithProxyV1Projects (tr .Projects ))
798+ }
784799
785800 v2cmd := proxyv2cmd .NewCommand (opts ... )
786- v2cmd .SetArgs (translatedArgs )
801+ v2cmd .SetArgs (tr . V2Args )
787802 proxyv2cmd .ExecuteCommand (v2cmd )
788803 return
789804 }
790805
791806 // Translation failed
792- if v2Compat && len (unsupported ) > 0 {
793- fmt .Fprintf (os .Stderr , "Error: -v2-compat flag is set, but the following flags are not supported in v2 compatibility mode: %s\n " , strings .Join (unsupported , ", " ))
807+ if tr . V2Compat && len (tr . Unsupported ) > 0 {
808+ fmt .Fprintf (os .Stderr , "Error: -v2-compat flag is set, but the following flags are not supported in v2 compatibility mode: %s\n " , strings .Join (tr . Unsupported , ", " ))
794809 os .Exit (1 )
795810 }
796811
797812 fmt .Fprintln (os .Stderr , "This proxy is using Auth Proxy v1 legacy mode." )
798- if legacySet {
813+ if tr . LegacySet {
799814 fmt .Fprintln (os .Stderr , "This proxy is using Auth Proxy v1 legacy mode because the -legacy-v1-proxy flag is set" )
800- } else if len (unsupported ) > 0 {
815+ } else if len (tr . Unsupported ) > 0 {
801816 fmt .Fprintln (os .Stderr , "This proxy is using Auth Proxy v1 legacy mode because it is using" )
802817 fmt .Fprintln (os .Stderr , "flags that are not supported in v2 compatibility mode:" )
803- fmt .Fprintln (os .Stderr , strings .Join (unsupported , ", " ))
818+ fmt .Fprintln (os .Stderr , strings .Join (tr . Unsupported , ", " ))
804819 }
805820
806821 code := runProxy ()
@@ -814,44 +829,36 @@ func main() {
814829// If the arguments use a feature that is not supported in Proxy v2, this
815830// returns false for OK, indicating that the legacy proxy v1 should run the
816831// code.
817- //
818- // Returns:
819- // - v2args the arguments translated for the v2 command
820- // - logDebugStdout true if the v1 -log_debug_stdout flag was set
821- // - verbose true if the v1 -verbose flag was set (default true)
822- // - unsupported list of v1 flags that are not supported in v2
823- // - legacySet true if -legacy-v1-proxy was set
824- // - v2Compat true if -v2-compat was set
825- // - v2Mode true if -v2 was set
826- // - ok true when it is OK to use the v2 proxy command
827- func translateV2Args () (v2args []string , logDebugStdout , verbose bool , unsupported []string , legacySet , v2Compat , v2Mode , ok bool ) {
828- verbose = true // default
832+ func translateV2Args () TranslationResult {
833+ var tr TranslationResult
834+ tr .Verbose = true // default
829835
830836 // Check for special flags before anything else
831837 for _ , arg := range os .Args {
832838 if arg == "--legacy-v1-proxy" || arg == "-legacy-v1-proxy" {
833- legacySet = true
839+ tr . LegacySet = true
834840 }
835841 if arg == "--v2-compat" || arg == "-v2-compat" {
836- v2Compat = true
842+ tr . V2Compat = true
837843 }
838844 if arg == "--v2" || arg == "-v2" {
839- v2Mode = true
845+ tr . V2Mode = true
840846 }
841847 }
842848
843- if v2Mode {
849+ if tr . V2Mode {
844850 // In v2 mode, we just pass all arguments except -v2 to the v2 parser
845851 for _ , arg := range os .Args [1 :] {
846852 if arg != "--v2" && arg != "-v2" {
847- v2args = append (v2args , arg )
853+ tr . V2Args = append (tr . V2Args , arg )
848854 }
849855 }
850- return v2args , false , false , nil , false , false , true , true
856+ tr .OK = true
857+ return tr
851858 }
852859
853- if legacySet {
854- return nil , false , false , nil , true , v2Compat , false , false
860+ if tr . LegacySet {
861+ return tr
855862 }
856863
857864 fs := flag .NewFlagSet ("translate" , flag .ContinueOnError )
@@ -878,10 +885,10 @@ func translateV2Args() (v2args []string, logDebugStdout, verbose bool, unsupport
878885 verboseFlag := fs .Bool ("verbose" , true , "" )
879886 logDebugStdoutFlag := fs .Bool ("log_debug_stdout" , false , "" )
880887 instancesMetadata := fs .String ("instances_metadata" , "" , "" )
888+ projectsFlag := fs .String ("projects" , "" , "" )
881889
882890 // Untranslatable flags
883891 _ = fs .Bool ("check_region" , false , "" )
884- _ = fs .String ("projects" , "" , "" )
885892 _ = fs .Duration ("refresh_config_throttle" , 0 , "" )
886893 _ = fs .Uint64 ("fd_rlimit" , 0 , "" )
887894 _ = fs .Bool ("legacy-v1-proxy" , false , "" )
@@ -891,76 +898,82 @@ func translateV2Args() (v2args []string, logDebugStdout, verbose bool, unsupport
891898 fs .Var (& instances , "instances" , "" )
892899
893900 if err := fs .Parse (os .Args [1 :]); err != nil {
894- return nil , false , false , nil , false , v2Compat , false , false
901+ return tr
895902 }
896903
897904 // Check for unsupported flags being set
898905 fs .Visit (func (f * flag.Flag ) {
899906 switch f .Name {
900- case "check_region" , "projects" :
901- unsupported = append (unsupported , "-" + f .Name )
907+ case "check_region" :
908+ tr . Unsupported = append (tr . Unsupported , "-" + f .Name )
902909 }
903910 })
904- if len (unsupported ) > 0 {
905- return nil , false , false , unsupported , false , v2Compat , false , false
911+ if len (tr . Unsupported ) > 0 {
912+ return tr
906913 }
907914
908- var args []string
909915 fs .Visit (func (f * flag.Flag ) {
910916 switch f .Name {
917+ case "projects" :
918+ if * projectsFlag != "" {
919+ tr .Projects = strings .Split (* projectsFlag , "," )
920+ }
911921 case "instances_metadata" :
912- args = append (args , "--instances-metadata" , * instancesMetadata )
922+ tr . V2Args = append (tr . V2Args , "--instances-metadata" , * instancesMetadata )
913923 case "credential_file" :
914- args = append (args , "--credentials-file" , * credentialFile )
924+ tr . V2Args = append (tr . V2Args , "--credentials-file" , * credentialFile )
915925 case "token" :
916- args = append (args , "--token" , * token )
926+ tr . V2Args = append (tr . V2Args , "--token" , * token )
917927 case "login_token" :
918- args = append (args , "--login-token" , * loginToken )
928+ tr . V2Args = append (tr . V2Args , "--login-token" , * loginToken )
919929 case "enable_iam_login" :
920930 if * enableIAMLogin {
921- args = append (args , "--auto-iam-authn" )
931+ tr . V2Args = append (tr . V2Args , "--auto-iam-authn" )
922932 }
923933 case "dir" :
924- args = append (args , "--unix-socket" , * dir )
934+ tr . V2Args = append (tr . V2Args , "--unix-socket" , * dir )
925935 case "fuse" :
926936 if * useFuse {
927- args = append (args , "--fuse" , * dir )
937+ tr . V2Args = append (tr . V2Args , "--fuse" , * dir )
928938 }
929939 case "fuse_tmp" :
930- args = append (args , "--fuse-temp-dir" , * fuseTmp )
940+ tr . V2Args = append (tr . V2Args , "--fuse-temp-dir" , * fuseTmp )
931941 case "health_check_port" :
932- args = append (args , "--http-port" , * healthCheckPort )
942+ tr . V2Args = append (tr . V2Args , "--http-port" , * healthCheckPort )
933943 case "use_http_health_check" :
934944 if * useHTTPHealthCheck {
935- args = append (args , "--health-check" )
945+ tr . V2Args = append (tr . V2Args , "--health-check" )
936946 }
937947 case "host" :
938- args = append (args , "--sqladmin-api-endpoint" , * host )
948+ tr . V2Args = append (tr . V2Args , "--sqladmin-api-endpoint" , * host )
939949 case "max_connections" :
940- args = append (args , "--max-connections" , strconv .FormatUint (* maxConnections , 10 ))
950+ tr . V2Args = append (tr . V2Args , "--max-connections" , strconv .FormatUint (* maxConnections , 10 ))
941951 case "quiet" :
942952 if * quiet {
943- args = append (args , "--quiet" )
953+ tr . V2Args = append (tr . V2Args , "--quiet" )
944954 }
945955 case "quota_project" :
946- args = append (args , "--quota-project" , * quotaProject )
956+ tr . V2Args = append (tr . V2Args , "--quota-project" , * quotaProject )
947957 case "skip_failed_instance_config" :
948958 if * skipFailedInstanceConfig {
949- args = append (args , "--skip-failed-instance-config" )
959+ tr . V2Args = append (tr . V2Args , "--skip-failed-instance-config" )
950960 }
951961 case "structured_logs" :
952962 if * structuredLogs {
953- args = append (args , "--structured-logs" )
963+ tr . V2Args = append (tr . V2Args , "--structured-logs" )
954964 }
955965 case "term_timeout" :
956- args = append (args , "--max-sigterm-delay" , termTimeout .String ())
966+ tr . V2Args = append (tr . V2Args , "--max-sigterm-delay" , termTimeout .String ())
957967 case "version" :
958968 if * version {
959- args = append (args , "--version" )
969+ tr . V2Args = append (tr . V2Args , "--version" )
960970 }
961971 }
962972 })
963973
974+ tr .LogDebugStdout = * logDebugStdoutFlag
975+ tr .Verbose = * verboseFlag
976+
964977 // ip_address_types handling
965978 ipTypesSet := false
966979 fs .Visit (func (f * flag.Flag ) {
@@ -970,7 +983,7 @@ func translateV2Args() (v2args []string, logDebugStdout, verbose bool, unsupport
970983 })
971984
972985 if ! ipTypesSet {
973- args = append (args , "--auto-ip" )
986+ tr . V2Args = append (tr . V2Args , "--auto-ip" )
974987 } else {
975988 types := strings .Split (* ipAddressTypes , "," )
976989 hasPublic := false
@@ -983,13 +996,14 @@ func translateV2Args() (v2args []string, logDebugStdout, verbose bool, unsupport
983996 hasPrivate = true
984997 default :
985998 // Unknown type, fallback to v1
986- return nil , false , false , []string {"-ip_address_types=" + * ipAddressTypes }, false , v2Compat , false , false
999+ tr .Unsupported = append (tr .Unsupported , "-ip_address_types=" + * ipAddressTypes )
1000+ return tr
9871001 }
9881002 }
9891003 if hasPublic && hasPrivate {
990- args = append (args , "--auto-ip" )
1004+ tr . V2Args = append (tr . V2Args , "--auto-ip" )
9911005 } else if hasPrivate {
992- args = append (args , "--private-ip" )
1006+ tr . V2Args = append (tr . V2Args , "--private-ip" )
9931007 } else if hasPublic {
9941008 // default in v2 is public
9951009 }
@@ -1000,13 +1014,13 @@ func translateV2Args() (v2args []string, logDebugStdout, verbose bool, unsupport
10001014 parts := strings .SplitN (inst , "=" , 2 )
10011015 connName := parts [0 ]
10021016 if len (parts ) == 1 {
1003- args = append (args , connName )
1017+ tr . V2Args = append (tr . V2Args , connName )
10041018 continue
10051019 }
10061020
10071021 opts := strings .SplitN (parts [1 ], ":" , 2 )
10081022 if len (opts ) != 2 {
1009- return nil , false , false , nil , false , v2Compat , false , false // Invalid format
1023+ return tr // Invalid format
10101024 }
10111025
10121026 netType := opts [0 ]
@@ -1018,28 +1032,29 @@ func translateV2Args() (v2args []string, logDebugStdout, verbose bool, unsupport
10181032 // host:port
10191033 h , p , err := net .SplitHostPort (netAddr )
10201034 if err != nil {
1021- return nil , false , false , nil , false , v2Compat , false , false
1035+ return tr
10221036 }
1023- args = append (args , fmt .Sprintf ("%s?address=%s&port=%s" , connName , h , p ))
1037+ tr . V2Args = append (tr . V2Args , fmt .Sprintf ("%s?address=%s&port=%s" , connName , h , p ))
10241038 } else {
10251039 // just port
1026- args = append (args , fmt .Sprintf ("%s?port=%s" , connName , netAddr ))
1040+ tr . V2Args = append (tr . V2Args , fmt .Sprintf ("%s?port=%s" , connName , netAddr ))
10271041 }
10281042 case "unix" :
10291043 if strings .HasPrefix (netAddr , "/" ) {
1030- args = append (args , fmt .Sprintf ("%s?unix-socket-path=%s" , connName , netAddr ))
1044+ tr . V2Args = append (tr . V2Args , fmt .Sprintf ("%s?unix-socket-path=%s" , connName , netAddr ))
10311045 } else {
1032- args = append (args , fmt .Sprintf ("%s?unix-socket=%s" , connName , netAddr ))
1046+ tr . V2Args = append (tr . V2Args , fmt .Sprintf ("%s?unix-socket=%s" , connName , netAddr ))
10331047 }
10341048 default :
1035- return nil , false , false , nil , false , v2Compat , false , false // Unsupported network
1049+ return tr // Unsupported network
10361050 }
10371051 }
10381052
1039- // V2 requires at least one instance OR fuse mode OR version OR instances_metadata
1040- if len (instances ) == 0 && ! * useFuse && ! * version && * instancesMetadata == "" {
1041- return nil , false , false , nil , false , v2Compat , false , false
1053+ // V2 requires at least one instance OR fuse mode OR version OR instances_metadata OR projects
1054+ if len (instances ) == 0 && ! * useFuse && ! * version && * instancesMetadata == "" && len ( tr . Projects ) == 0 {
1055+ return tr
10421056 }
10431057
1044- return args , * logDebugStdoutFlag , * verboseFlag , nil , false , v2Compat , false , true
1058+ tr .OK = true
1059+ return tr
10451060}
0 commit comments