github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/cmd/docker-app/image-add.go (about) 1 package main 2 3 import ( 4 "os" 5 6 "github.com/docker/app/internal" 7 "github.com/docker/app/internal/image" 8 "github.com/docker/app/internal/packager" 9 "github.com/docker/app/render" 10 "github.com/docker/app/types" 11 cliopts "github.com/docker/cli/opts" 12 "github.com/spf13/cobra" 13 ) 14 15 var ( 16 imageAddComposeFiles []string 17 imageAddSettingsFile []string 18 imageAddEnv []string 19 ) 20 21 func imageAddCmd() *cobra.Command { 22 cmd := &cobra.Command{ 23 Use: "image-add <app-name> [services...]", 24 Short: "Add images for given services (default: all) to the app package", 25 Long: `This command renders the app's docker-compose.yml file, looks for the 26 images it uses, and saves them from the local docker daemon to the images/ 27 subdirectory.`, 28 Args: cobra.MinimumNArgs(1), 29 RunE: func(cmd *cobra.Command, args []string) error { 30 oappname := args[0] 31 app, err := packager.Extract(oappname, 32 types.WithSettingsFiles(imageAddSettingsFile...), 33 types.WithComposeFiles(imageAddComposeFiles...), 34 ) 35 if err != nil { 36 return err 37 } 38 defer app.Cleanup() 39 d := cliopts.ConvertKVStringsToMap(imageAddEnv) 40 config, err := render.Render(app, d) 41 if err != nil { 42 return err 43 } 44 if err := image.Add(app.Name, args[1:], config); err != nil { 45 return err 46 } 47 // check if source was a tarball 48 s, err := os.Stat(oappname) 49 if err != nil { 50 // try appending our extension 51 oappname = internal.DirNameFromAppName(oappname) 52 s, err = os.Stat(oappname) 53 if err != nil { 54 return err 55 } 56 } 57 if !s.IsDir() { 58 target, err := os.Create(oappname) 59 if err != nil { 60 return err 61 } 62 // source was a tarball, rebuild it 63 return packager.Pack(app.Name, target) 64 } 65 return nil 66 }, 67 } 68 if internal.Experimental == "on" { 69 cmd.Flags().StringArrayVarP(&imageAddComposeFiles, "compose-files", "c", []string{}, "Override Compose files") 70 cmd.Flags().StringArrayVarP(&imageAddSettingsFile, "settings-files", "s", []string{}, "Override settings files") 71 cmd.Flags().StringArrayVarP(&imageAddEnv, "env", "e", []string{}, "Override environment values") 72 } 73 return cmd 74 }