@@ -14,6 +14,7 @@ import (
1414 "github.com/gruntwork-io/terragrunt/options"
1515 "github.com/gruntwork-io/terragrunt/pkg/log"
1616 "github.com/gruntwork-io/terragrunt/shell"
17+ "github.com/mattn/go-shellwords"
1718)
1819
1920// Provider runs external command that returns a json string with credentials.
@@ -35,15 +36,21 @@ func (provider *Provider) Name() string {
3536
3637// GetCredentials implements providers.GetCredentials
3738func (provider * Provider ) GetCredentials (ctx context.Context , l log.Logger ) (* providers.Credentials , error ) {
38- command := provider .terragruntOptions .AuthProviderCmd
39- if command == "" {
39+ if provider .terragruntOptions .AuthProviderCmd == "" {
4040 return nil , nil
4141 }
4242
43- var args [] string
43+ parser := shellwords . NewParser ()
4444
45- if parts := strings .Fields (command ); len (parts ) > 1 {
46- command = parts [0 ]
45+ parts , err := parser .Parse (provider .terragruntOptions .AuthProviderCmd )
46+ if err != nil {
47+ return nil , errors .Errorf ("failed to parse auth provider command: %w" , err )
48+ }
49+
50+ command := parts [0 ]
51+
52+ args := []string {}
53+ if len (parts ) > 1 {
4754 args = parts [1 :]
4855 }
4956
@@ -53,7 +60,10 @@ func (provider *Provider) GetCredentials(ctx context.Context, l log.Logger) (*pr
5360 }
5461
5562 if output .Stdout .String () == "" {
56- return nil , errors .Errorf ("command %s completed successfully, but the response does not contain JSON string" , command )
63+ return nil , errors .Errorf (
64+ "command %s completed successfully, but the response does not contain JSON string" ,
65+ provider .terragruntOptions .AuthProviderCmd ,
66+ )
5767 }
5868
5969 resp := & Response {Envs : make (map [string ]string )}
0 commit comments