package cmd
import (
"bytes"
"compress/gzip"
"encoding/base64"
"io"
"io/ioutil"
"strings"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/vmware/dispatch/pkg/dispatchcli/i18n"
)
const createSeedImagesLong = `Create base-images and images to quick-start with the current version of Dispatch`
var (
outputFile string
imagesB64 string
)
func NewCmdCreateSeedImages(out io.Writer, errOut io.Writer) *cobra.Command {
cmd := &cobra.Command{
Use: "seed-images",
Short: i18n.T("Create seed base-images and images"),
Long: createSeedImagesLong,
Args: cobra.ExactArgs(0),
Aliases: []string{"seed"},
Run: func(cmd *cobra.Command, args []string) {
err := createSeedImages(out)
CheckErr(err)
},
}
cmd.Flags().StringVarP(&outputFile, "output-file", "O", "", "seed images YAML gets written to this file (nothing gets created)")
return cmd
}
func createSeedImages(out io.Writer) error {
if imagesB64 == "" {
return errors.New("embedded images YAML is empty")
}
sr := strings.NewReader(imagesB64)
br := base64.NewDecoder(base64.StdEncoding, sr)
gr, err := gzip.NewReader(br)
if err != nil {
return errors.Wrap(err, "error creating a gzip reader for embedded images YAML")
}
bs := &bytes.Buffer{}
_, err = bs.ReadFrom(gr)
if err != nil {
return errors.Wrap(err, "error reading embedded images YAML: error reading from gzip reader")
}
if outputFile != "" {
err := ioutil.WriteFile(outputFile, bs.Bytes(), 0644)
return errors.Wrapf(err, "error writing images YAML to '%s'", outputFile)
}
initCreateMap()
return importBytes(out, bs.Bytes(), createMap, "Created")
}