From eba64fd51ff76a49807cf1b4341e328c9b69096d Mon Sep 17 00:00:00 2001 From: Aleix Penella Date: Wed, 13 Mar 2024 17:35:57 +0100 Subject: [PATCH] quote scp-extra-args, sftp-extra-args, ssh-common-args and ssh-extra-args when generating the command to execute --- pkg/adhoc/ansibleAdhocOptions.go | 18 ++++++++++++++---- pkg/adhoc/ansibleAdhocOptions_test.go | 16 ++++++++-------- pkg/playbook/ansiblePlaybookOptions.go | 18 ++++++++++++++---- pkg/playbook/ansiblePlaybookOptions_test.go | 10 +++++----- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/pkg/adhoc/ansibleAdhocOptions.go b/pkg/adhoc/ansibleAdhocOptions.go index a3eb4e0..3b0ad99 100644 --- a/pkg/adhoc/ansibleAdhocOptions.go +++ b/pkg/adhoc/ansibleAdhocOptions.go @@ -2,9 +2,11 @@ package adhoc import ( "fmt" + "strings" common "github.com/apenella/go-common-utils/data" errors "github.com/apenella/go-common-utils/error" + "github.com/kballard/go-shellquote" ) const ( @@ -429,22 +431,30 @@ func (o *AnsibleAdhocOptions) GenerateAnsibleAdhocOptions() ([]string, error) { if o.SCPExtraArgs != "" { cmd = append(cmd, SCPExtraArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SCPExtraArgs)) + + splitedSCPExtraArgs := strings.Split(o.SCPExtraArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSCPExtraArgs...)) } if o.SFTPExtraArgs != "" { cmd = append(cmd, SFTPExtraArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SFTPExtraArgs)) + + splitedSFTPExtraArgs := strings.Split(o.SFTPExtraArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSFTPExtraArgs...)) } if o.SSHCommonArgs != "" { cmd = append(cmd, SSHCommonArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SSHCommonArgs)) + + splitedSSHCommonArgs := strings.Split(o.SSHCommonArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSSHCommonArgs...)) } if o.SSHExtraArgs != "" { cmd = append(cmd, SSHExtraArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SSHExtraArgs)) + + splitedSSHExtraArgs := strings.Split(o.SSHExtraArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSSHExtraArgs...)) } if o.Timeout > 0 { diff --git a/pkg/adhoc/ansibleAdhocOptions_test.go b/pkg/adhoc/ansibleAdhocOptions_test.go index 23d3b95..8df6e26 100644 --- a/pkg/adhoc/ansibleAdhocOptions_test.go +++ b/pkg/adhoc/ansibleAdhocOptions_test.go @@ -38,10 +38,10 @@ func TestGenerateAnsibleAdhocOptions(t *testing.T) { PlaybookDir: "playbook-dir", Poll: 12, PrivateKey: "pk", - SCPExtraArgs: "scp-extra-args", - SFTPExtraArgs: "sftp-extra-args", - SSHCommonArgs: "ssh-common-args", - SSHExtraArgs: "ssh-extra-args", + SCPExtraArgs: "scp-extra-args1 scp-extra-args2", + SFTPExtraArgs: "sftp-extra-args1 sftp-extra-args2", + SSHCommonArgs: "ssh-common-args1 ssh-common-args2", + SSHExtraArgs: "ssh-extra-args1 ssh-extra-args2", SyntaxCheck: true, Timeout: 10, Tree: "tree", @@ -96,13 +96,13 @@ func TestGenerateAnsibleAdhocOptions(t *testing.T) { "--private-key", "pk", "--scp-extra-args", - "'scp-extra-args'", + "scp-extra-args1 scp-extra-args2", "--sftp-extra-args", - "'sftp-extra-args'", + "sftp-extra-args1 sftp-extra-args2", "--ssh-common-args", - "'ssh-common-args'", + "ssh-common-args1 ssh-common-args2", "--ssh-extra-args", - "'ssh-extra-args'", + "ssh-extra-args1 ssh-extra-args2", "--timeout", "10", "--user", diff --git a/pkg/playbook/ansiblePlaybookOptions.go b/pkg/playbook/ansiblePlaybookOptions.go index 45ab507..77e5d7c 100644 --- a/pkg/playbook/ansiblePlaybookOptions.go +++ b/pkg/playbook/ansiblePlaybookOptions.go @@ -2,9 +2,11 @@ package playbook import ( "fmt" + "strings" common "github.com/apenella/go-common-utils/data" errors "github.com/apenella/go-common-utils/error" + "github.com/kballard/go-shellquote" ) const ( @@ -412,22 +414,30 @@ func (o *AnsiblePlaybookOptions) GenerateCommandOptions() ([]string, error) { if o.SCPExtraArgs != "" { cmd = append(cmd, SCPExtraArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SCPExtraArgs)) + + splitedSCPExtraArgs := strings.Split(o.SCPExtraArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSCPExtraArgs...)) } if o.SFTPExtraArgs != "" { cmd = append(cmd, SFTPExtraArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SFTPExtraArgs)) + + splitedSFTPExtraArgs := strings.Split(o.SFTPExtraArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSFTPExtraArgs...)) } if o.SSHCommonArgs != "" { cmd = append(cmd, SSHCommonArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SSHCommonArgs)) + + splitedSSHCommonArgs := strings.Split(o.SSHCommonArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSSHCommonArgs...)) } if o.SSHExtraArgs != "" { cmd = append(cmd, SSHExtraArgsFlag) - cmd = append(cmd, fmt.Sprintf("'%s'", o.SSHExtraArgs)) + + splitedSSHExtraArgs := strings.Split(o.SSHExtraArgs, " ") + cmd = append(cmd, shellquote.Join(splitedSSHExtraArgs...)) } if o.Timeout > 0 { diff --git a/pkg/playbook/ansiblePlaybookOptions_test.go b/pkg/playbook/ansiblePlaybookOptions_test.go index 0d6e11e..05771ac 100644 --- a/pkg/playbook/ansiblePlaybookOptions_test.go +++ b/pkg/playbook/ansiblePlaybookOptions_test.go @@ -54,11 +54,11 @@ func TestGenerateCommandOptions(t *testing.T) { ListTasks: true, ModulePath: "module-path", PrivateKey: "private-key", - SCPExtraArgs: "scp-extra-args", - SFTPExtraArgs: "sftp-extra-args", + SCPExtraArgs: "scp-extra-args1 scp-extra-args2", + SFTPExtraArgs: "sftp-extra-args1 sftp-extra-args2", SkipTags: "skip-tags", - SSHCommonArgs: "ssh-common-args", - SSHExtraArgs: "ssh-extra-args", + SSHCommonArgs: "ssh-common-args1 ssh-common-args2", + SSHExtraArgs: "ssh-extra-args1 ssh-extra-args2", StartAtTask: "start-at-task", Step: true, SyntaxCheck: true, @@ -71,7 +71,7 @@ func TestGenerateCommandOptions(t *testing.T) { Version: true, }, err: nil, - options: []string{"--ask-vault-password", "--check", "--diff", "--extra-vars", "{\"extra\":\"var\"}", "--extra-vars", "@test.yml", "--flush-cache", "--force-handlers", "--forks", "10", "--inventory", "inventory", "--limit", "limit", "--list-hosts", "--list-tags", "--list-tasks", "--module-path", "module-path", "--skip-tags", "skip-tags", "--start-at-task", "start-at-task", "--step", "--syntax-check", "--tags", "tags", "--vault-id", "vault-ID", "--vault-password-file", "vault-password-file", "-vvvv", "--version", "--ask-pass", "--connection", "local", "--private-key", "private-key", "--scp-extra-args", "'scp-extra-args'", "--sftp-extra-args", "'sftp-extra-args'", "--ssh-common-args", "'ssh-common-args'", "--ssh-extra-args", "'ssh-extra-args'", "--timeout", "11", "--user", "user", "--ask-become-pass", "--become", "--become-method", "become-method", "--become-user", "become-user"}, + options: []string{"--ask-vault-password", "--check", "--diff", "--extra-vars", "{\"extra\":\"var\"}", "--extra-vars", "@test.yml", "--flush-cache", "--force-handlers", "--forks", "10", "--inventory", "inventory", "--limit", "limit", "--list-hosts", "--list-tags", "--list-tasks", "--module-path", "module-path", "--skip-tags", "skip-tags", "--start-at-task", "start-at-task", "--step", "--syntax-check", "--tags", "tags", "--vault-id", "vault-ID", "--vault-password-file", "vault-password-file", "-vvvv", "--version", "--ask-pass", "--connection", "local", "--private-key", "private-key", "--scp-extra-args", "scp-extra-args1 scp-extra-args2", "--sftp-extra-args", "sftp-extra-args1 sftp-extra-args2", "--ssh-common-args", "ssh-common-args1 ssh-common-args2", "--ssh-extra-args", "ssh-extra-args1 ssh-extra-args2", "--timeout", "11", "--user", "user", "--ask-become-pass", "--become", "--become-method", "become-method", "--become-user", "become-user"}, }, }