forked from skuid/helm-value-store
/
load.go
61 lines (49 loc) · 1.26 KB
/
load.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package cmd
import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/skuid/helm-value-store/store"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
type loadCmdArgs struct {
file string
setup bool
}
var loadArgs = &loadCmdArgs{}
var loadCmd = &cobra.Command{
Use: "load",
Short: "load a json file of releases",
Run: load,
}
func init() {
RootCmd.AddCommand(loadCmd)
f := loadCmd.Flags()
f.StringVar(&loadArgs.file, "file", "", "Name of file to ingest")
f.BoolVar(&loadArgs.setup, "setup", false, "Setup the value store (may create resources).")
loadCmd.MarkFlagRequired("file")
err := loadCmd.MarkFlagFilename("file", valueExtensions...)
if err != nil {
exitOnErr(err)
}
}
func load(cmd *cobra.Command, args []string) {
fmt.Printf("Opening %s\n", loadArgs.file)
f, err := os.Open(loadArgs.file)
exitOnErr(err)
defer f.Close()
releases := []store.Release{}
err = json.NewDecoder(f).Decode(&releases)
exitOnErr(err)
ctx, cancel := context.WithTimeout(context.Background(), viper.GetDuration("timeout"))
defer cancel()
if loadArgs.setup {
err = releaseStore.Setup(ctx)
exitOnErr(err)
}
err = releaseStore.Load(ctx, releases)
exitOnErr(err)
fmt.Printf("Loaded %d resources into %s\n", len(releases), viper.GetString("backend"))
}