9999 silentFlag ,
100100 regionFlag ,
101101 },
102- ArgsUsage : "[working-dir]" ,
102+ // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator,
103+ // we disable it entirely here and require multiple --secrets flags to be used.
104+ DisableSliceFlagSeparator : true ,
105+ ArgsUsage : "[working-dir]" ,
103106 },
104107 {
105108 Name : "config" ,
@@ -120,7 +123,10 @@ var (
120123 secretsFlag ,
121124 secretsFileFlag ,
122125 },
123- ArgsUsage : "[working-dir]" ,
126+ // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator,
127+ // we disable it entirely here and require multiple --secrets flags to be used.
128+ DisableSliceFlagSeparator : true ,
129+ ArgsUsage : "[working-dir]" ,
124130 },
125131 {
126132 Name : "status" ,
@@ -141,7 +147,10 @@ var (
141147 secretsFlag ,
142148 secretsFileFlag ,
143149 },
144- ArgsUsage : "[working-dir]" ,
150+ // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator,
151+ // we disable it entirely here and require multiple --secrets flags to be used.
152+ DisableSliceFlagSeparator : true ,
153+ ArgsUsage : "[working-dir]" ,
145154 },
146155 {
147156 Name : "restart" ,
@@ -237,7 +246,10 @@ var (
237246 Value : false ,
238247 },
239248 },
240- ArgsUsage : "[working-dir]" ,
249+ // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator,
250+ // we disable it entirely here and require multiple --secrets flags to be used.
251+ DisableSliceFlagSeparator : true ,
252+ ArgsUsage : "[working-dir]" ,
241253 },
242254 },
243255 },
@@ -293,7 +305,7 @@ func createAgent(ctx context.Context, cmd *cli.Command) error {
293305 }
294306
295307 // We have a configured project, but don't need to double-confirm if it was
296- // set via a command line flag, because intent it clear.
308+ // set via a command line flag, because intent is clear.
297309 if ! cmd .IsSet ("project" ) {
298310 useProject := true
299311 if err := huh .NewForm (huh .NewGroup (huh .NewConfirm ().
@@ -1012,13 +1024,18 @@ func selectAgent(ctx context.Context, _ *cli.Command) (string, error) {
10121024func requireSecrets (_ context.Context , cmd * cli.Command , required , lazy bool ) ([]* lkproto.AgentSecret , error ) {
10131025 silent := cmd .Bool ("silent" )
10141026 secrets := make (map [string ]* lkproto.AgentSecret )
1015- for _ , secret := range cmd .StringSlice ("secrets" ) {
1016- secret := strings .Split (secret , "=" )
1017- agentSecret := & lkproto.AgentSecret {
1018- Name : secret [0 ],
1019- Value : []byte (secret [1 ]),
1027+
1028+ if values , err := parseKeyValuePairs (cmd , "secrets" ); err != nil {
1029+ return nil , fmt .Errorf ("failed to parse secrets: %w" , err )
1030+ } else {
1031+ for key , val := range values {
1032+ agentSecret := & lkproto.AgentSecret {
1033+ Name : key ,
1034+ Value : []byte (val ),
1035+ }
1036+ secrets [key ] = agentSecret
10201037 }
1021- secrets [ secret [ 0 ]] = agentSecret
1038+
10221039 }
10231040
10241041 shouldReadFromDisk := cmd .IsSet ("secrets-file" ) || ! lazy || (required && len (secrets ) == 0 )
0 commit comments