@@ -35,49 +35,54 @@ type bindMount struct {
3535
3636const 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 ]
0 commit comments