docker-save-cli/cmd/main.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)
}
}