@@ -9,9 +9,13 @@ import (
9
9
"path/filepath"
10
10
"strings"
11
11
12
+ composeloader "github.com/docker/cli/cli/compose/loader"
13
+ composetypes "github.com/docker/cli/cli/compose/types"
14
+
12
15
"github.com/docker/app/internal"
13
16
"github.com/docker/app/types/metadata"
14
17
"github.com/docker/app/types/parameters"
18
+ "github.com/docker/app/types/secrets"
15
19
)
16
20
17
21
// AppSourceKind represents what format the app was in when read
@@ -41,6 +45,7 @@ type App struct {
41
45
composesContent [][]byte
42
46
parametersContent [][]byte
43
47
parameters parameters.Parameters
48
+ secrets secrets.Secrets
44
49
metadataContent []byte
45
50
metadata metadata.AppMetadata
46
51
attachments []Attachment
@@ -93,6 +98,11 @@ func (a *App) Attachments() []Attachment {
93
98
return a .attachments
94
99
}
95
100
101
+ // Secrets returns a map of secrets
102
+ func (a * App ) Secrets () secrets.Secrets {
103
+ return a .secrets
104
+ }
105
+
96
106
func (a * App ) HasCRLF () bool {
97
107
return a .hasCRLF
98
108
}
@@ -288,10 +298,36 @@ func composeLoader(f func() ([][]byte, error)) func(app *App) error {
288
298
return err
289
299
}
290
300
app .composesContent = append (app .composesContent , composesContent ... )
301
+ app .secrets = secrets .New ()
302
+ for _ , c := range app .composesContent {
303
+ parsedCompose , err := composeloader .ParseYAML (c )
304
+ if err != nil {
305
+ return err
306
+ }
307
+ cfg , err := composeloader .Load (composetypes.ConfigDetails {
308
+ ConfigFiles : []composetypes.ConfigFile {
309
+ {Filename : "docker-compose.yml" , Config : parsedCompose },
310
+ },
311
+ }, withSkipInterpolation )
312
+ if err != nil {
313
+ return err
314
+ }
315
+ for name , secret := range cfg .Secrets {
316
+ app .secrets [name ] = secrets.Secret {
317
+ Name : secret .Name ,
318
+ Path : secret .File ,
319
+ External : secret .External .External ,
320
+ }
321
+ }
322
+ }
291
323
return nil
292
324
}
293
325
}
294
326
327
+ func withSkipInterpolation (opts * composeloader.Options ) {
328
+ opts .SkipInterpolation = true
329
+ }
330
+
295
331
func readReaders (readers ... io.Reader ) ([][]byte , error ) {
296
332
content := make ([][]byte , len (readers ))
297
333
var errs []string
0 commit comments