Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit fb5d7a5

Browse files
authored
Merge pull request #540 from silvin-lubecki/fix-credential-set
A credential-set can be a local YAML file
2 parents 73d8674 + 96bc35c commit fb5d7a5

File tree

4 files changed

+56
-20
lines changed

4 files changed

+56
-20
lines changed

e2e/commands_test.go

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package e2e
22

33
import (
4+
"encoding/json"
45
"fmt"
56
"io/ioutil"
67
"path/filepath"
@@ -449,30 +450,38 @@ STATUS
449450
}
450451

451452
func TestCredentials(t *testing.T) {
452-
cmd, cleanup := dockerCli.createTestCmd(
453-
withCredentialSet(t, "default", &credentials.CredentialSet{
454-
Name: "test-creds",
455-
Credentials: []credentials.CredentialStrategy{
456-
{
457-
Name: "secret1",
458-
Source: credentials.Source{
459-
Value: "secret1value",
460-
},
453+
credSet := &credentials.CredentialSet{
454+
Name: "test-creds",
455+
Credentials: []credentials.CredentialStrategy{
456+
{
457+
Name: "secret1",
458+
Source: credentials.Source{
459+
Value: "secret1value",
461460
},
462-
{
463-
Name: "secret2",
464-
Source: credentials.Source{
465-
Value: "secret2value",
466-
},
461+
},
462+
{
463+
Name: "secret2",
464+
Source: credentials.Source{
465+
Value: "secret2value",
467466
},
468467
},
469-
}),
468+
},
469+
}
470+
// Create a tmp dir with a credential store
471+
cmd, cleanup := dockerCli.createTestCmd(
472+
withCredentialSet(t, "default", credSet),
470473
)
471474
defer cleanup()
475+
// Create a local credentialSet
472476

477+
buf, err := json.Marshal(credSet)
478+
assert.NilError(t, err)
473479
bundleJSON := golden.Get(t, "credential-install-bundle.json")
474480
tmpDir := fs.NewDir(t, t.Name(),
475481
fs.WithFile("bundle.json", "", fs.WithBytes(bundleJSON)),
482+
fs.WithDir("local",
483+
fs.WithFile("test-creds.yaml", "", fs.WithBytes(buf)),
484+
),
476485
)
477486
defer tmpDir.Remove()
478487

@@ -505,15 +514,26 @@ func TestCredentials(t *testing.T) {
505514
golden.Assert(t, result.Stdout(), "credential-install-full.golden")
506515
})
507516

508-
t.Run("mixed", func(t *testing.T) {
517+
t.Run("mixed-credstore", func(t *testing.T) {
509518
cmd.Command = dockerCli.Command(
510519
"app", "install",
511520
"--credential-set", "test-creds",
512521
"--credential", "secret3=xyzzy",
513-
"--name", "mixed", bundle,
522+
"--name", "mixed-credstore", bundle,
523+
)
524+
result := icmd.RunCmd(cmd).Assert(t, icmd.Success)
525+
golden.Assert(t, result.Stdout(), "credential-install-mixed-credstore.golden")
526+
})
527+
528+
t.Run("mixed-local-cred", func(t *testing.T) {
529+
cmd.Command = dockerCli.Command(
530+
"app", "install",
531+
"--credential-set", tmpDir.Join("local", "test-creds.yaml"),
532+
"--credential", "secret3=xyzzy",
533+
"--name", "mixed-local-cred", bundle,
514534
)
515535
result := icmd.RunCmd(cmd).Assert(t, icmd.Success)
516-
golden.Assert(t, result.Stdout(), "credential-install-mixed.golden")
536+
golden.Assert(t, result.Stdout(), "credential-install-mixed-local-cred.golden")
517537
})
518538

519539
t.Run("overload", func(t *testing.T) {

e2e/testdata/credential-install-mixed.golden renamed to e2e/testdata/credential-install-mixed-credstore.golden

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ secret2value
44
SECRET_THREE: xyzzy
55
/var/secret_three/data.txt
66
xyzzy
7-
Application "mixed" installed on context "default"
7+
Application "mixed-credstore" installed on context "default"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
SECRET_ONE: secret1value
2+
/var/secret_two/data.txt
3+
secret2value
4+
SECRET_THREE: xyzzy
5+
/var/secret_three/data.txt
6+
xyzzy
7+
Application "mixed-local-cred" installed on context "default"

internal/commands/cnab.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,16 @@ type credentialSetOpt func(b *bundle.Bundle, creds credentials.Set) error
4444
func addNamedCredentialSets(credStore appstore.CredentialStore, namedCredentialsets []string) credentialSetOpt {
4545
return func(_ *bundle.Bundle, creds credentials.Set) error {
4646
for _, file := range namedCredentialsets {
47-
c, err := credStore.Read(file)
47+
var (
48+
c *credentials.CredentialSet
49+
err error
50+
)
51+
// Check the credentialset locally first, then try in the credential store
52+
if _, e := os.Stat(file); e == nil {
53+
c, err = credentials.Load(file)
54+
} else {
55+
c, err = credStore.Read(file)
56+
}
4857
if err != nil {
4958
return err
5059
}

0 commit comments

Comments
 (0)