Skip to content

Commit

Permalink
prevent empty exports from polluting vars and secrets
Browse files Browse the repository at this point in the history
  • Loading branch information
umputun committed May 12, 2023
1 parent 203a29e commit ee1c8ad
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 4 deletions.
20 changes: 20 additions & 0 deletions cmd/spot/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ func Test_runCompleted(t *testing.T) {
TaskName: "task1",
Targets: []string{hostAndPort},
Only: []string{"wait"},
SecretsProvider: SecretsProvider{
Provider: "spot",
Conn: "testdata/test-secrets.db",
Key: "1234567890",
},
}
setupLog(true)
st := time.Now()
Expand Down Expand Up @@ -85,6 +90,11 @@ func Test_runCompleted(t *testing.T) {
Targets: []string{hostAndPort},
Only: []string{"wait"},
Dry: true,
SecretsProvider: SecretsProvider{
Provider: "spot",
Conn: "testdata/test-secrets.db",
Key: "1234567890",
},
}
setupLog(true)
st := time.Now()
Expand Down Expand Up @@ -167,6 +177,11 @@ func Test_runCanceled(t *testing.T) {
TaskName: "task1",
Targets: []string{hostAndPort},
Only: []string{"wait"},
SecretsProvider: SecretsProvider{
Provider: "spot",
Conn: "testdata/test-secrets.db",
Key: "1234567890",
},
}
setupLog(true)
go func() {
Expand Down Expand Up @@ -220,6 +235,11 @@ func Test_connectFailed(t *testing.T) {
PlaybookFile: "testdata/conf.yml",
TaskName: "task1",
Targets: []string{hostAndPort},
SecretsProvider: SecretsProvider{
Provider: "spot",
Conn: "testdata/test-secrets.db",
Key: "1234567890",
},
}
setupLog(true)
err := run(opts)
Expand Down
10 changes: 8 additions & 2 deletions pkg/config/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,14 @@ func (cmd *Cmd) scriptFile(inp string) (r io.Reader) {
// those variables can be used by the caller to set environment variables for the next commands
if strings.HasPrefix(c, "export") {
expKey := strings.TrimPrefix(c, "export")
expKey = strings.Split(expKey, "=")[0]
expKey = strings.TrimSpace(expKey)
expElems := strings.Split(expKey, "=")
if len(expElems) != 2 {
continue
}
expKey = strings.TrimSpace(expElems[0])
if expKey == "" {
continue // skip empty exports
}
exports = append(exports, expKey)
}
}
Expand Down
22 changes: 22 additions & 0 deletions pkg/config/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,28 @@ export BAR='foo'
"echo setvar BAR=${BAR}",
},
},
{
name: "multiline command with empty exports",
cmd: &Cmd{
Script: `echo 'Hello, World!'
export
echo 'Goodbye, World!'
export BAR
export FOO='bar'
`,
},
expectedScript: "",
expectedContents: []string{
"#!/bin/sh",
"set -e",
"echo 'Hello, World!'",
"export",
"echo 'Goodbye, World!'",
"export BAR",
"export FOO='bar'",
"echo setvar FOO=${FOO}",
},
},
{
name: "single line command with environment variables",
cmd: &Cmd{
Expand Down
7 changes: 5 additions & 2 deletions pkg/config/playbook.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,8 @@ func New(fname string, overrides *Overrides, secProvider SecretsProvider) (res *
}

// load secrets from secrets provider
if err = res.loadSecrets(); err != nil {
return nil, err
if secErr := res.loadSecrets(); secErr != nil {
return nil, secErr
}

// log loaded config info
Expand Down Expand Up @@ -500,6 +500,9 @@ func (p *PlayBook) loadSecrets() error {
secretsCount := 0
for _, t := range p.Tasks {
for _, c := range t.Commands {
if c.Options.NoAuto {
continue // skip commands with noauto flag
}
secretsCount += len(c.Options.Secrets)
}
}
Expand Down

0 comments on commit ee1c8ad

Please sign in to comment.