48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"docker-save/internal/docker"
|
|
"log"
|
|
|
|
"git.trj.tw/golang/utils"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var rootCmd *cobra.Command
|
|
|
|
func main() {
|
|
var outputPath string
|
|
var imageName string
|
|
var tarName string
|
|
var doPull bool
|
|
var rm bool
|
|
|
|
rootCmd = &cobra.Command{
|
|
Use: "docker-save",
|
|
Short: "docker-save is a tool to save docker images to tarballs",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
outputPath = utils.ParsePath(outputPath)
|
|
if !utils.CheckExists(outputPath, true) || !utils.IsDir(outputPath) {
|
|
log.Fatal("output path is not a directory")
|
|
}
|
|
|
|
ctx := context.Background()
|
|
if err := docker.SaveImageTar(ctx, imageName, outputPath, tarName, doPull, rm); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
rootCmd.Flags().StringVarP(&outputPath, "output", "o", "", "output path")
|
|
rootCmd.Flags().StringVarP(&imageName, "image", "i", "", "image name")
|
|
rootCmd.Flags().StringVarP(&tarName, "name", "n", "", "tar name")
|
|
rootCmd.Flags().BoolVarP(&doPull, "pull", "p", false, "pull image")
|
|
rootCmd.Flags().BoolVarP(&rm, "rm", "", false, "delete image after save")
|
|
rootCmd.MarkFlagRequired("image")
|
|
rootCmd.MarkFlagRequired("output")
|
|
|
|
if err := rootCmd.Execute(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|