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  }