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

Commit 4b70a4c

Browse files
author
Ian Campbell
committed
Use WithOpt pattern for prepareCredentialSet
The argument list here was getting unwieldy (and I'm about to add more). There's a slight downside here of forgetting to add a new `withFoo` to all the correct places. Signed-off-by: Ian Campbell <ijc@docker.com>
1 parent 96bef40 commit 4b70a4c

5 files changed

Lines changed: 50 additions & 37 deletions

File tree

internal/commands/cnab.go

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,49 +35,54 @@ type bindMount struct {
3535

3636
const defaultSocketPath string = "/var/run/docker.sock"
3737

38-
func addNamedCredentialSets(creds map[string]string, namedCredentialsets []string) error {
39-
for _, file := range namedCredentialsets {
40-
if _, err := os.Stat(file); err != nil {
41-
file = filepath.Join(duffleHome().Credentials(), file+".yaml")
42-
}
43-
c, err := credentials.Load(file)
44-
if err != nil {
45-
return err
46-
}
47-
values, err := c.Resolve()
48-
if err != nil {
49-
return err
50-
}
51-
for k, v := range values {
52-
if _, ok := creds[k]; ok {
53-
return fmt.Errorf("ambiguous credential resolution: %q is present in multiple credential sets", k)
38+
type credentialSetOpt func(b *bundle.Bundle, creds map[string]string) error
39+
40+
func addNamedCredentialSets(namedCredentialsets []string) credentialSetOpt {
41+
return func(_ *bundle.Bundle, creds map[string]string) error {
42+
for _, file := range namedCredentialsets {
43+
if _, err := os.Stat(file); err != nil {
44+
file = filepath.Join(duffleHome().Credentials(), file+".yaml")
45+
}
46+
c, err := credentials.Load(file)
47+
if err != nil {
48+
return err
49+
}
50+
values, err := c.Resolve()
51+
if err != nil {
52+
return err
53+
}
54+
for k, v := range values {
55+
if _, ok := creds[k]; ok {
56+
return fmt.Errorf("ambiguous credential resolution: %q is present in multiple credential sets", k)
57+
}
58+
creds[k] = v
5459
}
55-
creds[k] = v
5660
}
61+
return nil
5762
}
58-
return nil
5963
}
6064

61-
func addDockerCredentials(creds map[string]string, contextName string, contextStore store.Store) error {
62-
if contextName != "" {
63-
data, err := ioutil.ReadAll(store.Export(contextName, contextStore))
64-
if err != nil {
65-
return err
65+
func addDockerCredentials(contextName string, contextStore store.Store) credentialSetOpt {
66+
// docker desktop contexts require some rewriting for being used within a container
67+
contextStore = dockerDesktopAwareStore{Store: contextStore}
68+
return func(_ *bundle.Bundle, creds map[string]string) error {
69+
if contextName != "" {
70+
data, err := ioutil.ReadAll(store.Export(contextName, contextStore))
71+
if err != nil {
72+
return err
73+
}
74+
creds[internal.CredentialDockerContextName] = string(data)
6675
}
67-
creds[internal.CredentialDockerContextName] = string(data)
76+
return nil
6877
}
69-
return nil
7078
}
7179

72-
func prepareCredentialSet(contextName string, contextStore store.Store, b *bundle.Bundle, namedCredentialsets []string) (map[string]string, error) {
73-
// docker desktop contexts require some rewriting for being used within a container
74-
contextStore = dockerDesktopAwareStore{Store: contextStore}
80+
func prepareCredentialSet(b *bundle.Bundle, opts ...credentialSetOpt) (map[string]string, error) {
7581
creds := map[string]string{}
76-
if err := addNamedCredentialSets(creds, namedCredentialsets); err != nil {
77-
return nil, err
78-
}
79-
if err := addDockerCredentials(creds, contextName, contextStore); err != nil {
80-
return nil, err
82+
for _, op := range opts {
83+
if err := op(b, creds); err != nil {
84+
return nil, err
85+
}
8186
}
8287

8388
_, requiresDockerContext := b.Credentials[internal.CredentialDockerContextName]

internal/commands/install.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ func runInstall(dockerCli command.Cli, appname string, opts installOptions) erro
102102
if err != nil {
103103
return err
104104
}
105-
creds, err := prepareCredentialSet(targetContext, dockerCli.ContextStore(), bndl, opts.credentialsets)
105+
creds, err := prepareCredentialSet(bndl,
106+
addNamedCredentialSets(opts.credentialsets),
107+
addDockerCredentials(targetContext, dockerCli.ContextStore()))
106108
if err != nil {
107109
return err
108110
}

internal/commands/status.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ func runStatus(dockerCli command.Cli, claimName string, opts credentialOptions)
4747
if err != nil {
4848
return err
4949
}
50-
creds, err := prepareCredentialSet(targetContext, dockerCli.ContextStore(), c.Bundle, opts.credentialsets)
50+
creds, err := prepareCredentialSet(c.Bundle,
51+
addNamedCredentialSets(opts.credentialsets),
52+
addDockerCredentials(targetContext, dockerCli.ContextStore()))
5153
if err != nil {
5254
return err
5355
}

internal/commands/uninstall.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ func runUninstall(dockerCli command.Cli, claimName string, opts credentialOption
4646
if err != nil {
4747
return err
4848
}
49-
creds, err := prepareCredentialSet(targetContext, dockerCli.ContextStore(), c.Bundle, opts.credentialsets)
49+
creds, err := prepareCredentialSet(c.Bundle,
50+
addNamedCredentialSets(opts.credentialsets),
51+
addDockerCredentials(targetContext, dockerCli.ContextStore()))
5052
if err != nil {
5153
return err
5254
}

internal/commands/upgrade.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ func runUpgrade(dockerCli command.Cli, installationName string, opts upgradeOpti
7171
if err != nil {
7272
return err
7373
}
74-
creds, err := prepareCredentialSet(targetContext, dockerCli.ContextStore(), c.Bundle, opts.credentialsets)
74+
creds, err := prepareCredentialSet(c.Bundle,
75+
addNamedCredentialSets(opts.credentialsets),
76+
addDockerCredentials(targetContext, dockerCli.ContextStore()))
7577
if err != nil {
7678
return err
7779
}

0 commit comments

Comments
 (0)